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が何故取得できないのか、また、どうすれば取得できるのか教えていただきたいです。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/11/26 14:55:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:avena No.1

回答回数48ベストアンサー獲得回数7

ポイント100pt

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

'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アプリケーション開発ガイド」という本の著者です。このあたりはちょっと詳しいです。

id: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の方では取得は不可能なのでしょうか?

2011/11/19 18:10:03
id: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の利用までの一連の流れを含んだサンプルコードが見られますので、参考にしてみてください。

2011/11/20 19:50:33

その他の回答1件)

id:avena No.1

回答回数48ベストアンサー獲得回数7ここでベストアンサー

ポイント100pt

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

'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アプリケーション開発ガイド」という本の著者です。このあたりはちょっと詳しいです。

id: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の方では取得は不可能なのでしょうか?

2011/11/19 18:10:03
id: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の利用までの一連の流れを含んだサンプルコードが見られますので、参考にしてみてください。

2011/11/20 19:50:33
  • id:windofjuly
    うぃんど 2011/11/19 15:38:26
    Facebook Query Language (FQL)は使ったこと無いので、
    投稿していいかどうか迷ったんだけど・・・
    http://developers.facebook.com/docs/reference/fql/
     
    上記のサイトでuserテーブルについて眺めてみると
    パーミッションによるとなっているけれど、
    質問文によると「それはクリアしている」・・・
    http://developers.facebook.com/docs/reference/fql/user/
     
    >music、about_meが何故取得できないのか?
     
    相手が公開を望んでいない(プロフィール公開先を友達などにしてある)場合や、
    プロフィールそのものを登録していない(出来たっけ?)場合には、
    nullが返ってくるってことではないかと思われる
     
    >どうすれば取得できるのか?
     
    相手の状況によるものと思われるので、強制的に取得する手段はないと思われる
     
    テストとしてはオールオープンだと判っている相手の情報取得をやってみること・・・
     
    こんなので参考になるかな?
  • id:takaponn12
    ご回答ありがとうございます。
    試しに自分自身のfacebookアカウントの自己紹介や好きな音楽を全公開にしてみたのですが、やはり取得できませんでした。

    何ででしょうね。。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません