Facebooka アプリの開発でハマルところをメモしておく

月曜日の晩に、こんな呼びかけがありました。


Fujiwaraさんには掲載許可をとってあります。

Kenta Fujiwara
Masahide Moriさん、Fb APIから住所の取得の仕方教えてくれませんか><
月曜日23:40
Masahide Mori ん〜、1時間くらいしたら時間取れるからチョット待ってて
月曜日23:42
Kenta Fujiwara わーい
月曜日23:46
Masahide Mori http://d.hatena.ne.jp/masazangi/20101115/1289842225
これのノウハウ1みたら、わかるかも。
月曜日23:48
Masahide Mori http://developers.facebook.com/docs/authentication/permissions
自分のだったら、こっから必要な Permission を選んで
月曜日23:49
Kenta Fujiwara うおおおお
月曜日23:50
Masahide Mori パーミッション変えたら↓で一回アプリ削除してから
許可画面で許可出さないとハマルかも
https://www.facebook.com/settings/?tab=applications
月曜日23:50
Kenta Fujiwara 権限の承認まではわかったのですが、
月曜日23:50
Kenta Fujiwara 実際に取得するコードと、どうやって画面に渡すのかがわからんかったです
月曜日23:50
Kenta Fujiwara もしかしてパーフェクトPHP読めってことかしら
月曜日23:51
Masahide Mori じゃ、やっぱちゃんと時間とるから1時間後ね
月曜日23:51
Kenta Fujiwara もりさんのブログ超ありがたいです。開発時の息遣いがわかるというか、そういった側面の情報がほしいす
月曜日23:52
Kenta Fujiwara すまんです
月曜日23:52
Kenta Fujiwara 寺瀬さんを召喚!
月曜日23:52
Masahide Mori このページは見てるかな?
http://d.hatena.ne.jp/ramyana/20101012/1286897340
昨日 0:57
Kenta Fujiwara
昨日 0:58
Kenta Fujiwara はい読みました
昨日 0:58
Masahide Mori そしたら、bodyタグ内に次のコード入れて$me変数の中身を見てみる
<pre>
<?php print_r($me);?>
</pre>
昨日 0:59
Masahide Mori 居住地だったら、以下の形で取り出せるよ
<?php echo $me["location"]["name"];?>
昨日 0:59
Kenta Fujiwara おおおおおお
昨日 1:00
Kenta Fujiwara さっそく試してみます!
昨日 1:00
Masahide Mori phpはとにかく、print_rで中を見てやれば、どう格納されてるかわかるよ
とんでもない配列のお化けみたいのも順番に引っ張ってくれば大丈夫
昨日 1:01
Kenta Fujiwara とれない;;
昨日 1:03
Kenta Fujiwara あれ?print_r見てみたら、[location]が無いですね
昨日 1:05
Kenta Fujiwara ?$meに入れ忘れたのか
昨日 1:05
Masahide Mori 僕は今↓そのままで、取れてたからプライバシー設定で
居住地の情報を全体に公開にしてませんかね?
http://d.hatena.ne.jp/ramyana/20101012/1286897340
昨日 1:06
Kenta Fujiwara 私が公開にしていないのかな?
昨日 1:08
Masahide Mori ?'req_perms' => 'status_update,publish_stream'
ここがあってるか、駄目押しで user_location 足してみるとか
↓で一回、消してみてからやってみるとか
https://www.facebook.com/settings/?tab=applications
昨日 1:08
Masahide Mori 僕からはNerima, Tokyoって見えてるけどね
昨日 1:09
Kenta Fujiwara status_update,publish_stream,user_hometown,user_birthday
昨日 1:09
Kenta Fujiwara user_hometownだとlocatioinは許可してくれないんですね
昨日 1:10
Kenta Fujiwara user_location 足してみます
昨日 1:10
Kenta Fujiwara 出た!英語でw
昨日 1:11
Kenta Fujiwara ありがとうございます!ありがとうございます!
昨日 1:11
Masahide Mori よかった!英語でしか登録してないんだから英語だしw
昨日 1:12
Kenta Fujiwara req_permsの一覧を熟読しておきます!
昨日 1:12
Kenta Fujiwara ここのところずっとひっかかっていたのはuser_hometownと格闘していました;;
昨日 1:13
Kenta Fujiwara これですっきりしました!ありがとうございます!師匠!
昨日 1:13
Kenta Fujiwara 精進します!夜分失礼しました!
昨日 1:14
Masahide Mori hometownは出身地だしね.
とれて良かった。おやすみ〜
昨日 1:14
Kenta Fujiwara おやすみですー^^
昨日 1:17

