Own products

  • 新規事業のアイディア創造機

Tutorial

2016
02/15

Facebook SDK v5 for PHPを使ってFacebookページに自動投稿する方法

この記事の読了時間:約620

  • このエントリーをはてなブックマークに追加

仕様がコロコロ変わる割にドキュメントが間に合ってないと評判の Facebook API 周りですが、先日どうしてもイジらざるを得なくなり、最新版SDK v5を使って自動投稿機能を実装した時の猟奇的紆余曲折。

そもそも公式のgithub SDK for PHP のページすらv4って書いておきながら中身はv5だし。

読めない英文を頼りに辿り着いた軌跡の果て、言葉を持たない血液はただ静かに憤怒の火を宿すのでした。

、、、などと意味不明な供述をしており(r

Facebook SDK v5を使ってFacebookページに自動投稿する方法

まずは下準備

あ、ちなみに今回の方法はComposerなど使わず、漢一貫直接ダウンロード&アップロードでいきます。

なので、なにはともあれFacebook SDK v5 for PHPをダウンロードしませう。

これを解凍して、中の「src」フォルダ以下をテキトーなディレクトリにアップ。じゃー仮に /settings/ の中に src フォルダごと入れましょーかね。

次に、facebook for developersに行って、使うアプリの「App ID」「App Secret」をGETしときましょ。

まだアプリ登録してないずら!って場合は、この記事この記事のように先人の知恵を借りつつ、事前にやっときましょう。

上記を参考に「Access Token Tool」に行って、使うアプリの Extend Access Token(期間の長いアクセストークン)を取りましょう。別にフツーの寿命のトークンでもいいけど。

なお、アクセストークン取るときのパーミッションに manage_pages を含めると、Extend Access Token が有効期限無制限のトークンとして取れるので、今回はページに使うしこれで行く。

ひとまずこれで下準備の第一弾はOK。

え、第一弾?

下準備その2

いくら上記のように「そのページのauthorとして」トークンを作っても、実際にページに投稿するにはページ用のトークンが別途必要になります。

これだからFBはめんどくせー。。。

なので続いては、テストページを作って一回SDKからログインして、ページに投稿するためのトークンを取得します。

下記をコピってIDやらsecretやらautoload.phpのパスを適宜修正してサーバにアップしてみんちょ!

<?php
session_start();

// 用意したアプリのApp ID
define('MY_APP_ID', 'xxxxxxxx');
// 用意したアプリのApp Secret
define('MY_APP_SECRET', 'xxxxxxxxxxxxxxxx');
// autoload.phpの場所(パス)を記載
require_once __DIR__ . '/Facebook/autoload.php';

$fb = new Facebook\Facebook(array('app_id' => MY_APP_ID, 'app_secret' => MY_APP_SECRET, 'default_graph_version' => 'v2.5'));
$helper = $fb->getRedirectLoginHelper();

if(isset($_GET['code'])){
	try {
		$access_token = $helper->getAccessToken();
	} catch(Facebook\Exceptions\FacebookResponseException $e) {
		echo 'Graph returned an error: ' . $e->getMessage();
		exit;
	} catch(Facebook\Exceptions\FacebookSDKException $e) {
		echo 'Facebook SDK returned an error: ' . $e->getMessage();
		exit;
	}

	if (isset($access_token)) {
		var_dump($fb->get('/me/accounts', $access_token));
	}
} else {
	$this_url = (empty($_SERVER['HTTPS'])?'http://':'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
	$permissions = array('manage_pages', 'publish_pages');
	$login_url = $helper->getLoginUrl($this_url, $permissions);
	echo '<a href="' . $login_url . '">Log in with Facebook!</a>';
}

と、設定間違ってなければ制作アプリたちの名前(name)やページID(id)やページ投稿用トークン(access_token)が表示されますので、使うアプリの「access_token」の文字列をコピー!こぴー!

これで準備万端!ページに投稿できるように!

ページ投稿サンプル

<?php
define('MY_APP_ID', 'xxxxxxxx');
define('MY_APP_SECRET', 'xxxxxxxxxxxxxxxx');
define('MY_APP_TOKEN', 'xxxxxxxxxxxxxxxxxxxxxxxx');
require_once __DIR__ . '/Facebook/autoload.php';

$fb = new Facebook\Facebook(array('app_id' => MY_APP_ID, 'app_secret' => MY_APP_SECRET, 'default_graph_version' => 'v2.5'));

$post_data = array(
	'name' => 'リンク名',
	'link' => 'リンク先URL',
	'picture' => '画像URL',
	'caption' => '説明文',
	'description' => '詳細文',
	'message' => '投稿メッセージ本文',
);

try{
	$fb->post('/me/feed', $post_data, MY_APP_TOKEN);
} catch(FacebookApiException $e) {
	echo 'API returned an error: ' . $e->getMessage();
	exit;
}

でっきたっかなーー☆

ネコサーチでエラー吐いたのが原因で調べあげた上記。

コレに比べてTwitterのわかりやすさよ。。

  • このエントリーをはてなブックマークに追加

コメントを投稿する

お名前

ご連絡先メールアドレス※非公開

コメント

CAPTCHA


  • このブログのRSSを購読する
  • このブログをtwitterでつぶやく
  • このブログをFacebookで共有する
  • このブログをはてなブックマークで共有する

Favorite feeds

    Contact

    お名前※必須

    ご連絡先メールアドレス

    お問い合わせ内容※必須

    CAPTCHA

    captcha

    Blog parts

    Affiliate