0

友達が共有しているすべての YouTube ビデオのリストを取得しようとしています。

これまで /me/home?q=youtube.com をリクエストすると、すべての youtube.com リンクが返されました。どうやら API が変更され、メッセージ本文に「youtube.com」を含むリンクのみが返されるようになったようです。

特定のドメインのすべての共有リンクを取得する方法はありますか?

4

1 に答える 1

1

最初に知っておくべきことは、必要なフィルター キーを取得する方法です。

SELECT filter_key,name FROM stream_filter WHERE uid = me() 

詳細については、 https://developers.facebook.com/docs/reference/fql/stream_filterを参照してください。

出力の例の部分は次のとおりです。

{
  "data": [
    {
      "filter_key": "nf", 
      "name": "News Feed"
    }, 
    {
      "filter_key": "app_2309869772", 
      "name": "Links"
    }, 

リンクの filter_key を取得し、https://www.facebook.com/home.php?filter=app_2309869772を開くと、ホームページには「リンク」タイプのすべての投稿のみが表示されるとします。

YouTube からの動画共有には、主に 2 つのタイプがあります。

1 つ目は、YouTube Web サイトの共有ボタンを使用して直接共有する方法です。filter_key として「 nf 」が必要です。次に、「87741124305 」であるapp_idでフィルター処理する必要があります( http://graph.facebook.com/87741124305を参照できます)。将来的にアプリ ID が変更される可能性がある場合は、代わりにattribution='Youtube'でフィルタリングできます。

2 つ目は、ユーザーが YouTube のリンクをコピーして壁に貼り付けることです。この種の投稿は「nf」タイプとして表示される場合があります。ただし、YouTube リンクが「nf」タイプとして表示されない可能性が最も高いようです。したがって、これらの投稿を取得するには filter_key " app_2309869772 "(リンク) が必要です。もちろん、YouTube ビデオのみのリンクが必要なので、attachment.caption='www.youtube.com'でフィルタリングします。

したがって、2 つの filter_key (ニュース フィードとリンク) を 1 つの fql クエリ内で結合します。例:

SELECT action_links,actor_id,app_data,app_id,attachment,attribution,claim_count,comment_info,created_time,description,description_tags,expiration_timestamp,feed_targeting,filter_key,impressions,is_exportable,is_hidden,is_published,likes,message,message_tags,parent_post_id,permalink,place,post_id,privacy,scheduled_publish_time,share_count,source_id,subscribed,tagged_ids,target_id,targeting,timeline_visibility,type,updated_time,via_id,viewer_id,with_location,with_tags,xid FROM stream WHERE post_id IN (SELECT post_id FROM stream WHERE filter_key in(SELECT filter_key FROM stream_filter WHERE uid=me() AND name='Links') AND attachment.caption='www.youtube.com' AND created_time<=now() LIMIT 150) OR post_id IN(SELECT post_id FROM stream WHERE filter_key in(SELECT filter_key FROM stream_filter WHERE uid=me() AND name='News Feed') AND app_id='87741124305' AND created_time<=now() LIMIT 150) ORDER BY created_time DESC

(必要に応じてリンクを編集できます。この情報を使用しない場合は、action_linksを配置しません)

https://developers.facebook.com/tools/explorerでテストされたスクリーンショット:

ここに画像の説明を入力

この例では、1 ページあたり 150 アイテムを使用しています (YouTube ビデオである投稿の実際の総数が多くないため、大きな数を使用しています)。created_time を減らすことで次のページを取得しようとすることはできますが、すべてのページに少なくとも 1 つの投稿があるという保証はありません。

引用の後のリンク(最後にアクセストークンを入れてください)は次のようになります。

https://graph.facebook.com/fql?format=json&q=SELECT+action_links%2Cactor_id%2Capp_data%2Capp_id%2Cattachment%2Cattribution%2Cclaim_count%2Ccomment_info%2Ccreated_time%2Cdescription%2Cdescription_tags%2Cexpiration_timestamp%2Cfeed_targeting%2Cfilter_key%2Cimpressions%2Cis_exportable% 2Cis_hidden%2Cis_published%2Clikes%2Cmessage%2Cmessage_tags%2Cparent_post_id%2Cpermalink%2Cplace%2Cpost_id%2Cprivacy%2Cscheduled_publish_time%2Cshare_count%2Csource_id%2Csubscribed%2Ctagged_ids%2Ctarget_id%2Ctargeting%2Ctimeline_visibility%2Ctype%2Cupdated_time%2Cvia_id%2Cviewer_id%2Cwith_location%2Cwith_tags%2Cxid+ FROM+stream+WHERE+post_id+IN+%28SELECT+post_id+FROM+stream+WHERE+filter_key+in%28SELECT+filter_key+FROM+stream_filter+WHERE+uid%3Dme%28%29+AND+name%3D%27Links% 27%29+AND+attachment.caption%3D%27www.youtube.com%27+AND+created_time%3C%3Dnow%28%29+LIMIT+150%29+OR+post_id+IN%28SELECT+post_id+FROM+stream+WHERE+filter_key+in%28SELECT+filter_key+FROM+stream_filter+ WHERE+uid%3Dme%28%29+AND+name%3D%27News+Feed%27%29+AND+app_id%3D%2787741124305%27+AND+created_time%3C%3Dnow%28%29+LIMIT+150% 29+ORDER+BY+created_time+DESC&access_token=

乾杯

于 2013-04-09T11:23:41.503 に答える