ツイート
2011.07.24
Perlを使ってFacebookの自分のウォールに写真付きで投稿する方法
やっと成功した。個人的メモ。
基本は以前に紹介したTwitterの場合のOath認証と同じですが、専用のAPIも必要なく、もっと簡単に扱えます。Open Graph Protocolって思想ってか?
(1)開発者ページにアクセス。アプリを登録する。サイトURL、ドメインは下記の認証作業で使用する必要があるため、2つとも同じにして自分でPerlスクリプトをおける場所にする(下記で使うredirect_uriとドメインが違うとエラーになる。)。
(2)登録すると、AppIDと AppSecretが発行されるのでメモ
(3)アプリを使ってaccess_tokenを取得するためのスクリプトを作成、設置。https://usewill.com/facebook.cgiでやりとりするとして話を進める。以下の2回のFacebook graph APIのアクセスで投稿に必要なユーザーごとのaccess_tokenが取得出来る。
<<概要>>
step.1:AppIDと取得したいアクセス権限のリストを添えてFacebook graph APIに送る(アクセス1回目)
step.2:Facebook graph APIは申請を行ったユーザーに(パソコンに保存されているcookie内容を元に)アプリからのアクセスを許可するかユーザーに聞く
step.3:許可された場合、Facebookのgraph APIがredirect_uriに認証コードを返してくる。
step.4:AppID、AppSecret、取得した認証コードを添えてユーザーごとのaccess_tokenを要求(アクセス2回目)
step.5:承認されればFacebook graph APIからユーザーごとのaccess_tokenが帰ってくる。
<<具体例>>
★step.1の部分
https://graph.facebook.com/oauth/authorize?client_id= AppID&redirect_uri= https://usewill.com/facebook.cgi(URLエンコードしておく)&scope=publish_stream,offline_access
上記の例ではscopeはウォールへの書き込みに必要な「publish_stream」と、ログオンしてなくてもアクセス可能にするための「offline_access」を要求している。この2つでウォールへの書き込み可能。
★step.4の部分
作成したfacebook.cgiではFacebook graph APIがstep3でGETで渡してくる認証コード(code)を含めて
https://graph.facebook.com/oauth/access_token?client_id= AppID&redirect_uri= https://usewill.com/facebook.cgi(URLエンコードしておく)&client_secret= AppSecret&code= step3で渡された認証コード(code)
という内容で再度Facebook graph APIにアクセスすると
access_token=xxxxxxxxxxxxxxxx
という内容がページ内容として帰ってきて、かつredirect_uriに転送される。
※step3→step4は同じスクリプト内などでシームレスにやる必要があるようだ。たとえばいったん認証コードを保存し、手作業でstep4を実行するとエラーとなる。制限時間がある?よく分からない。
※step1とstep4のredirect_uriは同じじゃないとエラーが出る。
※Facebook graph APIはhttpsでアクセスしないとダメ、Crypt::SSLeayがインストールされてなくてLWPでhttpsアクセス出来ない糞レンタルサーバーじゃダメっす。
(4)実際の投稿プロセス
いったんaccess_tokenが取得出来れば<form action="https://graph.facebook.com/ あなたのUserID/feed" method="post">
<form action="https://graph.facebook.com/me/feed" method="post">でOK
<input type="hidden" name="access_token" value=" 取得したaccess_token">
<input type="hidden" name="picture" value=" 投稿した画像のURL(無くてもOK)">
<input type="text" name="message" value=" メッセージ">
<input type=submit name="submit" value="submit">
</form>
的な内容をPOSTすれば投稿し放題。画像をURLで渡せるのは便利だね。直接データとして渡せる方法があるかどうかは不明。
ご参考。
さぁ、何作ろうかな♪
参考にしたページ
Category:Perl・Javascript・python、サーバー管理メモ
コメント
この記事のアクセス数:→カテゴリー:Perl・Javascript・python、サーバー管理メモ(記事数:83)
アクセス数の多い記事(過去1ヶ月)