-1

コードからわかるように、FQLクエリを実行して結果を取得しようとしています。私が生成するクエリは、ブラウザでテストしたので、まったく問題ありません。最初にfile_get_contents()を使用してWebページを取得しましたが、400 BadRequestErrorが発生していました。代わりに誰かがcURLを提案します。

以下に示すコードセグメントは、$queryに対してfalseを返します。urlencode()行のコメントを外すと、スクリプトが繰り返し実行され、最大実行時間制限に達します。私は何が間違っているのですか?

    $limit = $start + 100;
    $query = "select post_id, created_time, actor_id, message, attachment, comments, likes, type  from stream where source_id = $id limit $start, ". $limit;
    $url = "https://graph.facebook.com/fql?q=$query&access_token=$token";
    //$url = urlencode($url);
    echo $url.'<br>';
    $curl_handle=curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl_handle, CURLOPT_PROXY, "tcp://10.3.3.3:8080"); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Hi!');
    $query = curl_exec($curl_handle);
    var_dump($query);
    curl_close($curl_handle);

編集:別のURLにアクセスすると、file_get_contentsで「ストリームを開くことができませんでした:プロキシ経由でHTTPSサーバーに接続できません」というエラーが発生しました。これもHTTPSであるため、cURLも同じ問題に直面している可能性があります。これが答えにつながるのではないかと思いました。

4

2 に答える 2

1

URL全体ではなく、urlencodeing$queryである必要があります。$token

$url = "https://graph.facebook.com/fql?q=" . urlencode($query) . "&access_token=" . urlencode($token);
于 2012-04-16T16:25:21.220 に答える
0

手始めに、$query変数をダンプする直前に変数を再利用します。

次に、(最初の)$query変数でurlencodeを使用します。(Facebookの$ tokenはURLエンコードを必要としません)


編集(コメント内に収まりません)

私はこれを自分で試しました:

<?
    $token = $_GET["token"];
    $id = $_GET["id"];
    $start = 0;
    $limit = $start + 100;
    $query = urlencode("select post_id, created_time, actor_id, message, attachment, comments, likes, type from stream where source_id = $id limit $start, ". $limit);
    $url = "https://graph.facebook.com/fql?q=$query&access_token=$token";

    echo $url.'<br>';
    $curl_handle=curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);

    $curlres = curl_exec($curl_handle);
    var_dump($query);
    print "\n\n";
    var_dump($curlres);
    curl_close($curl_handle);
?>

これは問題なく機能します。これを試してみたい場合は、私に連絡してください。URLをお知らせします。私はこれを公開することに不安を感じています..おそらくソースはあなたのプロキシです..


編集

なんてこった..おかしくなりそう!;)

http://hal.su/on/fbCurlTest.php?token=the%20token&id=the%id&start=0

%20tokenをトークンに置き換え、%20idをIDに置き換えます。

于 2012-04-16T16:27:49.320 に答える