facebookのapp access tokenを使ってPOSTする

以前にこういう記事を書いたわけなんですが、

facebookへのbotからのpostが失敗する件(2012.08.21)

これはuser access tokenの有効期限が60日が上限になってて、access token取得から60日経過するとaccess tokenが無効になる、というモノでした。

で、facebookのaccess tokenには、app access tokenというものもあって、こちらは有効期限に上限がない、つまり無期限で使えるものみたいです。

そんなわけで、app access tokenを使ってみました。

app access tokenを取得する

以下のURLにアクセスしてapp access tokenを取得します。

https://graph.facebook.com/oauth/access_token?client_id=【APP_ID】&client_secret=【APP_SECRET】&grant_type=client_credentials

【APP_ID】と【APP_SECRET】を、それぞれ自身のアプリケーションの内容に書き換えてください。
このURLにアクセスすると、以下の内容がブラウザに表示されます。

access_token=*******************************************

「access_token=」以降がapp access tokenです。メモっときましょう。

投稿してみる

では、app access tokenを使って投稿するプログラムを書いてみます。PHPです。

<?php
header("Content-Type: application/xml");

$url = "https://graph.facebook.com/【USER_ID】/feed"
    . '?access_token=【APP_ACCESS_TOKEN】'
    . '&message=これはテスト投稿です。';

require_once('HTTP/Request2.php');
$request = new HTTP_Request2($url, HTTP_Request2::METHOD_POST);
$request->setConfig(array(
			'ssl_verify_peer' => false
));
$response = $request->send();
?>

【USER_ID】には投稿したいfacebookアカウントのIDに書き換えて、【APP_ACCESS_TOKEN】はさっきメモったapp access tokenに書き換えます。

USER IDがわからない場合は、以下のURLの【USERNAME】の部分を、ユーザネームに書き換えてブラウザでアクセスしてください。

http://graph.facebook.com/【USERNAME】

JSON形式で以下の結果が返却されます。

{
"id": "9999999999",
"name": "XXXXXXXXXX",
"first_name": "XXXXX",
"last_name": "XXXXX",
"link": "http://www.facebook.com/XXXX",
"username": "XXXX",
"gender": "male",
"locale": "ja_JP"
}

この「id」の値がUSER IDです。

で、これで実行してみると無事投稿できました。

関連としてここら辺もご覧頂ければ。

PHP facebookのOAuth処理(2011.03.28)
facebookのOAuth(その2)(2011.07.10)
facebookでAPIを使ったPOST(2012.01.21)