2015-04-13 5 views
0

Есть ли способ загрузить несколько запросов по идентификаторам в одном вызове API?Загрузить список интересов adware в одном вызове API

Вот ситуация: У нас есть несколько объявлений для кампании с таргетингом на рекламу. Например, мы нацелены на пользователей, которые заинтересованы в:

  • музыки (ID = 111)
  • искусства (ID = 222)
  • музеи (ID = 333)

Мы перечисляя все интересы пользователю, но в базе данных мы храним только IDs.

В настоящее время мы можем загрузить только одного интереса на каждый запрос, например .:

https://graph.facebook.com/v2.3/111?access_token=___ 
https://graph.facebook.com/v2.3/222?access_token=___ 
https://graph.facebook.com/v2.3/333?access_token=___ 

или

https://graph.facebook.com/v2.3/?access_token=___&type=adinterest&id=111 

Это работает. Тем не менее, я хотел бы загрузить все интересы в одном вызове, чтобы ускорить загрузку страницы, например:

https://graph.facebook.com/v2.3/?type=adinterest&id[0]=111&id[1]=222&id[2]=333&access_token=___ 

Это, к сожалению, не работает. Итак, есть ли способ загрузить список интересов пользователей по списку представленных идентификаторов?

ответ

-3

Ниже решение для PHP с использованием потоков:

$params = [ 
    'access_token' => '________', 
    'batch' => json_encode([ 
     ['relative_url' => 'v2.3/6002969077368', 'method' => 'GET'], 
     ['relative_url' => 'v2.3/6003398522803', 'method' => 'GET'], 
    ]) 
]; 

$opts = array(
    'http'=>array(
     'method'=>"POST", 
    ) 
); 
$context = stream_context_create($opts); 

$url = 'https://graph.facebook.com/?'.http_build_query($params); 
$resp = file_get_contents($url, false, $context); 

$resp = json_decode($resp, true); 
foreach($resp as $item){ 
    echo '<pre>'.print_r(json_decode($item['body'], true), true).'</pre>'; 
} 

Выведет:

Array 
(
    [id] => 6002969077368 
    [name] => British Museum 
    [audience_size] => 1593400 
    [path] => Array 
     (
     ) 
    [description] => 
) 

Array 
(
    [id] => 6003398522803 
    [name] => Comic book 
    [audience_size] => 113805160 
    [path] => Array 
     (
     ) 
    [description] => 
) 

Пожалуйста, обратите внимание, что Facebook пакетные запросы должны быть POST типа, при чтении идентификаторы должны быть типа GET.

указания Также АНИ версияrelative_url (v2.3) не требуется, но FB будет использовать версию API в зависимости от приложения Facebook, для которой вы используете access_token. Это означает, что если вы создали приложение FB давно, оно может автоматически переключиться на более старую версию API (например, v2.2), но если вы развернете на более новом сервере, который использует недавно созданное приложение FB, он может переключиться на более новый API (например, v2.3) и бросать неожиданные ошибки (например, устаревший атрибут). Поэтому хорошая привычка явно указывать версию FB API для каждого запроса URL.

+0

Это был признанный и функциональный ответ. Пожалуйста, объясните при добавлении минус голоса, чтобы предоставить полезную информацию для других пользователей - например. больше не работает, устаревший синтаксис и т. д. – lubosdz

3

Вы можете использовать структуру запроса пакета, чтобы сделать один HTTP-запрос нескольким конечным точкам. См https://developers.facebook.com/docs/marketing-api/batch-requests

+0

Благодарим вас за ответ, который указал мне на правильное направление. К сожалению, я не могу отметить этот ответ как правильный, потому что он точно не отвечает на вопрос. Было немного сложно вычислить PHP-скрипт, который, наконец, работал, поэтому я разместил его в отдельный ответ. – lubosdz