1

Facebook php-sdkから、特定のapp_idからのみの特定の投稿を「いいね」した友達のリストを抽出したいと思います。例を挙げましょう。www.rottentomatoes.comにアクセスすると、[友達/友達]セクションで、どの映画にもレビュー/評論家を書いたすべての友達を見ることができます。

FQLはこれを行うための優れたクリーンな方法だと思いましたが、実際にはそうではありません。データの処理に時間がかかりすぎるため、オンラインアプリの準備ができているとは思えません。

これは私がこれまでに思いついたコードでした:

function cmp($a, $b)
{
    if ($a["like"] == $b["like"]) {
        return 0;
    }
    return ($a["like"] > $b["like"]) ? -1 : 1;
}

    try
    {
        $fql = 'SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1='.$uid.') AND has_added_app = 1';
        $_friends = $facebook->api(array('method' => 'fql.query','query' => $fql));
    }
    catch(FacebookApiException $e)
    {
        print_r($e);
        error_log($e->getType());

    }

    // Extract the user ID's returned in the FQL request into a new array.
    $likes = array();
    if (is_array($_friends) && count($_friends) > 0)
    {   
        foreach ($_friends as $friend)
        {
            $fid = $friend["uid"];

            try
            {
                $fql = 'SELECT url FROM url_like WHERE user_id = '.$fid.' AND strpos(lower(url),"muchogusto") >=0';
                $_likes = $facebook->api(array('method' => 'fql.query','query' => $fql));
                $likes[] = array("uid" => $fid, "like" => count($_likes));
            }
            catch(FacebookApiException $e)
            {
                $likes[] = array("uid" => $fid, "like" => 0);
                continue;
                error_log($e->getType());
            }
        }   
    }

    usort($likes, "cmp");
    print_r($likes);

私にはたくさんの質問があります、そして私はかなり初心者なので、あなたがこれで私を助けることができると確信しています。

誰かがFQLなしでこれをコーディングするのを手伝ってくれませんか?私はこれだけが必要です:

  1. 私の友達のリスト
  2. のみが掲載されている特定の投稿のいいねの数
  3. 特定のAPP_ID

どうもありがとうございました。

4

1 に答える 1

1

FQLは問題ではありません。foreachこれは、ループでFQL呼び出しを行っているという事実です。それがあなたのプログラムを遅くしているものです。

この関数を別のforeachループ内で呼び出す場合は、忘れてください。

FQLマルチクエリを使用して1回呼び出してみてください。

$queries['my_friends'] = 
  'SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) 
   AND has_added_app = 1';
$queries['liked_url'] = 
  'SELECT url,user_id FROM url_like WHERE user_id IN (SELECT uid FROM #my_friends) 
   AND strpos(lower(url),"muchogusto") >=0';
$multiquery = json_encode($queries);
$result = $facebook->api(array('method' => 'fql.multiquery','queries' => $multiquery));
于 2013-03-27T02:48:43.077 に答える