Facebook

161201

こんにちは。 記事を書いていると、公開したあとに色々修正したくなりますよね。 そのときにOGPを今すぐ変更したい!というときがあると思います。 Facebookもクローラーを走らせて、記事を常にフレッシュにしようと取り組みをされているようですが、自分のタイミングでOGPを変更したいですよね。 今日はそんなときに便利な「Sharing Debugger」というのを紹介したいと思います。

Continue reading OGP設定を後から変更したい!そんなときに便利なFacebook公式ツール「Sharing Debugger」

Read more

14956414246_4a80c8f906

みなさんこんにちは! なんとなくFacebookのシェアボタンを実装しようと思ってFacebookのsharerを使って実装しようと思ったら謎のinvalid.invalidっていうエラーが出たのでなんなんだろうなぁと思って調べた結果を掲載します!同じエラーが出た人の助けになればいいなと思います!

Continue reading Facebook sharerでシェアしようとすると「リンクが見つかりませんでした」エラー invalid.invalid

Read more

こんにちは!

今回は僕がFacebookのタブページを制作するときに何個か気をつけていることがあるので記事にしておこうと思います。 誰かの役に立つことを信じて。

ちなみにタブページっていうのは昔の記事で言及しているもののことを指しています。

Facebookタブページを制作しているときに気をつけていること

そこまで多くないし普通にページ制作してれば大丈夫なのですが、Facebookタブページ内では以下のことに気をつけながら制作しています。

  • widthは810px
    810pxより大きく作ってしまうと、ページにスクロールバーが出てしまうのでここは気をつけて作っておいたほうがいいです。

  • Facebook JavaScript SDKを読み込む
    Facebookタブページを作る際、Facebook JavaScript SDKが準備されているのでそれを読み込みましょう。 具体的には以下のコードになります。


<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="css/reset.css" type="text/css" />
    <link rel="stylesheet" href="css/style.css" type="text/css" />
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/rollover.js"></script>
    <script type="text/javascript" src="https://connect.facebook.net/ja_JP/all.js"></script>
    <script language="JavaScript">
    FB.init({
            appId: [アプリID], 
            status: true,
            cookie: true,
            xfbml: true
    });

    window.fbAsyncInit = function() {
        FB.Canvas.setAutoGrow();
    }
</script>
<title></title>
</head>
<body>
</body>
<div id="fb-root"></div>
<script>
    FB.Canvas.setAutoGrow({ width: 851, height: 1400 });
</script>
</body>
</html>
Read more

こんにちは!

前から1回Facebookページのタブを作る流れをまとめたいと思っていたのでこの機会にまとめちゃいたいと思います! ちなみにFacebookページのタブとは、下の赤枠の部分のことをさしています。

タブページを作るのに必要なもの

  • SSLの通ったサーバー
  • Facebookページ
  • Webページを作成するための知識

それでは作っていきましょう。

Facebookアプリを作成する

昔書いた記事にFacebookアプリを作る方法があるのでそこまでやってください。

「設定」から「App Domains」の部分に今回使用するサーバーのドメインを登録しておいてください。

「Add Platform」をクリックして「ページタブ」を選択してページタブ情報を入力します。

「Page Tab Name」はページタブの名前を(Facebookページのタブ画像の下に表示される文字列です)、「Page Tab URL」には表示したいページのURLを、「Secure Page Tab URL」には「Page Tab URL」で指定したページにSSLが通っているURLを入力します。 「ページタブの画像」には画像を入れます。現在、111×74ピクセルのものしか入れることが出来ないので注意してください。

全て入力したら「変更を保存」をクリックします。

サンドボックスモードを解除する

デフォルトではそのタブページは管理人しかアクセス出来ないようになっているのでサンドボックスモードを解除して誰でもアクセス出来るようにします。

アイコン画像を設定する

ページタブのアイコンとは以下の部分です。

