facebookのウォールに投稿するアプリ

2012/6/14 [00:20:39] (木) 天気

使い勝手がよくわからないし、プライバシーというか公開範囲もよくわからないし、妙にうっとーしーオススメされるので、すっかり放置のfacebook。正直なところ、なんか胡散臭くて、魅力を感じないんだけど、ユーザー数を考えるとちょっと調べておいたほうがいいような気がした。

で、この雑記帖のRSSをwallに投稿できればいいなあ、と。有名どころの、facebook graffitiというのを試したところ、反映されない。投稿されない。設定をいじっても沈黙したままで使いものにならない(たぶん、わたしの設定が悪い)

しょうがないんで、自作の方向で。facebookのAPIを触ってみるいい機会だ。


https://developers.facebook.com/apps

アプリを登録するために、携帯電話のメールアドレスかクレジットカードで本人認証が必要。それ以外は twitterのアプリと似たようなもんだ。WEBアプリとして登録。ドメインやアプリの名前、アプリのURLなどを入力して、アプリの app_id app_secret が管理画面で確認できる。

後は、facebookの、認証するためのURLにGETでリクエスト。レスポンスに含まれるパラメータでまたGETして、と。OAuthのやりとりは、OAuth1.0Aのtwitterより、OAuth2.0のfacebookの方が簡単、かもしれない。

具体的でわかりやすい解説は、ほかのページがたくさんあるので、検索してください。


ここでは。

facebookが用意してるSDKはPHPとJavascript。わたしが多少なりとも使えるのはperl。SDKがないので、perlでベタベタ書いていったメモ。(さらについでにいうと、CPANにはfacebookのモジュールがあるので、それを使った方がいい)

とりあえず。facebookの自分のwallにpost、投稿できるまでを忘れないうちに。


access tokenさえ取得してしまえばOK。


その1.コードを取得する


https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=URL&scope=publish_stream,offline_access

APP_ID、URLは、アプリ登録した時の管理画面に表示されている。

コンマ区切りのパラメータscope。

・publish_stream、wallに書き込む権限くださいね。

・offline_access、access tokenの期限を無期限にしてくださいね。

ということらしい。

[08/28 10:35:26] offline_access は2012/7/5で廃止になった。記事最後に代替手段追記


上記URLにアクセスすると、facebookの、このアプリを使いますか、というページに行くので、そこで承認=OKすると、facebookから、URLにコードをつけて返ってくる。

URL?code=CODECODECODE


その2.access tokenを取得する


https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=URL&client_secret=APP_SECRET&code=CODECODECODE

1で取得したコードと、アプリ登録時に取得するapp secretをパラメータに追加して、上記URLにアクセスする。


my $ua  = LWP::UserAgent->new();
my $req;
if( $args->{method} eq ’POST’ ){
  my $header = HTTP::Headers->new();
  $req = HTTP::Request->new(POST, URL, $header, BODY);
}
else{
  $req = HTTP::Request->new(GET, URL);
}
my $res = $ua->request($req);

8行目、その2で作ったURLにアクセス。問題なければ、レスポンス=htmlの中に、access_tokenが入っているのでそれをメモる。(今回は、自分のブログ記事を流すことが目的なので、そのままaccess token を使う)


ウォールに投稿するには

https://graph.facebook.com/USER_ID/feed ※

というURLにPOSTすることになる。ここでちょっとハマる。USER_IDなんてこれまでの過程で一度も出てきてない。取得した access token を使って USER IDを取得する必要があった。


https://graph.facebook.com/me?access_token=ACCESS_TOKEN

access token をパラメータにつけてアクセスするとJSON形式でデータが返ってくる。その中に user idという項目があるので、それをメモる。


使ったもの必要なものは以下。

アプリ登録時取得 app_id app_secret

OAuthで取得 code access_token

APIで取得 user_id


※のURLに対して、POSTで本文を投稿する。

本文に最低限必要なのは access_tokenとmessage。(その他のパラメータには、link name caption description picture などがある)

access_token=ACCESS_TOKEN&message=URLENCODE(message)という形式。


これで投稿ができるようになった。ブログの最新記事をfacebookのウォールに投稿するには、本文を適当に整えるだけ。あとでやっつけてしまおう。


SDKがあるので、モバイルアプリも頑張れば作れる、ような気がする。でもなあ、facebookってどうも信用できんのだ。


[08/28 10:35:26]

追記

offline_access を指定することで access token の有効期限は永続的だったが、2012/7/5にoffline_accessが廃止となって、access_token の有効期限をチェックしなきゃいけなくなった。

詳しくは以下のURL(ありがとうございます!)

http://appofit.com/facebook/remove_offline_access/


ウチは、ユーザー権限で何かするわけでもないので、有効期限が永続的に使えるアプリのトークンでwallに投稿することにした。


https://graph.facebook.com/oauth/access_token?client_id=アプリのID&client_secret=アプリのtoken_secret&grant_type=client_credentials

上記URLに直接アクセスするとaccess_tokenがわかるので、それをメモってハードコーディング。


PHPによるWebアプリケーションスーパーサンプル活用編 第3版

『PHPによるWebアプリケーションスーパーサンプル活用編 第3版』

マッキーソフト株式会社

<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】