0

私のWebページはPHPを使用して、ログインしているユーザーの友達数を取得するFQLリクエストを実行します。コードは次のとおりです。

$graph = 'https://graph.facebook.com/fql?q=';
$graph .= 'SELECT+friend_count+FROM+user+WHERE+uid%3Dme%28%29';
$graph .= '&access_token=' . $access_token;
$result = file_get_contents($graph);

これは約80%の確率で正常に機能しますが、400の不正なリクエストを受け取ることがあります。これは、「q」と「access_token」を区切るアンパサンドがエスケープされていることが原因のようです。つまり、私はこれを取得します(動作しません):

https://graph.facebook.com/fql?q=SELECT+friend_count+FROM+user+WHERE+uid%3Dme%28%29&access_token=AAAF8VR3YZCpQBAGiX16jvZAwaEciTwZB1QZAaUjcjy82Ce7Ov7nPqNxjsKM1SAZASGVcZCJ80R9KJZBJYrjKmsDVK6YNrPGA7plPVuwCFZCaOwZDZD

これの代わりに(動作します-同じリクエストですが、「&」は「&」に置き換えられました):

https://graph.facebook.com/fql?q=SELECT+friend_count+FROM+user+WHERE+uid%3Dme%28%29&access_token=AAAF8VR3YZCpQBAGiX16jvZAwaEciTwZB1QZAaUjcjy82Ce7Ov7nPqNxjsKM1SAZASGVcZCJ80R9KJZBJYrjKmsDVK6YNrPGA7plPVuwCFZCaOwZDZD

それに応じてコードを調整して、PHPが文字列にエスケープされたアンパサンドを置き換えるように明示的に指示するようにしましたが、役に立ちませんでした。

$graph = 'https://graph.facebook.com/fql?q=';
$graph .= 'SELECT+friend_count+FROM+user+WHERE+uid%3Dme%28%29';
$graph .= '&access_token=' . $access_token;
$result = file_get_contents($graph);
$graphNoEscape = str_replace('&', '&', $graph);
$result = file_get_contents($graphNoEscape);

誰かが問題の解決策を知っていますか?このコードが時々機能するのは面倒ですが、常に機能するわけではありません。

4

1 に答える 1

2

これを見つけて同じ問題を抱えている人のために、これは私がそれを解決した方法です:

まず、public_html / wwwフォルダー(PHPバージョン5.3)にある1つのphp.iniを使用するようにサーバーに指示しました。

次に、コードを次のように編集しました。

$graph = 'https://graph.facebook.com/fql?q='; 
$graph .= urlencode('SELECT friend_count FROM user WHERE uid = me()');
$graph .= '&access_token='.$access_token; 
$graphNoEscape = str_replace('&', '&', $graph); 
$file_contents = file_get_contents($graphNoEscape); 
$fql_result = json_decode($file_contents); 
$friend_count = mysql_real_escape_string($fql_result->data[0]->friend_count);

確かに私はstr_replace()でそれをやり過ぎたかもしれませんが、それでも動作します:)

これが誰かを助けることができることを願っています。

于 2012-05-06T18:00:56.217 に答える