「App Details」の「アイコン」項目のとこにある「16×16」のほうに画像をアップロードします。 そこにアップロードした画像がアイコン画像になります。

Facebookページにタブを埋め込む

FacebookアプリのIDを以下のURLに置き換えてアクセスします。

http://www.facebook.com/add.php?api_key=[FacebookID]&pages=1

以下のようなページに飛ぶのでページタブを設定したいページを選択してOKボタンをクリックします。 これでタブページ設定完了です!!!

最後に

これで一連の流れは終了です! Webページの制作になるとまた別に多少の知識が必要なのですが、それはまたの機会に!

結構参考になります

Facebookページ プロフェッショナルガイド
蒲生トシヒロ 竹村詠美 原裕 大元隆志 井出一誠 マクラケン直子 ホシナカズキ 藤本壱 荒木勇次郎 関根元和
毎日コミュニケーションズ
売り上げランキング: 232,919
Read more

こんにちは!

普段からFacebookのAPIを叩いたりしているのですが、アクセストークンの取得の方法をなんとなくまとめる機会があったので、このブログでも軽くまとめていこうかなと思います。

そもそもアクセストークンって?

アクセストークンとは、APIを叩くために必要な鍵みたいな存在です。 ちょっと重要な情報(非公開にしている投稿や画像、個人情報など)をAPI経由で取得したい!と思ったとき、その情報を取得しても構わない人にアクセストークンを渡すことによってデータへのアクセスを許可する役割があります。

とりあえず重要な情報にアクセスしようとするとアクセストークンが必要になるよ!ってことだけ覚えておくといいかもしれません。

今回取得するFacebookのアクセストークンは自分自身へのアクセストークンを取得する方法なので、例えば自分の持っているFacebookページの投稿に対するインプレッションを記録したり、メッセージを自分だけのアプリ上で送信出来るようにしたり、そういうことをするときに必要になるアクセストークンを取得していきます。

それでは早速やっていきましょう。

Facebookアプリを作成する

まずはFacebookアプリを作成しましょう。 以下のURLにアクセスしてFacebookアプリを作っていきましょう。 Facebook Developers

赤枠の部分をクリックして必要事項を埋めてアプリ制作しましょう。

アプリIDとアプリのシークレットキーを取得出来ました!

あなたの持っている適当なドメインを登録しておかないといけないので登録しておきましょう。 「Add platform」からウェブを追加して「AppDomain」の部分と「サイトURL」の部分にドメインを追加します。

取得したい情報のスコープを持ったURLにアクセスする

アプリIDとシークレットキーを取得したら、自分がどの情報にアクセスしたいのかを以下のリファレンス内から探してきます。

Permissions

今回は自分の誕生日を取得してみようと思うので、user_birthday パーミッションを以下のURLに書きます。 [アプリID]の部分にはさきほど取得したものを、[URL]のとこには持っているドメインのURLを入れてください。

https://graph.facebook.com/oauth/authorize?client_id=[アプリID]&scope=user_birthday&redirect_uri=[URL]

上記のURLにアクセスするとよく見る以下のような画面が出てきます。

アクセストークンを取得する

以下のURLからアクセストークン一覧に飛ぶことが出来ます。 アクセストークン – Facebook Developers

その中からさきほど作ったアプリの名前を検索してみると、「User Token」の部分にランダムな英数字があると思います。 これが取得したいアクセストークンです!!

ちなみに横の「デバッグ」ボタンをクリックすると、そのアクセストークンがいつまで有効なのかや、どの情報にアクセス出来るのかの詳細を見ることが出来ます。

これでアクセストークン取得完了しました!!

実際に使えるかどうか試してみる

