PHP cURL 到 Facebook 洞察报告

PHP cURL to Facebook insights report

我正在使用 Facebook Marketing API with 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 下载到我的服务器时 cURLfile_get_contents 我不能。在 cURL 中,响应为空。

如何将 csv 保存在我的服务器中?

请原谅我的英语,我会说西班牙语。

谢谢。

您缺少 curl 的 return 传输选项。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

注意:return传输选项必须设置为真文件选项之前。

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);