我一直在廣泛搜索,但找不到任何與我的問題真正相關的主題,所以我決定提出一個新問題...CURL調用在終端,但它不會在PHP
我試圖使用捲曲,工作在終端精細發出批量請求到Facebook的圖形API,但它根本不會在PHP ...
重現步驟:
1.)從Graph API Explorer中爲自己獲取訪問令牌(不需要權限,只是一個有效的令牌)鏈接:http://developers.facebook.com/tools/explorer
2)它在下面的終端命令粘貼:(請注意,你需要粘貼在總 4個佔位符正常工作)
curl \
-F 'access_token=PASTE_ACCESS_TOKEN_HERE' \
-F 'batch=[{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"}]' \
https://graph.facebook.com
3)在終端執行它! ,它應該返回大量的頭文件,並且在正文部分使用4次你的名字(JSON編碼)。
4.)到現在爲止,一切都應該工作。這裏談到壞的部分,在4個佔位符在下面的PHP腳本重新粘貼您的令牌:
<?php
$url = 'https://graph.facebook.com';
$fields = array(
'access_token' => 'PASTE_ACCESS_TOKEN_HERE',
'batch' =>
'[{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"}]'
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string = rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
print_r($result);
?>
6)運行的代碼,你應該(至少我是這樣......)得到來自Facebook的錯誤消息:'{「error」:{「message」:「格式錯誤的訪問令牌ACCESS_TOKEN_HERE .... \」}]「,」type「:」OAuthException「,」code「:190}} 1'
我想Facebook認爲JSON的大括號是訪問令牌的一部分,因爲它會返回這個錯誤。我試圖從$ fields ['batch']的末尾去掉轉義的雙引號和大括號,但它會拋出另一個錯誤,指出批處理參數必須是一個JSON字符串(顯然是...)
我錯過了什麼,或者是這個Facebook的錯(如果是這樣,我不明白爲什麼終端解決方案工作...)?
下面是官方Facebook文檔BTW:提前 http://developers.facebook.com/docs/reference/api/batch
謝謝!
編輯: 我發現了一個(暫時的)解決方案,這將工作(當然,因爲它使用一個shell腳本):
<?php
$result = shell_exec('curl \
-F \'access_token=PASTE_ACCESS_TOKEN_HERE\' \
-F \'batch=[{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"}]\' \
https://graph.facebook.com');
print_r(json_decode($result),true);
?>
是否有人知道爲什麼這是一個糟糕的解決方案(我假設它是)比使用PHP-cURL? 我讀了一個地方,你不應該在PHP中使用shell腳本,我不知道爲什麼,但...
謝謝!
我忘了在Facebook上添加一個鏈接到文檔:https://developers.facebook。com/docs/reference/api/batch/ –
您可以編輯您的答案:) – Freelancer
如何從批處理中刪除所有存取令牌,因爲您發送的是整體存取令牌?或者你是否在實際批量查詢單獨的用戶? –