6

stream_read とオフラインのアクセス許可をすべて付与したテスト ユーザーがいる Facebook デスクトップ アプリがあります。各ユーザーのストリームとプロフィールへの投稿を簡単に取得できます。簡単にできないのは、ユーザーが友人のウォールに投稿した投稿を取得することです。

実際、これはかなり複雑なマルチクエリで動作していましたが、現在は動作を停止しているか、断続的にしか動作していません...

メソッドが存在する場合は共有したり、この種の複雑なクエリにどのような制限があるかについて話したりしたい人はいますか?

4

3 に答える 3

2

私はこれを試してみて、私が信じているのと同じ問題に遭遇しましたが、おそらくもう少し説明するのに役立つでしょう.

Facebook の wiki トークページに投稿する価値があるかもしれません。私がここで何かを見逃していない限り、Facebook の誰かがそれに光を当てることができるかどうかを確認してください。

USER_IDをどこに置いても、検索するユーザーを入力する必要があり、F_ID1F_ID2は友達です...

FQL #1: 動作するはずです (理論上)

  • まず、すべての友達のリストを取得します
  • 次に、次のクエリの IN 句でそのリストを使用します
  • USER_ID によって作成された投稿のみを除外します
  • メッセージが NULL でないことを確認してください

FQL #1: 投稿が返されない

{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",

"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (SELECT uid2 FROM #friends) AND message != '' AND actor_id = USER_ID "

}

FQL #2: 投稿が返される

しかし奇妙なことに、友達を 1 人 (F_ID1) だけに制限すると、その友達のウォールに投稿された USER_ID が戻ってきます!

{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",

"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (SELECT uid2 FROM #friends WHERE uid2 = F_ID1) AND message != '' AND actor_id = USER_ID "

}

FQL #3: 投稿が返されない

それでも、別の友人を IN F_ID1 & F_ID2 に追加しようとします...結果は再びありません...

{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",

"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (F_ID1,F_ID2) AND message != '' AND actor_id = USER_ID "

}
于 2010-03-21T02:20:34.527 に答える
0

少なくとも、phpで使用できることがわかりました:

$facebook->api("/<friend_uid>/feed") 

ユーザーウォールに表示されているものを正確に取得します。また、クエリをページングできます。残念ながら、上記のように友達の壁をターゲットにすることを除いて、クエリをフィルタリングすることはできません. ただし、API は非常に遅く、マルチクエリよりも多くの API 呼び出しが発生します。悲しいことに、FQL (単一の FQL またはマルチクエリ) を使用するときに表示されるはずのすべての投稿が表示されない状況に遭遇した場合、これが唯一のオプションのようです。

Facebook に記録されたバグ: この問題が発生した場合は、このバグに関するフィードバックを送信してください。 http://bugs.developers.facebook.net/show_bug.cgi?id=11247

于 2010-12-07T04:57:26.857 に答える
0

訂正: さらにテストした結果、このソリューションは 100% 機能しないことがわかりました。他のウォールで作成したすべての投稿ではなく、いくつかの投稿が返されます-制限要因が何であるかはわかりません-したがって、これは未解決の質問だと思います.

部分的な解決策: これは、ユーザーが友人のウォールに作成したウォール投稿を生成する FQL マルチクエリです。

{"query1":"SELECT post_id FROM stream WHERE source_id IN (SELECT target_id FROM connection WHERE source_id = USER_ID)", 
 "query2":"SELECT actor_id, post_id, target_id, message FROM stream WHERE (actor_id = USER_ID) AND (post_id IN (SELECT post_id FROM #query1))"}

最初のクエリは、ユーザー (友達とアプリ?) に属するすべての「ターゲット」に対してネストされた選択を行い、それらをストリーム クエリの source_id 値として使用します。
2 番目のクエリは、1 番目のクエリから返された post_id を使用して、今度は、actor_id 属性をユーザーの ID に設定してストリームを再度クエリします。

ORDER または LIMIT 句が最新のクエリを返すのに役立つかどうかはわかりません-誰か確認したいですか?

于 2010-03-23T18:14:39.163 に答える