Отчет PHP cURL для Facebook

Я использую Facebook Marketing API с php sdk для создания моего отчета.

Когда мой отчет создан успешно, я могу загрузить его из браузера по этому URL-адресу:

www.facebook.com/ads/ads_insights/export_report?report_run_id=RUN_ID&format=csv&access_token=TOKEN

$fileName = "campaign_insights.csv";
$graph_url = 'https://www.facebook.com/ads/ads_insights/export_report?report_run_id='.$report_run.'&format=csv&access_token='.$access_token;

$path = "campaign_insights.csv";

set_time_limit(0);
$fp = fopen ($path, 'w+');
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_URL, $graph_url);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
$result = curl_exec( $ch );
var_dump($result);
curl_close($ch);
fclose($fp);

Но когда я пытаюсь загрузить с php на свой сервер с cURL или file_get_contents, я не могу. В cURL ответ пуст.

Что я могу сделать, чтобы сохранить CSV на моем сервере?

Извините за мой английский, я говорю по-испански.

Спасибо.


person Jose Flores    schedule 15.05.2017    source источник
comment
Где ваш php-код для загрузки отчета?   -  person Chin Leung    schedule 15.05.2017
comment
@ChinLeung Я уже добавил php-код в пост.   -  person Jose Flores    schedule 15.05.2017


Ответы (1)


Вам не хватает опции обратного перевода для curl.

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

Примечание. Параметр обратной передачи должен иметь значение true перед параметром файла.

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILE, $fp);

Обновлять

После некоторой отладки, если вы посмотрите на ответ Facebook, вы получите сообщение об ошибке, что браузер curl устарел.

Итак, чтобы обойти это:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
));

Таким образом, весь код будет таким:

$fp = fopen ($path, 'w+');
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_URL, $graph_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
));
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
fclose($fp);
person Chin Leung    schedule 15.05.2017
comment
@JoseFlores Взгляните на мое обновление. Теперь он должен работать правильно! :) - person Chin Leung; 15.05.2017
comment
Нет проблем @JoseFlores :) - person Chin Leung; 15.05.2017