質問: open(3333_4444.json, 'w')# 書き込みモードで開く f.writelines(response.text)# シーケンスが引数。 f.close() 取得された内容が以下のようになってしまいます。 <1111_2222.json> 1111 25253 1111 23555 <3333_4444.json> 1111 25253 1111 23555
回答: ◇コードの変更依頼 ファイル名を固定の文字列にするのではなく ``` querystring = {"Id":"3333","Id2":"4444","from":**,"to":**} f = open(3333_4444.json, 'w')# 書き込みモードで開く ``` `querystring`の辞書の値を元にファイル名を作る形にしてくださいな。 ``` file_name = querystring["Id"] + "_" + querystring["Id2"] + ".json" with open(file_name , 'w') as f: f.writelines(response.text)# シーケンスが引数。 ``` ◇確認するポイント 1,リクエスト先のURLはIDとID2を渡した時に正しく、別の内容を返しているか? **リクエスト先のドキュメントがあれば読んで(重要)**、ブラウザやREST APIテストツールで確認してみてくださいな。 2,リクエストヘッダーで`Accept:application/json`を行っていますが、`response.json()`ではなく、`response.text`で本当にあってますか? ``` headers = {"Accept": "application/json"} ``` 3,レスポンスのステータスコードを確認する。 `response.status_code` の値が`200`以外ならなんらかのエラーが発生しています。 4,追記モードとタイムスタンプ付きで書き込んで見る。 上記回答で改善されなければ、途中でレスポンスの内容が変わっていると推測されるので、 本当にそうなのかをタイムスタンプ付きの追記モードで書き込み、ファイルの内容を確認してみてくださいな。 ◇以下はサンプルコードです。 ``` # -*- coding: utf-8 -*- from datetime import datetime import requests def main() -> None: url = 'https://www.google.co.jp/' querystring = {"Id": "3333", "Id2": "4444", "from": "xxx", "to": "yyy"} headers = {"Accept": "application/json"} response = requests.request("GET", url, headers=headers, params=querystring) file_name = querystring['Id'] + '_' + querystring['Id2'] + '.json' with open(file_name, 'a') as f: # 追記モードで開く f.write('\n' + '#' * 60 + '\n') f.write(str(response.status_code) + '\n') # ステータスコードを書き込み f.write(datetime.now().strftime('%Y%m%d_%H%M%S_%f') + '\n') f.writelines(response.text) # シーケンスが引数。 if __name__ == "__main__": main() ``` あとはURLを表に出せるなら、出していただくと他の人の回答が付きやすいかもしれません。