1

このコードを見てください

order_service = client.GetService('OrderService', version='v201208')
creative_service = client.GetService('CreativeService', version='v201208')
with open('/tmp/urls.txt', 'w') as f:
    for i in range(0, 3929, 100):
        print 'ORDER BY ID LIMIT 100 OFFSET '+str(i)
        creatives = creative_service.getCreativesByStatement({'query':'ORDER BY ID LIMIT 100 OFFSET '+str(i)})
        try:
            for creative in creatives[0]['results']:
                try:
                    for var in creative['creativeTemplateVariableValues']:
                        if var['uniqueName'] == 'DetailsPageURL':                           
                            print var['value']
                            f.write(creative['advertiserId']+','+var['value']+"\n")
                exception:
                    pass
        except:
            raise
            pass

オフセットが200の場合の2回目の反復では、for creative in creatives[0]['results']結果のキーエラーについて文句を言いますが、try/exceptステートメントをif creative.has_key('creativeTemplateVariableValues'):次のように変更すると問題が修正されます。

order_service = client.GetService('OrderService', version='v201208')
creative_service = client.GetService('CreativeService', version='v201208')
with open('/tmp/urls.txt', 'w') as f:
    for i in range(0, 3929, 100):
        print 'ORDER BY ID LIMIT 100 OFFSET '+str(i)
        creatives = creative_service.getCreativesByStatement({'query':'ORDER BY ID LIMIT 100 OFFSET '+str(i)})
        try:
            print creatives[0]['results']
        except:
            print creatives
        #creatives = creative_service.getCreativesByStatement({'query':'ORDER BY ID LIMIT 10 OFFSET 200'})
        try:
            for creative in creatives[0]['results']:
                if creative.has_key('creativeTemplateVariableValues'):
                    for var in creative['creativeTemplateVariableValues']:
                        if var['uniqueName'] == 'DetailsPageURL':
                            print var['value']
                            f.write(creative['advertiserId']+','+var['value']+"\n")
        except:
            raise
            pass

なぜ???

4

1 に答える 1

1

「TemplateCreative」タイプのフィールド「creativeTemplateVariableValues」クリエイティブ。したがって、ネットワーク上にTemplateCreative以外のクリエイティブがある場合、フィールドはなく、これまで見てきたようにキーエラーがスローされます。以前と同じようにhas_keyチェックを実行できます。または、タイプチェックを実行することもできます。

if creative['Creative_Type'] == 'ImageCreative':
  for var in creative['creativeTemplateVariableValues']:
    ...

TemplateCreativesのみに関心がある場合は、その特定のクリエイティブタイプにステートメントフィルターを使用することをお勧めします。get_creatives_by_statementの例をご覧ください(http://code.google.com/p/google-api-ads-python/source/browse/trunk/examples/adspygoogle/dfp/v201208/get_creatives_by_statement.py)

DFP APIおよび関連するクライアントライブラリに関する今後の質問については、DFP APIフォーラムに投稿してください:https ://groups.google.com/forum/#!forum / google-doubleclick-for-publishers-api

于 2012-11-28T22:36:30.280 に答える