PHP(Codeigniter使用)からブログ投稿時にFacebookページへ自動投稿してみました。
![PHP(Codeigniter使用)からブログ投稿時にFacebookページへ自動投稿してみました。](/_next/image?url=https%3A%2F%2Ft-cr.jp%2Fassets%2Fimg%2Fpost%2Fthumb%2Fphp.jpg&w=3840&q=75)
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
Dockerの利用していないゴミを掃除しディスクスペースを解放するいくつかのやり方を紹介
- article
Next.js のバンドルサイズを可視化する@next/bundle-analyzer の紹介
- article
VSCodeでTypescriptファイルのimport補完で相対パスではなくエイリアスするための設定
- article
UUIDより短いユニークなIDを生成できるnpmライブラリnanoidの使い方
- article
【解決方法】TypeScript発生したTS2564 エラーの対処
- article
express で IP を取得する際などに利用する req.connection 非推奨(deprecated)の対処