facebookのオフラインアクセスについて

2012年4月末で、オフラインアクセスがつかえなくなりました
どんなものだったかをちょっとまとめてみました
オフラインアクセスと普通のアクセスの違い
それは
アクセストークンの有効期限の違いのみ
通常のアクセストークンは2時間程度で失効
適正な処理が省略されている場合には
画面を開きっぱなしの状態で放置していると
アプリを起動しなおすことになります
これが
オフラインアクセス権限を持ってアクセストークンを取得していると
同じ条件で使用しているなら再起動しなくてよいというものです
一見便利なようですが
使用条件が変わると、アクセストークンが失効になります
例えば
アカウントのパスワード変更とか
アプリの権限を増減すると
失効されます
もちろん、アプリを削除したときも同様ですが
さすがに削除すればアクセストークンはなくなります

ubuntu で天気予報の透過表示 その2

引き続き、screenlets の設定です
インストールと起動が完了すると
デスクトップに
freemeteo のウィジェットが表示されるので、
これを右クリックし
Zip Code
を選択すると
zip code の入力ダイアログがでます
これに
前回の
東京のコードになる
1850147
を入力します
Screenshot-2012-05-10 19:11:49

ubuntu で天気予報の透過表示

ubuntu で天気予報を透過表示してみます
sudo apt-get update
sudo apt-get install screenlets
でインストールできます
そのまま端末で
screenlets &
とすれば起動します
起動したら
FreemeteoWeather
をクリックしてから
スタート/停止
ログイン時に自動スタート
の両方にチェックをいれます
Screenshot-2012-05-09 23:41:25
次にブラウザを開いて
http://freemeteo.com/
へアクセスし、都市のコードを入手します
今回は、東京のコードです
http://freemeteo.com/default.asp?pid=15&gid=1850147&la=1
がコードになります
Screenshot-2012-05-10 00:12:09

大容量バッテリーか、モバイルバッテリーの選択

イー・モバイル端末 GP02 のバッテリーですが
だいたい5時間程度しかもたないため、
対策として
大容量バッテリーを購入する
もしくは、
モバイルバッテリーを購入する
ということにしました
大容量バッテリーについては
EMOBILE Pocket WiFi GP02用 (MUGENPOWER HLI-GP02XL) 5000mAh 超大容量バッテリー

こちらを購入することにしました
レビューによれば
12~14時間持ったが
その代わり、満充電には8時間ほどかかる
とのことです
最初、モバイルバッテリーで
GP02 や iPod touch や Android を充電できるものも
考えました
そのときに検討したのが
モバイルステーション10.4【MS10400】モバイル充電器(特典y0.5)

これを選んだ理由としては
携帯・スマートフォン・ipad・iPod・携帯ゲーム機対応 
余裕の10,400mAhリチウムイオンバッテリー
iPad:約1.5回分
iPhone:約7回分
Xperia:7回分
GallaxyS2:約6.3回分
PSP:約8.5回分
DS lite:約9.5回分
携帯電話:約13回分
Nintendo DS Lite:約9.5回分のバッテリーパワー
というものでした
ただし、持ち運ぶことを考えるとあまり
荷物が増えるのも考えもの
重量そのものは
237g
なので、そこまで重くはありません
ただ、でかけているときに
バッテリーに指しながら GP02 を使うことは少ないと思うし
ipod touch も一緒にバッテリーに差して使い続けるのは
電車の中とかあるいているときに使うかは微妙なので
とりあえず、大容量バッテリーです
今年の夏も電力がどうなるかわからないので
バッテリーはノートパソコンの充電もできるようなものを購入して備えておこうと思います
ノートパソコンも充電できるものとしては
日本トラストテクノロジー 外付バッテリー Energizer XP18000 XP18000
があります

とりあえず、ネット回線については、GP02 でなんとかなります

canvas 型アプリの画面リロード注意点

facebook のcanvas型アプリの場合、一般的な方法では
リロードできないこともあるらしいので、メモってみました
画面のリロードを
javascript で行うには
window.location.reload() が一般的
でも、これだと
window は facebook の枠内に表示されている
内部フレームを指してしまい、画面全体リロードはできない
画面全体を指すウィンドウオブジェクト top もあるけど
これもダメ
window.top.location.reload()
top.location.reload()

画面全体のリロードを行おうとしても
facebook により top オブジェクトにアクセスできないようになっているのでNG
さらに、ブラウザの仕様で
内部フレームから歩かのウィンドウオブジェクトにアクセスできないこともあるのでダメ
top.location.href=”ジャンプ先URL”
これもダメ
現在確認できている成功例は
window.open(“ジャンプ先のURL”,”_top”)
として
ターゲットを画面全体としてURLを開くように指示すること
リロードの場合
ジャンプ先のURLは
自分自身のURLを指定するので
http://apps.facebook.com/アプリID
となります
window.top.open(“URL”)
だと
topへのアクセスが失敗するのでダメでした

チェックイン機能と権限について

