#facebook #facebook-graph-api
#Facebook #facebook-graph-api
Вопрос:
Что мне нужно сделать, чтобы обойти эту проблему, потому что, когда я запрашиваю данные за 2 месяца, я уже получаю эту ошибку, когда происходит перерыв в день, у меня следующий вызов. С небольшим количеством данных работает идеально, но когда я увеличиваю период, сервер возвращает мне
Ограничение на запрос пользователя reached»,»type»:»OAuthException»,»is_transient»:true,»code»:17,»error_subcode»:2446079,»fbtrace_id»:»…
function solicitacaoAssicrona(){
var service = getService()
var batch = [{"method": "GET", "relative_url":"v3.2/act_1125789557444919/insights/impressions,reach,frequency,spend,campaign_name,account_name,clicks,cost_per_10_sec_video_view,cpm,cpp?level=campaignamp;since=2016-03-03amp;until=2019-03-04amp;time_increment=1amp;limit=100"}]
// var batchUrl = encodeURIComponent(JSON.stringify(batch));
// Logger.log(batchUrl);
var url = "https://graph.facebook.com?include_headers=falseamp;batch=" encodeURIComponent(JSON.stringify(batch))
var response = UrlFetchApp.fetch(url, {
method: 'POST',
headers: {
Authorization: 'Bearer ' service.getAccessToken()
}
});
var result = JSON.parse(response.getContentText());
Logger.log(result)
// response.forEach(function(resp){
// var resp = JSON.parse(resp.body);
// //Logger.log(JSON.stringify(resp, null, 2));
//
//// resp.data[0].values.forEach(function(response){
////
////
//// })
////
// })
}
Я просмотрел документацию, но на данный момент безуспешно!
https://developers.facebook.com/docs/marketing-api/insights/best-practices
Это вызов, который у меня есть
var metricas = [
'impressions',
'reach',
'unique_clicks',
'account_currency',
'account_id',
'account_name',
'ad_id',
'ad_name',
'adset_id',
'adset_name',
'buying_type',
'campaign_id',
'campaign_name',
'clicks',
'cost_per_inline_link_click',
'cost_per_inline_post_engagement',
'cost_per_unique_click',
'cost_per_unique_inline_link_click',
'cpc',
'cpm',
'cpp',
'ctr',
'date_start',
//'date_stop',
'frequency',
'inline_link_click_ctr',
'inline_link_clicks',
'inline_post_engagement',
'objective',
'relevance_score',
'social_spend',
'spend',
'unique_ctr',
'unique_inline_link_click_ctr',
'unique_inline_link_clicks',
'unique_link_clicks_ctr',
//'website_ctr',
'video_10_sec_watched_actions',
'cost_per_10_sec_video_view',
'video_30_sec_watched_actions',
'video_avg_percent_watched_actions',
'video_avg_time_watched_actions',
'video_p100_watched_actions',
'video_p25_watched_actions',
'video_p50_watched_actions',
'video_p75_watched_actions',
'video_play_actions',
'video_thruplay_watched_actions',
'video_p95_watched_actions',
]
var parameters = metricas.join(',');
var url = 'https://graph.facebook.com/v3.2/act_xxxxxxxxxx/insights?fields= parameters 'amp;level=adamp;time_range[since]=2019-02-05amp;time_range[until]=2019-04-05amp;time_increment=1amp;limit=200'
Ответ №1:
Это связано с тем, сколько данных вы можете получить с помощью пакетных запросов. Для более длительных периодов вам следует разделить их на более мелкие фрагменты, следующие друг за другом, таким образом извлекая данные, необходимые в нескольких запросах. Взгляните на этот пример:
Code.gs
Из строки 88 файла вы можете видеть, как они могут быть разделены на несколько запросов. https://github.com/halsandr/Facebook_Connector/blob/master/Code.gs
function dateDelta(dObj, num) {
if (isNaN(num)) {
var dateStart = new Date(dObj);
} else {
var dateStart = new Date(dObj);
var dateStart = new Date(dateStart.setDate(dateStart.getDate() num));
}
var dd = dateStart.getDate();
var mm = dateStart.getMonth() 1; //January is 0!
var yyyy = dateStart.getFullYear();
if(dd<10){
dd='0' dd;
}
if(mm<10){
mm='0' mm;
}
var dateStart = yyyy "-" mm "-" dd;
return dateStart;
}
var gStartDate = new Date(request.dateRange.startDate);
var gStartDate = new Date(dateDelta(gStartDate, -1));
var gEndDate = new Date(request.dateRange.endDate);
var gEndDate = new Date(dateDelta(gEndDate, 1));
var gRange = Math.ceil(Math.abs(gEndDate - gStartDate) / (1000 * 3600 * 24));
var gBatches = Math.ceil(gRange / 92);
if (gBatches < 2) {
var batch = [{"method": "GET", "relative_url": request.configParams.pageID "/insights/page_fans,page_impressions,page_post_engagements?since=" dateDelta(gStartDate) "amp;until=" dateDelta(gEndDate)}];
//console.log(batch);
} else {
batch = [];
var iterRanges = gRange / gBatches;
for (i = 0; i < gBatches; i ) {
var iterStart = dateDelta(gStartDate, (iterRanges * i));
if (i == (gBatches - 1)) {
var iterEnd = dateDelta(gEndDate);
} else {
var iterEnd = dateDelta(gStartDate, (iterRanges * (i 1)) 1);
}
batch.push({"method": "GET", "relative_url": request.configParams.pageID "/insights/page_fans,page_impressions,page_post_engagements?since=" iterStart "amp;until=" iterEnd})
}
//console.log(batch);
}
// Fetch the data with UrlFetchApp
var url = "https://graph.facebook.com?include_headers=falseamp;batch=" encodeURIComponent(JSON.stringify(batch))