それではあなたのFacebookのページを開いてください。(https://www.facebook.com/[ユーザー名] のURLで表されるページ) そのURLの「www」の部分を「graph」に変えてアクセスしてみてください。

情報がJSONで返ってくると思います。この時点で、誕生日情報は、設定で公開していない限り見えないはずです。

そのURLのあとにさきほど取得したアクセストークンをくっつけてアクセスしてみましょう。 URLとしては以下のような形になります。

https://graph.facebook.com/[ユーザー名]?acecss_token=[取得したアクセストークン]

どうでしょうか! さきほどよりたくさんの情報が取得出来たのではないでしょうか。 これでアクセストークンが有効であることが確認出来たと思います!!

最後に

アクセストークンの横にあった「デバッグ」ボタンを押すとわかると思うのですが、アクセストークンには有効期限があります。 おおよそ1時間だと思うのですが、1時間だけのアクセストークンだと意味のないときもあります。 その場合はアクセストークンの期間延長をするための方法があるのですがそれは昔書いた記事を参照してください。

快適なFacebookAPIライフを!!

参考本

10日でおぼえるFacebookアプリ開発入門教室 (10日でおぼえるシリーズ)
多田 智史 岩崎 雅也
翔泳社
売り上げランキング: 343,343
Read more

みなさんあけましておめでとうございます! 2ヶ月くらい更新してなかったですが、ブログは書き続けてたほうがいいなぁと思っていたので新年からまた書き始めます!

それでは早速書いていきましょう。

最近Composerを使ってCakePHPでFacebookログインを実装したので、そこまでの流れをまとめておこうと思います。

Composerで必要なものをインストールする

composer.jsonから作っていきましょう。

CakePHPFacebook PHP SDKをインストールするので以下のように書けばインストール出来ます。

{
    "name": "facebook-login",
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.cakephp.org"
        }
    ],
    "require": {
        "pear-cakephp/cakephp": "2.4.4",
        "facebook/php-sdk": "dev-master"
    }
}

composer.pharをダウンロードしてパッケージをインストールしていきます。

$ curl -s http://getcomposer.org/installer | php
$ php composer.phar install

Bakeでプロジェクトを作成します。

$ vendor/bin/cake bake project $PWD --empty

これでブラウザからアクセスすると、いつもの緑画面が出てくると思います。

ここまでで大方終了しましたが忘れちゃいけないので CAKE_CORE_INCLUDE_PATH を書き換えること。

3箇所書き換えていきましょう。

webroot/index.php

define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . APP_DIR . DS . 'vendor' . DS . 'pear-pear.cakephp.org' . DS . 'CakePHP');

webroot/test.php

define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . APP_DIR . DS . 'vendor' . DS . 'pear-pear.cakephp.org' . DS . 'CakePHP');

Console/cake.php

$ds = DIRECTORY_SEPARATOR;
$dispatcher = 'Cake' . $ds . 'Console' . $ds . 'ShellDispatcher.php';

if (function_exists('ini_set')) {
    $root = dirname(dirname(__FILE__));

    // the following line differs from its sibling
    // /app/Console/cake.php
    ini_set('include_path', $root . $ds . 'vendor' . $ds . 'pear-pear.cakephp.org' . $ds . 'CakePHP' . PATH_SEPARATOR . ini_get('include_path'));
}

if (!include $dispatcher) {
    trigger_error('Could not locate CakePHP core files.', E_USER_ERROR);
}
unset($paths, $path, $dispatcher, $root, $ds);

return ShellDispatcher::run($argv);

最後にデータベースをbakeして終了っと!

$ Console/cake bake db_config

実装前の準備をする(Facebookアプリ作成、SDKの読み込み、データベース等)

次にFacebookアプリやFacebookSDKの読み込み、データベースの作成等を行っていきます。

以下のURLに飛び、Facebookアプリを「新規作成」し、アプリIDとシークレットをゲットしておいてください!

次にcomposerでいれたFacebook PHP SDKを読み込んでいきます。 PagesController.php で読み込んでいきましょう。

PagesController.php

<?php App::uses('AppController', 'Controller');
App::import('vendor', 'facebook/php-sdk/src/facebook');

