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 下载到我的服务器时 cURL
或 file_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);
我正在使用 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 下载到我的服务器时 cURL
或 file_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);