2

JavaScript API を使用して、次の FQL クエリを実行しています。

FB.api({
    method: 'fql.multiquery',
    queries: {
        'query1': 'SELECT source_id, actor_id, target_id, message, attachment, permalink, description, type, created_time FROM stream WHERE source_id IN (SELECT target_id FROM connection WHERE source_id=me() AND is_following=1) AND is_hidden = 0 AND type = 80 AND strpos(attachment.href, "youtu") >= 0 AND created_time < ' + unix_time,
        'query2': 'SELECT uid, name, profile_url, pic_square FROM user WHERE uid IN (SELECT actor_id FROM #query1)'
    }
}, 
function(response) { 
    console.log(response); 
};

unix_time を指定することで、現在のユーザー フィードのすべての youtube ビデオを返し、クエリの繰り返しを許可することになっています (最初の実行では、これは本質的NOW()に であり、それ以外の場合は最も古いステータス時間です)。それは、バギー:

  • a を設定せずにLIMIT(query1 で): ~3 回のクエリの後、空の結果が返されます
  • LIMIT 100以上 (クエリ 1): 結果は返されますが、後続の結果は空です
  • の場合created_time < NOW()、結果が返されます (複数のクエリで)。それ以外の場合、問題は解決しません (created_time <最も古い受信ステータスの時間)。

エラーは返されません。*read_stream* 権限があります。関連するバグを見つけようとしましたが、FQL がすべてのステータスを返さないというバグしか見つかりませんでした。

4

1 に答える 1

2

API の結果はせいぜいむらがあります。Facebook API での 4 年以上の経験に基づいて、これがどのように起こっているかについて独自の結論を導き出しました。ここに私の箇条書きがあります:

  • データのキャッシングが不十分で、古いキャッシュ、キャッシュ ミスなどを引き起こします。
  • クラスタ内の別の Web サーバーが他のサーバーと同期していない
  • クラスタ内の異なるデータベース サーバーが同期に追いついていない
  • 結果を取得するアルゴリズムは、ブログごとに「信頼できない」ことを認めています: http://developers.facebook.com/blog/post/478/ 10 を要求すると、事前フィルタリングが間違っているため 7 が返されます。

あなたの側で API からのデータをキャッシュし、Facebook からの新しいデータを結合し続けて、UI がより一貫したデータを表示できるようにすることをお勧めします。

于 2012-03-07T14:38:51.143 に答える