私の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);
誰かが問題の解決策を知っていますか?このコードが時々機能するのは面倒ですが、常に機能するわけではありません。