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

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を入力、「カテゴリ」を選択し「アプリケーションを作成」をクリックします。

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

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

5.サイドメニューから「設定」をクリックし「+Add Platform」をクリック
6.「ウェブサイト」をクリック
7.「サイト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
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 
ファイルを下記ディレクトリへコピーします。
css└── facebook-php-sdk-master
    └── src
        ├── bace_facebook.php
        ├── facebook.php
        └── fb_ca_chain_bundle.crt
下記application/librariesディレクトリはCodeIgniteのapplicationディレクトリです。
markdown└── 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」タブをクリックし「はい」へ変更すると投稿が一般公開されます。
今回は「Facebookページ」の記事についてでしたので
「Codeigniter」にはあまり触れていませんが今後、「Codeigniter」の記事を書いていきたいと思います。
 article article- PHP 開発環境の作り方【完全ガイド】:macOS/Windows/Linux 別最適解
 article article- PHP とは?2025 年版の特徴・強み・できることを徹底解説【保存版】
 article article- CodeIgniterで接続しているデータベースにPHPからテーブルを作成するサンプルコード
 article article- 「Codeigniter」トラックバック受信処理について使い方とサンプル
 article article- PHPでフォーム送信時のCAPTCHA(画像認証) を簡単に設置できる「Securimage」の使い方とサンプル
 article article- PHPから日本語のメールを送信するやり方
 article article- CodeIgniterで接続しているデータベースにPHPからテーブルを作成するサンプルコード
 article article- 「Codeigniter」トラックバック受信処理について使い方とサンプル
 article article- PHP(Codeigniter使用)からブログ投稿時にTwitterへ自動投稿してみました。
 article article- PHP(Codeigniter使用)からブログ投稿時にFacebookページへ自動投稿してみました。
 article article- MySQL ERROR 1449 対策:DEFINER 不明でビューやトリガーが壊れた時の復旧手順
 article article- Cursor で差分が崩れる/意図しない大量変更が入るときの復旧プレイブック
 article article- Motion(旧 Framer Motion)で exit が発火しない/遅延する問題の原因切り分けガイド
 article article- JavaScript 時刻の落とし穴大全:タイムゾーン/DST/うるう秒の実務対策
 article article- Cline が差分を誤適用する時:改行コード・Prettier・改フォーマット問題の解決
 article article- htmx で二重送信が起きる/起きない問題の完全対処:trigger と disable パターン
 blog blog- iPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
 blog blog- Googleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
 blog blog- 【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
 blog blog- Googleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
 blog blog- Pixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
 blog blog- フロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
 review review- 今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
 review review- ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
 review review- 愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
 review review- 週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
 review review- 新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
 review review- 科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来





