0

私は Facebook アプリを持っており、ユーザーのニュース フィードをフィルタリングして、アプリを使用して投稿された最新の投稿/アクションを Graph API で取得したいと考えています。

私はこれを見つけました: Facebook Graph API を使用してアプリからアクティビティを取得するにはどうすればよいですか? これは、特定の友人 (またはユーザー自体) によるアクション/投稿を取得するのに問題ありません。必要なものはほぼ同じですが、アプリを使用するユーザーのすべての友人によるこの「ストリーム」が必要であるという違いはありません。単一のユーザー。

それから私はこれを見つけました:FacebookグラフAPI:アプリフィードをフィルタリングする方法。これについては、質問の例自体が空のデータを返します(read_stream許可のある適切なアクセストークンを使用)。唯一の答えは、FQL を使用することです。私は試してみましたSELECT post_id, message, comments, likes FROM stream WHERE app_id = MY_APP_IDが、このエラーが発生しました:

{
  "error": {
    "message": "Your statement is not indexable. The WHERE clause must contain an 
        indexable column. Such columns are marked with * in the tables linked from
        http://developers.facebook.com/docs/reference/fql ", 
    "type": "NoIndexFunctionException", 
    "code": 604
  }
}

ユーザーのスコープから、ユーザーとその友人による特定のアプリからの最後の (たとえば 100 件の) 投稿のリストを取得するにはどうすればよいですか?

4

1 に答える 1

2

すべての FQL クエリでは、パフォーマンス上の理由から、WHERE 句に少なくとも 1 つのインデックス可能なフィールドを含める必要があります (ドキュメントでは、フィールド名の横に星印が付いています)。

したがって、ストリームテーブルsource_idの場合、 (投稿がウォールにあるユーザーの ID) または のいずれかを選択できますfilter_key。テーブルから有効なフィルター キーを読み取ることができますstream_filterが、すべてのユーザーは、nfニュース フィードに表示されるものに対するフィルター キーを持っています。(post_id もインデックス可能ですが、ここでは役に立ちません。)

したがって、フィルタリングを試すことができますWHERE filter_key = 'nf' AND app_id = 'YOUR_APP_ID'。これにより、アクティブなユーザーがアプリ経由で作成されたフィードで見ることができる投稿が得られるはずです.

me()また、source_id を使用して、それを(FQL の現在のユーザー)と等しいか、友人のリストにあるようにフィルタリングすることもできます (サブクエリとしてfriendを使用して、テーブルから ID を取得できme()ます)。 - このように、

… WHERE (source_id = me() OR source_id IN (SELECT uid1 FROM friend WHERE uid2 = me())) AND app_id = 'YOUR_APP_ID'

–しかし、パフォーマンスが低下すると思うので、最初にフィルターキーを試して、必要な投稿が得られるかどうかを確認します.


編集:質問者が発見したように、使用/me/home?filter=app_MY_APP_IDする方が明らかにうまく機能し、簡単です。これが必要な人は誰でも、このバージョンを使用する必要があります。なぜなら、FQL の方が信頼性が高いからです。

于 2013-07-27T11:15:06.970 に答える