先日はFacebookの情報を取得する方法を2回に分けて書きました。
- Facebookのアカウントを利用してユーザ登録、ログインページを作成する(OAuth認証)(第1回)
- Facebookのアカウントを利用してユーザ登録、ログインページを作成する(OAuth認証)(第2回)
2回の内容で、Facebookの情報にアクセスすることは出来るようになったと思いますので、今回はFacebookのウォールに投稿する方法を書きたいと思います。
参考にしたページは「Facebookアプリ開発に挑戦(その11・Graph APIでウォールに投稿)」で、書いてある内容のとおりです。ほぼ、書いてある内容で作成できました。
2回のサンプルで使用したscopeではユーザ情報にアクセスできるだけで、ウォールに投稿する権限がありませんので、第1回の3-3.ブラウザから認証ページにアクセスのURLにあるscopeにpublish_streamを追加します。
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream,publish_stream
続いて、先日のサンプルコードにコードを追加します。cURLを使っていますので、PHPのコンパイル時にcURLを指定していないと下記のコードは動きません。文字コードがUTF-8以外であればmb_convert_encodingで文字コードを変更してからurlencodeして$paramsを作成すると良いです。
<?php $ch = curl_init (); $params = 'access_token=' . urlencode ($params['access_token']); $params .= '&message=' . urlencode ($user->name . "さんはポイ探を使っています。"); $params .= '&picture=' . urlencode ("http://www.poitan.net/img/logo.20110121.png"); $params .= '&link=' . urlencode ("http://www.poitan.net/"); $params .= '&name=' . urlencode ("[ポイ探] ポイント探検倶楽部:ポイント交換ルート検索、ポイント自動管理"); // $params .= '&caption=' . urlencode ("[ポイ探] ポイント探検倶楽部:ポイント交換ルート検索、ポイント自動管理"); $params .= '&description=' . urlencode ("ポイントやマイル、電子マネーを最大限利用するためのポータルサイト。失効しそうなポイントや使っていないポイントを他のポイントプログラムに交換するルートを検索。ポイントやマイルの有効期限を自動で管理。口コミ掲示板も。"); curl_setopt ($ch, CURLOPT_URL, 'https://graph.facebook.com/me/feed'); curl_setopt ($ch, CURLOPT_POSTFIELDS, $params); curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $resp = curl_exec ($ch); curl_close ($ch); if ($resp === false) { // 通信エラー時の処理 } else { $resp = json_decode($resp); if (isset($resp->id)) { //投稿に成功した時の処理 } else if (isset($resp->error)) { //投稿に失敗した時の処理 } } ?>
投稿に成功した場合は下記の画面がFacebook上に表示されます。今回はmessage, picture, link, name, descriptionを追加して投稿しています。captionを追加するとURLが表示されている箇所に同じ色で文言を追加することができます。
毎回Facebookアカウントでのログイン時にウォールに投稿するアプリもあるようですが、さすがにちょっと不快かなと思いますので、弊社では「Facebookアカウントでユーザ登録した時」、「Facebookアカウントを現在のポイ探アカウントに紐付けた時」にウォールに投稿するようにしました。