FQL は、2 つを超えるサブクエリのカタツムリまたはタイムアウトになります。また、個別の page_id が選択されているかどうかもわかりません (各ユーザーは同じページをどのようにフィルタリングするのが好きですか?)。そのため、set 操作を実行すると、ほとんどの場合、機能しません。2 つのクエリを実行するだけです。
- 友達のように page_ids のリストを取得するもの
"SELECT page_id FROM page_fan WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me())"
- それからあなたの好きなものを引っ張るだけの別のもの
"SELECT page_id FROM page_fan WHERE uid=me())"
これをバッチに入れて、両方のデータセットを一度に取得します
fql?q={"userpages":"SELECT page_id
FROM page_fan
WHERE uid=me()",
"friendpages":"SELECT page_id
FROM page_fan
WHERE uid IN
(SELECT uid2 FROM friend WHERE uid1=me())"}
ここから、おそらく非常に大きなリストと小さなリストが得られます
Pythonで言ってみましょう、
>>> len(data['data'][0]['fql_result_set'])
4505
>>> len(data['data'][1]['fql_result_set'])
85
ここで 2 つのことを行う必要があります。
これは、フィルターとラムダの観点から、このレベルでは些細なことになります....しかし、データの有用性はほとんど破壊されます。実際に好きだった実際の友達を除いた一連のページがあります。どのように確認しますか?
さて、考えてみると、ユーザー ID フィールドを API 呼び出しから保持するのが最善であり、ID をまとめます。Python での簡単な例
>>> pages = {}
>>> for p in a0:
... for q in a1:
... if p['page_id'] == q['page_id']:
... pid = p['page_id']
... if pid in pages:
... pages[pid].append(p['uid'])
... else:
... pages[pid] = [q['uid']]
... pages[pid].append(p['uid'])
pages
各キーがIDのリストを値として持つ辞書をくれます。
次に、API 呼び出しと crtl-F のブラウザー ダンプを見るだけで確認できます。実際のページを見ることは、サードパーティのアプリケーションを無効にする友人の API プライバシー制限のため、有効なテストにはなりません. JSON 応答の出現箇所を一致させたいと考えています。