人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

FacebookのAPIに関して質問です。
facebookIdを元に、ユーザの「好きな音楽」「自己紹介」をJavaScript上で取得したいです。

前提として、「アプリの許可」時に「'user_about_me,publish_stream,email,offline_access'」の4つのパーミッションで許可を頂いてます。

その上で、次のtemp.jsのgetProfileメソッドを呼び出したところnameは取得できるのですが、music、about_meが取得できません。

■temp.js
function getProfile(facebookId)
{
var query = FB.Data.query('SELECT name, music, about_me, uid FROM user WHERE uid =' + facebookId);
query.wait(
function(rows) {
var user = rows[0];
//nameには山田太郎が入っている。
var name = user.name;
//musicにはnullが入っている。
var music = user.music;
//about_meにはnullが入っている。
var about_me = user.about_me;
}
);
}

music、about_meが何故取得できないのか、また、どうすれば取得できるのか教えていただきたいです。
よろしくお願いします。

●質問者: takaponn12
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● avena
●100ポイント ベストアンサー

パーミッションに問題があるようです。

'user_about_me,user_about_me,user_likes,friends_likes,publish_stream,email,offline_access'
でうまくいきます。

// ここで実際に確認してみました
// https://developers.facebook.com/docs/reference/rest/fql.query/

友達の about_me を取りたい場合は、friends_about_meが必要です。ユーザ自身の music を取るなら user_likes を、友達の music を取るならfriends_likes が必要です。

user_likes, friends_likesという字面を見ると、なんとなく「『いいね!』ボタンを押した対象を取るためのパーミッション」っぽいので、「どうしてこれでmusicとかgamesとかが取れるんだよ!?」とツッコみたくなるんですが、実は、プロフィールに並んでいる好きなモノ (音楽とかゲームとか本とか) は、実はアーティストやゲームなどのFacebookページへの参照になっているので、こんなパーミッション名になってるようです(ちなみに、Graph APIでユーザプロフィールを取ってみると、アーティストやゲームの FacebookページのIDが一緒に取れます)。ちょっとわかりづらいですよね:-(


// 「Facebookアプリケーション開発ガイド」という本の著者です。このあたりはちょっと詳しいです。


takaponn12さんのコメント
本の作者さんなのですね。 ご回答ありがとうございます。 「アプリの許可時」のパーミッションを変更したところ、 PHP-SDKにて、以下のようにしたところ、「好きな音楽」「自己紹介」ともに取得することができました。 $this->facebook->api(array('method' => 'fql.query', 'query' => 'SELECT name, email, music, about_me FROM user where uid = me()')); しかし、JavaScript-SDKにて以下のようにしても「好きな音楽」「自己紹介」ともに取得できませんでした。 FB.Data.query('SELECT name, music, about_me, uid FROM user WHERE uid =' + facebookId); JavaScriptの方では取得は不可能なのでしょうか?

avenaさんのコメント
ソースを全部拝見しないとなんともいえないのですが、「PHPでは取れるのにJavaScriptで取れない」となると、パーミッションの部分はクリアできているようですね。ご質問の本文にある getProfile 関数の内容には、特に問題はありません。FB.Data.queryの使い方も、FQLの内容も、問題はなさそうです。 ……となると、getProfile 関数を呼び出す前の段階に原因がありそうです。「FB.getLoginStatus でセッション情報が返ってきてからFQLを叩く」という流れのどこかで失敗している可能性が大です。 JavaScript Test Console http://developers.facebook.com/tools/console/ で、テキストボックスの下の "Examples" をクリック → Examples → account-info をクリックすると、ユーザ認証からFQLの利用までの一連の流れを含んだサンプルコードが見られますので、参考にしてみてください。

2 ● kodairabase
●100ポイント

users.getInfo
http://developers.facebook.com/docs/reference/rest/users.getInfo/

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