PHP(Codeigniter使用)からブログ投稿時にFacebookページへ自動投稿してみました。

PHPSNS
PHP(Codeigniter使用)からブログ投稿時にFacebookページへ自動投稿してみました。
Memo
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

PHP(Codeigniter使用)からブログ投稿時にFacebookページへ自動投稿したのをメモしました。

Facebook開発者ページ

下記URLからFacebookの開発者ページへアクセスします。
※URLは変更になっている場合がございます。2014/2/1日時点のURL
https://developers.facebook.com/

Facebook開発者ページからアプリを作成

1.アプリから「新しいアプリの作成」をクリック

アプリから「新しいアプリの作成」をクリックします。
アプリから「新しいアプリの作成」をクリック

2.「Display Name」アプリの名前、「Namesspace」アプリのURLを入力、「カテゴリ」を選択

「Display Name」アプリの名前、「Namesspace」アプリのURLを入力、「カテゴリ」を選択し「アプリケーションを作成」をクリックします。
「Display Name」アプリの名前、「Namesspace」アプリのURLを入力、「カテゴリ」を選択

3.セキュリティチェックの文字を入力し「送信」をクリック

セキュリティチェックの文字を入力し「送信」をクリックします。
セキュリティチェックの文字を入力し「送信」をクリック

4.作成したFacebookアプリのダッシュボードから「アプリID」 「アプリのシークレットキー」をメモ

作成したFacebookアプリのダッシュボードから「アプリID」 「アプリのシークレットキー」をメモします。
作成したFacebookアプリのダッシュボードから「アプリID」 「アプリのシークレットキー」をメモ

5.サイドメニューから「設定」をクリックし「+Add Platform」をクリック

します。
サイドメニューから「設定」をクリックし「+Add Platform」をクリック

6.「ウェブサイト」をクリック

「ウェブサイト」をクリックします。
「ウェブサイト」をクリック

7.「サイトURL」を入力後「変更を保存」をクリック

「サイトURL」を入力後「変更を保存」をクリックします。
「サイトURL」を入力後「変更を保存」をクリック

以上でFacebookアプリの作成は終了です。 次は「facebook-php-sdk」をダウンロードします。

実装準備

facebook-php-sdkを設置

GitHubからfacebook-php-sdkをダウンロード

1.下記リンクへアクセスし「facebook-php-sdk」をダウンロードします。
※URLは変更になっている場合がございます。2014/2/1日時点のURL

https://github.com/facebook/facebook-php-sdk

GitHubからfacebook-php-sdkをダウンロード

2.ダウンロードした「facebook-php-sdk-master.zip」を解凍

ダウンロードしたfacebook-php-sdk-master.zipを解凍します。

3.ディレクトリのコピー

解凍してできたfacebook-php-sdk-masterファイルのなかの facebook-php-sdk-master/src/bace_facebook.php
facebook-php-sdk-master/src/facebook.php
facebook-php-sdk-master/src/fb_ca_chain_bundle.crt
ファイルを下記ディレクトリへコピーします。

└── facebook-php-sdk-master
    └── src
        ├── bace_facebook.php
        ├── facebook.php
        └── fb_ca_chain_bundle.crt

下記application/librariesディレクトリはCodeIgniteのapplicationディレクトリです。

└── application
    └── libraries
        └── facebook_sdk
            ├── bace_facebook.php
            ├── facebook.php
            └── fb_ca_chain_bundle.crt

Codeigniterへの記述

サンプルコードについて

サンプルコードは「Codeigniter」で簡易的なブログを作成していると想定し
「post.php」の「add」は記事を新しく投稿するページとします。

今回は投稿するデータをFacebookに自動反映するということで、
「Controller」に渡ってきたポストデータをそのままFacebookへ送る形を例とします。
記述箇所などは適宜変更してください。

先ほどメモしたFacebookの「アプリID」 「アプリのシークレットキー」
そして投稿する「Facebookページの」「FacebookページID」が必要です。

サンプルコード

application/controller/post.php
<?php class Post extends CI_Controller { public function __construct() { parent::__construct(); //モデルを読み込みます。 //application/models/post_model.php $this->load->model('post_model'); } public function add() { //ヴァリデーションは任意のものを設置してください。 $this->load->library('form_validation'); if ($this->form_validation->run() == FALSE){ //サンプルview application/view/post_add.php $this->load->view('post_add'); }else{ /* facebook投稿ここから */ //先ほどメモしたFacebookの「アプリID」「アプリのシークレットキー」 //用途によって記述箇所を変更してください。 $facebook = array( 'appId' => 'アプリID', 'secret' => 'アプリのシークレットキー', ); $facebook_page_id = 'フェイスブックページのID'; $post_data = array( 'message' => 'このメッセージが投稿されます。', 'picture' => '画像のURL', 'link' => '画像リンク先のURL', 'name' => 'リンク名', 'caption' => '説明文', 'description' => '詳細文', 'access_token' => $page['access_token'] ); /* 投稿からの情報を取得して配列に格納するサンプル $post = $this->input->post(); $post_data = array( 'message' => $post['message'], 'picture' => $post['image'], 'link' => $post['link'], 'name' => $post['name'], 'caption' => $post['caption'], 'description' => $post['discription'], 'access_token' => $page['access_token'] ); */ //先ほどダウンロードしたfacebook.phpを読み込みます。 //application/libraries/facebook.php $this->load->library('facebook_sdk/facebook',$facebook); $user_id = $this->facebook->getUser(); if($user_id != 0){ //ユーザーIDを取得出来たら投稿処理 try { $pages = $this->facebook->api('/'.$user_id.'/accounts'); //自分が管理しているfacebookページから投稿するページを取得 foreach ($pages['data'] as $page) { if($page['id'] == $facebook_page_id) { $page_id = $page['id']; $post_data['access_token'] = $page['access_token'] $result = $this->facebook->api('/'.$page_id.'/feed', 'post', $post_data); } } } catch (FacebookApiException $e) { throw new Exception($e); } }else{ //ユーザーIDを取得出来なかったら認証処理 if(!empty($_GET['error_code'])){ echo 'facebook認証エラー'; exit; }elseif(!$user_id){ $params = array( 'display' => 'popup', 'redirect_uri' => "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], 'scope' => 'publish_stream,manage_pages', ); $fb_login_url = $this->facebook->getLoginUrl($params); header("Location: " . $fb_login_url); exit; } } /* facebook投稿ここまで */ //サンプルmodel モデルの関数を実行します。 $this->Post_model->insert_post($this->input->post()); //サンプルview application/view/post_success.php $this->load->view('post_success'); } } }

コメントの/* facebook投稿ここから */から/* facebook投稿ここまで */が実際の処理になります。
今回は「Controller」に記述していますが用途に合わせて変更してください。

一度アプリの認証をしてから、投稿すると「Facebookページ」に投稿が反映されます。

最後にFacebookアプリの管理ページから
「★ Status & Review」タブをクリックし「はい」へ変更すると投稿が一般公開されます。

「★ Status & Review」タブをクリックし「はい」へ変更すると投稿が一般公開さ

今回は「Facebookページ」の記事についてでしたので
「Codeigniter」にはあまり触れていませんが今後、「Codeigniter」の記事を書いていきたいと思います。

終わりに

最後までご覧いただきありがとうございます。
この記事ではPHP(Codeigniter使用)からブログ投稿時にFacebookページへ自動投稿してみました。について紹介させていただきました。

これからも皆様の開発に役立つ情報を提供していきたいと考えています。
今後ともよろしくお願いいたします。