僕がユーザーの居住地を取るのに使うのに試したサンプルではuser_location無しで取れてしまったので、解決までに時間がかかってしまいました。
user_locationがある・ないでの動作の違いを見るために今日検証してみました。
新規アプリを登録して、以下のシンプルなソースでまずはuser_location無しで確認してみました。

<?php
require('facebook.php');

$facebook = new Facebook(array('appId'  => 'xxxxxxxxxxxxxxx',
			       'secret' => 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz',
			       'cookie' => true ));

$session = $facebook->getSession();
if (!$session) {
  $url = $facebook->getLoginUrl(array('canvas' => 1,
				      'fbconnect' => 0,
				      'req_perms' => 'status_update,publish_stream' ));
  echo "<script type='text/javascript'>top.location.href = '$url';</script>"; 
} else {
  try {
    $me = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $error = "Error : something is wrong, please try again later.";
    exit();
  }
}
?>
<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>facebook sample</title>
</head>
<body>
<h1>profile</h1>
<pre>
<?php print_r($me); ?>
</pre>
<h1>user location</h1>
<?php echo $me["location"]["name"]; ?>
</body>
</html>

結果は、

profile

Array
(
    [id] => xxxxxxxxxxxxxxx
    [name] => Masahide Mori
    [first_name] => Masahide
    [last_name] => Mori
    [link] => http://www.facebook.com/masazangi
    [hometown] => Array
        (
            [id] => 109610069057800
            [name] => Musashino, Tokyo
        )

    [location] => Array
        (
            [id] => 104190402949465
            [name] => Tokorozawa, Saitama
        )

    [bio] => ■最近のこと
tomochizuっていうFacebookアプリを作りました!
友人の居住地・出身地情報を日本地図上に表示します。
その結果から「フェイスブック称号」も作成されますので試してみてください。
Facebook 友達分布日本地図 tomochizu
http://apps.facebook.com/tomochizu/

kabeuchi(wall2note)という自分のウォール内容(自分の書き込みと、それに関するコメント)をまとめて100件ノートに書き込むアプリも作っています。
http://www.facebook.com/pages/Kabeuchi-FBapuri/125392010855895

■現在更新しているブログ
masazangi シツギョーチュッ
http://d.hatena.ne.jp/masazangi/

■経歴
1990年からずっとIT系の仕事をしてきましたが、会社都合の退職により2010年10月から無職になってしまいました。
過去には人工衛星の開発プロジェクトでハードテストプログラム、擬似系制御プログラムなどを作ってきました。
最近は、LAMP環境(OSはFreeBSDだったり)でのシステム開発がメインでした。
就職活動しつつ、起業の可能性もさぐって行きたい感じです。

使用PC:PB-100,MZ-1500,X1Cs,X1turboII,X68000XVI,Win3.1,Linux,Win95,Win98,Win2000,WinXP
プログラミング環境:Solaris,FreeBSD,Linux,VxWorks,C,C++,php,MySQL,emacs
    [quotes] => あきらめない人が成功する!
MZ-700に不可能は無い!
    [gender] => male
    [timezone] => 9
    [locale] => ja_JP
    [verified] => 1
    [updated_time] => 2010-11-24T01:41:31+0000
)
user location

Tokorozawa, Saitama

あれ?user_locationなくても、居住地が取れるなぁ。なんでだろう?
月曜日は色々と許可の条件を変えて試しているテストアプリIDでやっていたけど、今日は新しく作ったアプリIDでの動作結果なのに。


すみません。結論がうまくまとめられませんが、
user_location入れておいたほうが安心!


user_locationがなかった時の動作でわかったことがあれば、また報告します。