独自のメッセージング システムを備えた Facebook アプリを使用していますが、ユーザーが Facebook でユーザーの共有やいいね! から作成したコメントを引き続き表示したいと考えています。
URL (例: http://myapp.com/?myId=100005235 ) が Facebook で共有され、人々がその共有にコメントを追加するとします。そのようなコメント (およびユーザー名) は、取得したいものです。
facebook-js-sdkでできますか?
独自のメッセージング システムを備えた Facebook アプリを使用していますが、ユーザーが Facebook でユーザーの共有やいいね! から作成したコメントを引き続き表示したいと考えています。
URL (例: http://myapp.com/?myId=100005235 ) が Facebook で共有され、人々がその共有にコメントを追加するとします。そのようなコメント (およびユーザー名) は、取得したいものです。
facebook-js-sdkでできますか?
はい、できます。最も簡単な方法は、Facebook に対してFQL呼び出しを行うことです。これは Graph API 呼び出しでも実行できるはずですが、私のテストでは、必要なデータを返す方法が見つかりませんでした。
link_stat
FQL では、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>
コメントと投稿の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
}
}
);
代わりにサーバー側でコメントを取得する方が理にかなっているかもしれませんが、ユースケースで何がより理にかなっているのかによって異なります。