Canvas型アプリの場合、
アプリを起動している時点でユーザはログインしている状態であることがほとんど
このため、FB.getLoginStatus() をつかっても
facebook への接続除隊を示すデータが渡される
でも、本来なら
接続状態をかくにんして
接続していないならログインすることを進めるようにするほうがベター
例えば
複数のウィンドウとかタブでfacebook を開いていたり
開発者用アプリのせ低画面からテストユーザ環境でログインしたりとかもあるので
接続していないというケースも多々あります
最近では、ブラウザも
firefox とか google chrome とか
いろいろでているし
(IEがないのは windows ほぼ使わないため)
アプリが必要としている権限の情報については
Graph API で取得可能
アプリの権限については
/me/permissions
にアクセスすれば取得できます
取得した権限の一覧は
JSONハッシュオブジェクト形式で
{‘権限の名前’:1}
となっています
例えば
{‘publish_stream’:1}
publish_stream は投稿の権限になります
もし、user_checkins を見たいなら
{‘user_checkins’:1}
を探します
あと、facebook アプリの場合
ほとんど最初にひつような全部の権限を要求しますが
必要に応じて権限を要求するようにもできます
このような作りにしたほうが
最近は安心されるかもしれません
というか、一般的に権限をみるユーザは
あまりいないかもしれません
スマホアプリで権限に気をつめるユーザはあまりいないように
facebook アプリとかでも
権限はあまり気にしていないようです

チェックイン履歴の取扱い

PHP SDKをつかって
チェックイン情報を取得する場合、
1つめの引数に /me/checkins
2つめに GET
3つ目の引数に チェックインの数を limit で指定します
ちなみに、チェックインの場所を取得するには
適切なアクセストークンが必要なので注意
例をかくと
$checkins =$facebook->api(‘/me/checkins’,’GET’,’array(‘limit’=>1));
こうすれば
最新の1件のチェックイン情報を取得できます
さらに、
$place =$checkins[‘data’][0][‘place’];
とすれば
場所の表示もされます
チェックイン情報を取り扱うには
パーミッションが必要です
必要となるパーミッションは
user_checkins
これは
チェックイン履歴を取得するものです
友達のチェックイン履歴を取得したいなら
friends_checkins
が必要です

facebook チェックイン投稿について

facebook の標準機能だと、GPS搭載デバイスに限り
チェックイン投稿可能
よく、ウォールとかに
~市付近とか
~にいます
とかでるけど
これはチェックインじゃなくて
位置情報が付加されているだけ
つまり、携帯とかのカメラとかと同じ
ではチェックイン投稿を行う条件ですが
これはチェックイン可能なfacebook ページのページID
そして
自分の緯度経度情報が必要
ちなみに、自分の緯度経度情報に関しては
サンプルで行ったように改ざんかのうだけど
チェックイン対象となる施設の市の近くにしないとダメ
もうちょっと正確にいうと
対象施設から
数百m~1Kmの範囲ぐらい
となります

facebook のチェックイン機能

facebook にはチェックインという現在地を書き込む専用の投稿システムがあります
この機能を使えば、
得き、レストランなど、
自分がいる場所を友達とかにしらせられますが
居場所がダダ漏れになります
扱いには要注意
ちなみに、チェックイン機能はモバイル端末
つまりスマホとかでないとダメで
デスクトップPCとかではダメになっているようです
ちなみに、自作したアプリの検証に、この機能を使うこともできます
やりかた
facebook developer サイトにアクセス
URLは
https://developers.facebook.com/tools/
にアクセスして
Graph API Explorer
をクリック
次に
アプリケーション:
の中から
天気予報アプリを選択
次にアクセストークンを取得
をクリックして
Extended Permissions
の中にある
publish_checkins
にチェックをして
get access token をクリックして
その後でてくるダイアログで
アプリを許可すればOK
でてきた画面の
URLに
/checkins
を追記して
GETをPOSTに変更
次に
フィールドの追加をクリックして
name に place
value に 247150845312400
もう一回フィールド追加して
name coordinates
value {“latitude”: 33.506829,”longitude”: 130.520446}
最後に送信をおすと
実際にウォールに投稿されます
今回は、書籍を参考にしましたが
おそらくは
最初のところが地名
そして、次の
value {“latitude”: 33.506829,”longitude”: 130.520446}
は緯度経度です
今回の参考書籍は
10日でおぼえるFacebookアプリ開発入門教室
です

INSERT 文

DBに記録するには INSERT文を使います
構文は
INSERT INTO テーブル名 VALUES(データ);
これは
データを単純に追加する
データのところには
テーブルを定義した際に
指定したカラムの順番で
データを , で区切って記述します
次に
INSERT INTO テーブル名 VALUES(データ) ON
DUPLICATE KEY UPDATE カラム名 = データ
これだと
データを追加する際に重複値の生成を避ける
こちらの場合
primary key のカラムにすでに同じ値の
データがあった場合、特定のカラムデータを書き換えるように支持する
ようにします