2016-04-01 12 views
2

誰かが同じ問題を偶然見つけて、私の問題のための簡単な解決策に導いてくれることを願っています。FacebookのマーケティングAPI:Python経由で多くの広告のメタデータを取得する

Facebookの広告に関するデータを定期的に取得したいと考えています。基本的には、私はちょうどさらなる報告目的のために私のデータベースの1つにいくつかのメタデータを保存したいと思います。したがって、私はすべての広告に対してAD-ID、AD名、および対応するADSET-IDを取得したいと考えています。

私はPythonでこの小さな関数を書かれている:

def get_ad_stats(ad_account): 
    """ Pull basic stats for all ads 
    Args: 'ad_account' is the Facebook AdAccount object 
    Returns: 'fb_ads', a list with basic values 
    """ 
    fb_ads = [] 
    fb_fields = [ 
       Ad.Field.id, 
       Ad.Field.name, 
       Ad.Field.adset_id, 
       Ad.Field.created_time, 
    ] 

    fb_params = { 
     'date_preset': 'last_14_days', 
    } 

    for ad in ad_account.get_ads(fields = fb_fields, params = fb_params): 
     fb_ads.append({ 
      'id':     ad[Ad.Field.id], 
      'name':     ad[Ad.Field.name], 
      'adset_id':    ad[Ad.Field.adset_id], 
      'created_time':   datetime.datetime.strptime(ad[Ad.Field.created_time], "%Y-%m-%dT%H:%M:%S+0000"), 
     }) 

    return (fb_ads) 

同様の機能をキャンペーン単位とADSETデータ作業罰金のために。しかし、広告の場合、私はいつもユーザーリクエストの上限に達しています:"(#17) User request limit reached"

私はAPIアクセスレベルが「BASIC」で、ここでは約12,000件の広告について話しています。 残念ながら、非同期コールはInsightエッジでしか機能しないようです。

ユーザーのリクエスト制限を回避する方法はありますか?特定の日付以降に変更または新しく作成された広告のみにAPIリクエストを限定することによって、

答えて

1

[OK]、'created_time'フィールドを犠牲にして、私はそれに対してInsights-edgeを使用できることを認識しました。 ここでは、非同期呼び出しと呼び出し間の遅延を使用している同じ関数の改訂コードを示します。

def get_ad_stats(ad_account): 
    """ Pull basic stats for all ads 
    Args: 'ad_account' is the Facebook AdAccount object 
    Returns: 'fb_ads', a list with basic values 
    """ 
    fb_ads = [] 

    fb_params = { 
     'date_preset': 'last_14_days', 
     'level': 'ad', 
    } 

    fb_fields = [ 
     'ad_id', 
     'ad_name', 
     'adset_id', 
    ] 

    async_job = ad_account.get_insights(fields = fb_fields, params = fb_params, async=True) 
    async_job.remote_read() 

    while async_job['async_percent_completion'] < 100: 
     time.sleep(1) 
     async_job.remote_read() 

    for ad in async_job.get_result(): 
     fb_ads.append({ 
      'id':     ad['ad_id'], 
      'name':     ad['ad_name'], 
      'adset_id':    ad['adset_id'], 
     }) 

    return (fb_ads) 
関連する問題