何を実現したいのかを書きましょう
PythonのRequestsを使ってAPIを実行しています。
下記の記事2つを参考にしています。
https://cybozu.dev/ja/id/c5da2ff7d17ed3b5764a4a3f/
https://cybozu.dev/ja/id/0cac896e13cc5a49602cc0c9/
【実現できていること】:
・レコード取得APIを使って添付ファイルフィールドにあるfileKeyを取得。
・ファイルダウンロードAPIを使ってfileKeyを元にファイルの内容データを取得。
【実現したいこと】:
・上記で取得したファイルの内容データを、ファイルの形にしてPC内に保存したい。
実行ソース
def kntnGetFile(key1, dmain, flKey, lg, msgFile):
headers = {
'Content-Type': 'application/json',
'X-Cybozu-Authorization': key1,
'X-HTTP-Method-Override': 'GET'
}
json_data = {
'fileKey': flKey
}
url = 'https://' + dmain + '.cybozu.com/k/v1/file.json'
for x in range(5): # 再試行用のfor (5回もcontinueされることはないが念のため)
try:
if x == 0 : response = requests.post(url, headers = headers, json = json_data)
# ステータスコードが4xx, 5xx番台の場合、再トライ
if 400 <= response.status_code < 600:
lg.warning('\"' + msgFile['WARNING']['00003'] + ' endpoint : ' + url + ' , message : ' + response.text + '\"')
response = apiRetry(response, 3, 'kntn', 'post', url, headers, json_data)
# 実行結果 (ステータスコード200,201以外は失敗)
if 200 <= response.status_code < 202:
pass # 成功
else:
rslt += 1 # 失敗
return rslt
except Exception as e:
# ステータスコードを返す以前のエラーの場合、再トライ
lg.warning('\"' + msgFile['WARNING']['00005'] + str(e) + ' , endpoint : ' + url + '\"')
response = None
response = apiRetry(response, 3, 'kntn', 'post', url, headers, json_data)
continue
.
取得したデータ(response.text)の内容は下記のようなものになっています。(一部抜粋)
'%PDF-1.5\n%忏嫌\n1 0 obj\n<< \n /Type /Catalog\n /Pages 45 0 R\n>>\nendobj\n2 0 obj\n<< \n /Type /Pattern\n /PatternType 1\n /PaintType 1\n /TilingType 1\n /Resources << \n /XObject << \n /Img1 35 0 R\n>>\n>>\n /Filter /FlateDecode\n ...