4

独自のメッセージング システムを備えた Facebook アプリを使用していますが、ユーザーが Facebook でユーザーの共有やいいね! から作成したコメントを引き続き表示したいと考えています。

URL (例: http://myapp.com/?myId=100005235 ) が Facebook で共有され、人々がその共有にコメントを追加するとします。そのようなコメント (およびユーザー名) は、取得したいものです。

facebook-js-sdkでできますか?

4

2 に答える 2

2

はい、できます。最も簡単な方法は、Facebook に対してFQL呼び出しを行うことです。これは Graph API 呼び出しでも実行できるはずですが、私のテストでは、必要なデータを返す方法が見つかりませんでした。

link_statFQL では、URL の Facebook ID をcomments取得するため、コメント情報をuser取得するため、およびコメントを残した登録ユーザーの名前を取得するために、 3 つの異なるテーブルに対してクエリを実行する必要があります。

読みやすくするために拡張されたマルチクエリが続きます。

{
  "my_link":
     "SELECT comments_fbid, comment_count, normalized_url FROM link_stat WHERE 
        url ='http://funcook.com/receta.php?id=53' ",
   "comment":
     "SELECT object_id, fromid, time, text, username FROM comment WHERE 
        object_id IN (SELECT comments_fbid FROM #my_link)",
   "com_users":
      "SELECT name, uid FROM user WHERE uid IN (SELECT fromid FROM #comment)"
 }

JSON オブジェクトが返されます。私のサイトでいくつかのテスト URL を使用したところ、 my_link.comment_countが常に等しいとは限らないことがわかりましたcount(comment)。そのうちの 1 つがゼロを示し、もう 1 つがそうでないケースを見つけました。

ここにスクリプトがあります:

<script>
  FB.api(
    '/fql', {q:{"my_link":"SELECT comments_fbid, comment_count, normalized_url FROM link_stat WHERE url='http://funcook.com/receta.php?id=53'",
        "comment":"SELECT object_id, fromid, time, text, username FROM comment WHERE object_id IN (SELECT comments_fbid FROM #my_link)",  
        "com_users": "SELECT name, uid FROM user WHERE uid IN (SELECT fromid FROM #comment)" }},
  function(response){
   console.log(response)
  });
</script>
于 2012-07-02T20:02:02.547 に答える
0

コメント投稿のGraphAPIリファレンスは次のとおりです。後者は、各投稿にcommentsオブジェクトがあることを示しています。

私はこれまでGraphAPIを実際に使用したことがなく、頭のてっぺんからコードを書くのが苦手なので、実際のコードを提供することはできませんが、おそらくこれに沿ったものです。

FB.api(
    '/19292868552_10150189643478553', // fetch a post by its id
    function(response) {              // callback function
        for (var comment in response["comments"]["data"]) {

            // process comment

        }
    }
);

代わりにサーバー側でコメントを取得する方が理にかなっているかもしれませんが、ユースケースで何がより理にかなっているのかによって異なります。

于 2012-06-29T06:57:48.093 に答える