いくつかのGETリクエストを処理するためにループを実行できるpythonスクリプトを作成しました。次に、「クリエイティブ」フィールドの各リクエストの値を取得し、スクリプトの最後に「True」と「False」の両方の値の最終カウントを出力します。ここに私のコードは次のようになります。ここではGETリクエストループを実行するPythonスクリプトでは、「KeyError」がスローされますが、毎回ではありません。
import requests
import json
false_count = 0
true_count = 0
qa_creatives = open("numbers.txt")
arraylist = []
for line in qa_creatives.readlines():
arraylist.extend(line.split())
qa_creatives.close()
arraylist = map(int, arraylist)
authorization_code = raw_input("please enter your authorization code: ")
creatives = arraylist
print "Creative Check script is now running, please wait."
for creative in creatives:
url = "http://api.wiki123.com/v1.11/creative?id="+str(creative)
header = {"Authorization": authorization_code}
response = requests.get(url, headers=header)
creative_check = json.loads(response.text)
final_creative_status = creative_check["response"]["creative"]["is_expired"]
#print str(creative) + " expired status: " + str(final_creative_status)
if final_creative_status == False:
false_count += 1
else:
true_count += 1
print "Creative Check Complete:"
print str(false_count) + " creatives are still valid"
print str(true_count) + " creatives have expired"
はこれらのいずれかが要求をGET作るときに返されるJSONデータのサンプルです:
{
'response': {
'count': 1,
'creative': {
'prime_id': 1092343,
'off_audit': None,
'allow_audit': False,
'allow_ssl_audit': False,
'audit_feedback': None,
'audit_status': 'no_audit',
'backup_upload_status': None,
'brand': {
'category_id': 0,
'id': 1,
'name': 'Unknown'
}
}}}
奇妙なことは、このスクリプトは、いくつかの作品ということです他の時代、私は次のエラーが発生します:KeyError: 'creative'。私は、私の要求が毎回同じことを返すべきであり、キーが決して変わるべきではないので、私はこれに困惑しています。誰がここで何が起こっているかもしれないと言うことができますか?この問題をどのようにデバッグすることができるかに関する推奨事項はありますか?特定の「クリエイティブ」がループを壊している場合は、それを除外する最善の方法は何でしょうか?ありがとう。
for creative in creatives:
url = "http://api.wiki123.com/v1.11/creative?id="+str(creative)
header = {"Authorization": authorization_code}
api_response = requests.get(url, headers=header)
creative_check = json.loads(api_response.text)
creative_status = creative_check.get("response",
{}).get("creative{}).get("is_expired", None)
if creative_status is None:
pass
elif creative_status == True:
true_count += 1
else :
false_count += 1
print "Creative Check Complete: "
print str(false_count) + " creatives are still valid"
print str(true_count) + " creatives have expired"
注:さて、私はバックキーエラーを受信しませんが、私のスクリプトが終了した後false_countとtrue_countのための私のカウントの両方は常に0です。私のループのコードを更新し
どうやら、いくつかの時間が応答が* *その中に 'creative'で辞書を返しません。 –
これは私が想像していることです...特定の「創造的な」GET要求が「クリエイティブ」キーを含むデータを返さない場合、それらのデータを吐き出す良い方法はありますか?または、具体的には、それらを別のリストに入れますか? – user7681184
...あなたは 'KeyError'をキャッチしてそれに応じて処理することができます...いいえ? –