2017-08-14 2 views
0

J'utilise facebook-python-ads-sdk pour effectuer des appels asynchrones pour FB insights API comme described.récupérer des résultats d'annonces async résultats de FB API de l'API avec la pagination

params = { 
    "time_increment": 1, 
    "level": "ad", 
    "date_preset": "last_28d", 
    "breakdowns": "hourly_stats_aggregated_by_advertiser_time_zone", 
    "limit": 1000 
} 

job = AdAccount("id").get_insights_async(params=params) 
result_cursor = wait_for_async_job(job) 
results = [item for item in result_cursor] 

def wait_for_async_job(job): 
    for _ in range(TIMEOUT): 
     time.sleep(1) 
     job = job.remote_read() 
     status = job[AdReportRun.Field.async_status] 
     if status == "Job Completed": 
      return job.get_result() 

Ainsi, le travail pour récupérer un aperçu des finitions last_28d en quelques minutes, cependant, la pagination sur les résultats peuvent prendre jusqu'à une heure! Est-ce la bonne façon de paginer sur un travail asynchrone?

Répondre

0

Je poste la réponse afin qu'elle puisse aider d'autres développeurs qui ont eu le même problème.

modifier:

return job.get_result() 

à:

return job.get_result(params={"limit": 1000}) 

Ce paginera sur les résultats des sauts de 1000 et non pas la valeur par défaut qui est 25.

Le changement ci-dessus nous a sauvé 30 minutes de course.