最後にデータベースです。 今回は Admin テーブルを作成しその中にログインに必要な情報を事前に入れておこうと思います。 実際に試す場合は自分のFacebookIDを入れておいてください。

CREATE TABLE IF NOT EXISTS `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `facebook_id` varchar(128) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

INSERT INTO `admin_user` (`id`, `facebook_id`, `created`, `modified`) VALUES
(1, '自分のFacebookID', NOW(), NOW());

最後の最後に! routes.php 内でPagesControllerのルーティングが定められているのでそれをコメントアウトしておきます。

    // Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

これで終了です。やっと本題にいきましょう!

Facebookログインを実装していく

さて、やっと本題です。 ログインの流れとしては、

  • ログインボタンクリック
  • Facebook側で認証をする
  • 認証後リダイレクト先でFacebookIDが取れ、データベース内にそのIDがあればログインを完了させマイページに飛ばす

こんな感じでやっていこうと思います。

一気にいきます。PagesController.phpにがばっと書いていきます。

PagesController.php

 [
            'authenticate' => [
                'Form' => [
                    'userModel' => 'Admin'
                ]
            ],
            // ログインページ
            'loginAction' => ['controller' => 'pages', 'action' => 'index'],
            // ログイン後リダイレクトページ
            'loginRedirect' => ['controller' => 'pages', 'action' => 'my'],
            // ログアウト後リダイレクト先
            'logoutRedirect' => ['controller' => 'pages', 'action' => 'index'],
            // エラーメッセージ
            'authError' => 'Admin Only'
        ]
    ];

    public function beforeFilter(){
        $this->facebook = new Facebook([
            'appId' => '取得したAppId',
            'secret' => '取得したAppSecret',
            'cookie' => true
        ]);
        $this->Auth->allow('index', 'login');
    }

    protected function _authFacebook(){
        $login_url = $this->facebook->getLoginUrl(['redirect_uri' => Router::fullBaseUrl() . Router::url(['controller'=>'pages', 'action'=>'login'])]);
        return $this->redirect($login_url);
    }

    public function login(){
        $this->autoRender = false;
        $fb_id = $this->facebook->getUser();
        $login_info = ClassRegistry::init('Admin')->find('first', ['conditions' => ['Admin.facebook_id' => $fb_id]]);
        if(isset($login_info)){
            if($this->Auth->login($login_info['Admin'])){
                return $this->redirect(['action' => 'my']);
            } else {
                return $this->redirect(['action' => 'index']);
            }
        } else {
            return $this->redirect(['action' => 'index']);
        }
    }

    public function logout(){
        $this->Auth->logout();
        return $this->redirect(['action' => 'index']);
    }

    public function index(){
        if($this->Auth->loggedIn()){
            return $this->redirect(['action' => 'my']);
        }
        if($this->request->is('post')){
            $this->_authFacebook();
        }
    }

    public function my(){

    }

}

わからなければ質問なり公式ドキュメントを参照してください!!!

Modelのフォルダ内に Admin.php を下記のような感じで作成します。

<?php App::uses('AppModel', 'Model');

class Admin extends AppModel {

    public $useTable = 'admin';

}

Viewは index.ctpmy.ctp を作ります。

index.ctp

Form->create('Admin', ['method' => 'post']);?>

Form->button('Facebookログイン');?>

my.ctp

マイページ

Html->link('ログアウト', ['controller'=>'pages', 'action'=>'logout']);?>

これでFacebookログインが実装できました!!

最後に

いかがでしたでしょうか。 なんとなくの流れは理解出来たかなぁと思います。 何かわからない点がありましたらコメントやTwitterで聞いていただければと思います!

CakePHP本が続々出ていますね。

Webアプリ開発を加速する CakePHP2定番レシピ119
長谷川 智希
秀和システム
売り上げランキング: 15,164
Read more

みなさんこんにちは

最近Facebookを見ていて、以下の画像のように、今までの画像サイズとは違うものがよく流れてくるようになってました。

398×208!?!? んーよくわからん。 確かに前のOGP変更で推奨画像サイズが1500×1500になりましたが全部の記事に1500×1500の画像を貼るわけにはいかない!てか貼れない!!

ということで最低どのくらいのサイズがあれば上記の画像の大きい画像を出すことが出来るのかを色々作って調べてみました。 既に調べている記事も発見したので参考記事としてリンク貼っておきますね。

参考:FacebookのOGP画像サイズはどんなサイズがいいの

調べた画像は全部下に貼っておきますね

多少ネタバレ感のある画像ですが、とりあえず検証検証♪

検証

300×150の画像

表示すらされない・・・orz

400×200の画像

うーん

300×300の画像

お腹減ってきません?

350×300の画像

最近のおすすめは食パンです

400×300の画像

コンビニで売ってる8枚切りがおすすめです・・・ってきたー!

結論

ってことで、Facebookで最近出てきてる大きな画像を出すためには、最低400×300くらいの大きさがあれば表示されることがわかりました。(13年9月11日現在) もうちょっと1ピクセル単位で出せばいいのかもしれませんが、まぁ大体わかれば満足ですよね?(僕が)

てことで、みなさん。最近タイムラインに流れてきている大きな画像を出すためには400×300以上の大きさの画像を使いましょうってことで。 また仕様変更がかかるかもしれませんが、とりあえずの対処としてはこれで十分なんではないでしょうか。 Facebookの推奨は1500×1500ですからね・・・

やっぱり売れてる本は面白かったです

フェイスブック 若き天才の野望 (5億人をつなぐソーシャルネットワークはこう生まれた)
デビッド・カークパトリック
日経BP社
売り上げランキング: 13,327
Read more

みなさんこんにちは。

FacebookのGraphAPIってやっぱ楽しいですね。 個人情報をここまで簡単に取れるAPIをいじれるのはとても楽しいですよ。

今回はPHPを使ってあるページにいいねが押してあるかどうかを判別する方法を紹介します。 簡単なことではありますが、2通りの方法を紹介します。 Continue reading GraphAPIを用いてページにいいねが押してあるか判別する方法

Read more

ついに今日から25日まで続くAdvent Calenderが始まりました。 CakePHP Advent Calender2012の1日目を担当させていただく、たがみ(@DAI199)です。

Cakeを使い始めて半年程度の新米ですが、僕の知識をみなさんに共有するために今回の記事を書きたいと思います。

CakePHPアドベントカレンダー2012本家 http://www.adventar.org/calendars/40 Twitterハッシュタグ #cakeadvent2012

普段はFacebookと連携したアプリを量産しているため、今回の記事では、CakePHPとFacebookを連携し、ちょっとしたアプリを作ってみたいと思います。 デモアプリはこちら

>>> 女の子の画像一覧を見てみる

Facebookログインの実装

それでは早速Facebookログインを実装していきましょう。 以下のURLからFacebookSDKをダウンロードします。 >>> https://github.com/facebook/facebook-php-sdk

それをインストールしたCakePHPのapp/Vendorフォルダに入れます。ここではフォルダ名は「facebook」へ変更しました。

次に「AppController.php」に以下のコードを書きます。ここでやっていることは、Facebookに接続することと、Facebookでログイン出来たことを確認するためにSessionに書き込むことです。

&lt;?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
    public $facebook;
    public $helper = array('Html', 'Form', 'Session');

    function beforeFilter(){
        App::import('Vendor', 'facebook/src/facebook');
        $this-&gt;facebook = new Facebook( array(
                        'appId' =&gt; 'APPID',
                        'secret' =&gt; 'APPSECRET',
                        'cookie' =&gt; true 
                        ));

    }

    // Facebookで接続するときにOAuthを通す
    public function authFacebook() {
        $login_url = $this-&gt;facebook-&gt;getLoginUrl(array('scope' =&gt; 'email,publish_stream,user_birthday,user_education_history,user_likes'));
        $this-&gt;redirect($login_url);
    }

    public function connectFb(){
        $fb = $this-&gt;facebook-&gt;getUser();
        if(empty($fb)){
            $this-&gt;authFacebook();
        }
        $this-&gt;Session-&gt;write('Facebook.id', $fb);
    }
}

上記のコードのAPPID,APPSECRETの部分はFacebookアプリを作成していれてください。 Facebookアプリを作成するためには以下のURLから作成します。 >>> https://developers.facebook.com/

これでFacebookログインが実装出来ました。

Graph APIを叩く

初期画面でFacebookログインボタンを表示して、クリックするとdisplayのほうへリダイレクトされます。 以下コードになります。

【Controller】 FacebookController.php

&lt;?php
class FacebookController extends AppController {
    public function index(){
        if($this-&gt;request-&gt;is('post')){
            $this-&gt;redirect(array('action'=&gt;'display'));
        }
    }

    public function display(){
        // Facebookへ接続
        $this-&gt;connectFb();
        $fb = $this-&gt;facebook-&gt;getUser();

        // Friend List を取得
        try {
            $me = $this-&gt;facebook-&gt;api('/me');
            $friend_list = $this-&gt;facebook-&gt;api(&quot;{$fb}/friends?fields=gender&quot;);
        } catch (FacebookApiException $e){
            error_log($e);
        }
        $this-&gt;set(compact('fb'));
        $this-&gt;set(compact('me'));
        $this-&gt;set(compact('friend_list'));
    }
}

Viewのほうはこんな感じに書いてみました。

【View】 index.ctp

&lt;form action=&quot;&lt;?php echo $this-&gt;Html-&gt;url(array('action'=&gt;'index'));?&gt;&quot; method=&quot;post&quot;&gt;
    &lt;button&gt;Facebookログイン&lt;/button&gt;
&lt;/form&gt;

display.ctp

&lt;h1&gt;自分の顔&lt;/h1&gt;
&lt;img src=&quot;https://graph.facebook.com/&lt;?php echo $fb;?&gt;/picture?width=150&quot; alt=&quot;&quot; /&gt;

&lt;h2&gt;異性の顔((´^ω^))&lt;/h2&gt;
&lt;?php for($i=0; $i &lt; count($friend_list['data']); $i++):?&gt;
    &lt;?php if($me['gender'] != $friend_list['data'][$i]['gender']):?&gt;
        &lt;a href=&quot;https://www.facebook.com/&lt;?php echo $friend_list['data'][$i]['id'];?&gt;&quot;&gt;
            &lt;img src=&quot;https://graph.facebook.com/&lt;?php echo $friend_list['data'][$i]['id'];?&gt;/picture?width=100&amp;height=100&quot; alt=&quot;&quot; /&gt;
        &lt;/a&gt;
    &lt;?php endif;?&gt;
&lt;?php endfor;?&gt;

以上のコードによりGraphAPIを叩くことが出来ました。 GraphAPIについては、Facebookの公式ドキュメントを読むとよいです。

女の子一覧を見てうはうは

さて、それではログインしてみましょう。 自分の友達の女の子でもうはうはです。 あ、もちろん女性の方は男性が表示されます。 女性の方が女性を見たい場合は、Viewの部分をちょちょっといじると出来ますよ。

デモはこちら >>> 女の子一覧を見てうはうは

最後に

すごい簡単なアプリですが、Facebookを使ったアプリを作ったことがない人にとっては新鮮なのではないでしょうか。 これをもう少し改良すれば異性を解析するアプリを作ったり本格的なアプリも出来そうですね。

初めてのAdventCalenderで緊張していますが、わかりにくいこと、間違っているとこ、こうしたほうがいいよ!ってとこがあればぜひコメントを残してくださるとありがたいです。

CakePHP AdventCalender2012 2日目の担当は、@fukayatsuさんです。よろしくお願いします!!

Read more