スズムシのSE語録 -32ページ目

スズムシのSE語録

滋賀でシステム開発を行うWINDURSTの代表、スズムシです

代表はヲタクでございますw

滋賀の長浜・米原・湖北を拠点としている、windurstです!

基本から学ぶ Faceebookアプリの作り方 ~いよいよアプリを作る その2~

今回は、アプリ自体のプログラムソースの説明です!
今回のアプリは、phpという言語を用いて作っています

php自体はさほど難しい言語ではありませんが、主に画面に表示するだけが「仕事」の様な物なので、動きなどはjavascriptで作り込んでいきます。

プログラムは・・・
赤い文字⇒php
黒い文字
javascript
青い文字
⇒Html

としてあります。

また、緑の文字はアプリ毎に変更せねばならない部分です
※//から始まる部分はコメントです


では実際のプログラムです。



<?php

    // 初期処理
    mb_internal_encoding("UTF-8");

    // アプリURL(Canvas Pageに変更)
    $APURL = "https://apps.facebook.com/アプリIDに変更";

    // FacebookSDKの読み込み
    require_once ('../lib/facebook/facebook.php');

    // appIDとsecretを指定
    $facebook = new Facebook(array('appId' => 'App IDに変更',
                       'secret' => 'App Secretに変更'));

    // アプリ実行ユーザー取得
    $user = $facebook->getUser();

    // Facebookアプリを既に認証しているかのチェック
    if ($user) {

        // ユーザー情報が取得出来れば認証済みとなる
        try {

            //Facebookページへの「いいね!」が取得出来ているかを調べる
            $likes = $facebook->api('/me/likes/いいね!してほしいFacebookページの番号');

            if (!empty($likes['data'])){
                //いいね! を押している人に表示する画像
                $HtmlContent = "<img src='./img/thxiine.png'  style='position: absolute; top: 350px;'>";

            } else {

                //いいね! を押していない人に表示する画像(いいね!リンク付)
                $HtmlContent = "<img src='./img/noiine.png'  style='position: absolute; top: 350px;'>";

            }
          } catch (FacebookApiException $e) {
            // エラー表示後に終了
            if (1) {
                  echo $e;
                exit;
            }
            error_log($e);
            $user = null;
        }
    } else {

        // アプリを初めて使用するので、認証画面を表示

        // 権限許可用のパーミッションを作成
        $permis = "";
        if (1) {
            // ユーザーの「いいね!」を取得出来る権限を指定
            $permis  = "user_likes";
        }

        //認証画面用URL作成
        $url = $facebook->getLoginUrl(array('scope' => $permis));

        // アプリ初使用ユーザーなら facebook の認証ページへ遷移
        echo "<script type='text/javascript'>top.location.href = '$url';</script>";
        exit;
    }

    // Facebookとアプリ間の情報を取得
    $signe = $facebook->getSignedRequest();

    // もしFacebook外で呼ばれていたらFacebookのURLへ移動
    if (!$signe["oauth_token"]) {
        echo "<script type='text/javascript'>top.location.href = '$APURL';</script>";
        exit;
    }

?>
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>基礎から学ぶFacebookアプリ</title>
    <style type="text/css">
    <!--
        .container {
            background: url('./img/top.jpg') no-repeat;
            width:900px;
            Height:800px;
        }
       .body {
            width:810px;
              }
    -->
    </style>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

</head>
<body>
<div id="fb-root"></div>

  <script>
window.fbAsyncInit = function() {       
        FB.Event.subscribe('edge.create', // いいねが押されたら実行する       
            function() {
            // いいね後に実行したい処理として、
Canvas PageのURLにリダイレクト
                location.href="
Canvas PageのURL";
            }
        );
        FB.Event.subscribe('edge.remove', // いいねが押されたら実行する       
            function() {
            // いいね後に実行したい処理
として、Canvas PageのURLにリダイレクト                location.href="
Canvas PageのURL";
            }
        );
    };
  </script>

    <div class="container">
        <div class="fb-like" data-href="https://www.facebook.com/pages/Windurst/313249438731521" data-layout="box_count" data-action="like" data-show-faces="false" data-share="false" style="position: absolute; top: 600px; left: 500px;"></div>
           <?php
                echo  "$HtmlContent";
            ?>
    </div>

</body>
<script>
(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/ja_JP/sdk.js#xfbml=1&appId=
App IDに変更&version=v2.0";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

</script>
</html>

難しそうに見えますか?

少しずつ見て行きましょう

まずは最初の部分、ここら辺は固定の様な物です。
緑の部分だけに注意してプログラミングすれば問題ありません。

<?php
    // 初期処理
    mb_internal_encoding("UTF-8");

    // アプリURL(Canvas Pageに変更)
    $APURL = "https://apps.facebook.com/アプリIDに変更";

    // FacebookSDKの読み込み
    require_once ('../lib/facebook/facebook.php');

    // appIDとsecretを指定
    $facebook = new Facebook(array('appId' => 'App IDに変更',
                       'secret' => 'App Secretに変更'));

    // アプリ実行ユーザー取得
    $user = $facebook->getUser();

次に、ここ・・・
    // Facebookアプリを既に認証しているかのチェック
    if ($user) {

ここは、アプリを動かすユーザーの情報を取得しています。
ユーザー情報が取得出来れば「既にアプリを使った事がる」と言う事になります。


以下の行は、
「既にアプリを使った事がる」ユーザー用の処理です。

        // ユーザー情報が取得出来れば認証済みとなる
        try {

            //Facebookページへの「いいね!」が取得出来ているかを調べる
            $likes = $facebook->api('/me/likes/いいね!してほしいFacebookページの番号');

            if (!empty($likes['data'])){
                //いいね! を押している人に表示する画像
                $HtmlContent = "<img src='./img/thxiine.png'  style='position: absolute; top: 350px;'>";

            } else {

                //いいね! を押していない人に表示する画像(いいね!リンク付)
                $HtmlContent = "<img src='./img/noiine.png'  style='position: absolute; top: 350px;'>";

            }

はい、ここまでの処理
こまでの処理は、指定されたFacebookページに対して、アプリを動かしているユーザーが「いいいね!」しているかどうかをチェックしています。
「いいね!」を押しているユーザーには、「いいねありがとう!」の画像を表示します。
「いいね!」を押していないユーザーには、「いいねおしてね!」の画像を表示します。

この下からの行は、ユーザー情報が取れなかった場合のエラー処理です。
まぁ・・・ 一旦はこのままで良いと思います

          } catch (FacebookApiException $e) {
            // エラー表示後に終了
            if (1) {
                  echo $e;
                exit;
            }
            error_log($e);
            $user = null;
        }
    } else {

さて、この次からの処理が極めて重要です。
今年の5月で変更になった「要素」が盛り込まれています。

その「重要な要素」はいきなり出てきます

        // アプリを初めて使用するので、認証画面を表示
        // 権限許可用のパーミッションを作成
        $permis = "";
        if (1) {
            // ユーザーの「いいね!」を取得出来る権限を指定
            $permis  = "user_likes";
        }

        //認証画面用URL作成
        $url = $facebook->getLoginUrl(array('scope' => $permis));

        // アプリ初使用ユーザーなら facebook の認証ページへ遷移
        echo "<script type='text/javascript'>top.location.href = '$url';</script>";
        exit;
    }


はい! ここまでが「重要な要素」です!!!

今までのFacebookアプリは、ほぼ全ての個人情報がいとも容易く取得出来ました。
この状況は、「スパムアプリ」を多発させる大きな要因となりました。

この状況を「重く見た」Facebookは、ユーザーの個人情報をアプリが取得する場合
「アプリ毎申請出しなさい!」と運用を変えたのです。

今回のアプリは、ユーザーの「いいね!」情報を使います。
「何故アプリで『いいね!』の情報が必要なのか、英文で提出」せねばなりません。

前回の回で 
何も知らないと、こんな画面に悩まされます・・・と書いた画面

!マークの所

「このアプリ、申請出してないユーザー情報を使おうとしてて、問題あるんですけどー!」
と言っています。

この状態では、このアプリは正しく動きません。
※実際の申請の出し方は次回で・・・

この下からは、一旦このままで良いと思います

    // Facebookとアプリ間の情報を取得

    $signe = $facebook->getSignedRequest();

    // もしFacebook外で呼ばれていたらFacebookのURLへ移動
    if (!$signe["oauth_token"]) {
        echo "<script type='text/javascript'>top.location.href = '$APURL';</script>";
        exit;
    }

?>

ここまでがメインとなるプログラムです
この下からは、画面の表示と制御になります。

特に重要な所だけをかいつまんでご説明しましょう。

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>基礎から学ぶFacebookアプリ</title>
    <style type="text/css">
    <!--
        .container {
            background: url('./img/top.jpg') no-repeat;
            width:900px;
            Height:800px;
        }
       .body {
            width:810px;
              }
    -->
    </style>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

</head>
<body>
<div id="fb-root"></div>

はいここから下が重要です!
この下のjavascriptは、「いいね!」ボタンが押された時に動く処理です。
「いいね!」が押されると、
edge.createの処理が動きます。

また、
「いいね!」が取り消された場合は、
edge.removeの処理が動きます。
いいね!が押されたら、「いいねありがとう」のページへ飛ばしたり、「いいね!が取り消された場合」はいいね!を催促するページに飛ばしたりなどいう処理を入れて行きます。

ここの部分は、いいね!ボタンの状況に応じて動きを変える大事な所となります。


  <script>
window.fbAsyncInit = function() {       
        FB.Event.subscribe('edge.create', // いいねが押されたら実行する       
            function() {
            // いいね後に実行したい処理として、
Canvas PageのURLにリダイレクト
                location.href="
Canvas PageのURL";
            }
        );
        FB.Event.subscribe('edge.remove', // いいねが押されたら実行する       
            function() {
            // いいね後に実行したい処理
として、Canvas PageのURLにリダイレクト                location.href="
Canvas PageのURL";
            }
        );
    };
  </script>

あとは画面の表示ですね

    <div class="container">
        <div class="fb-like" data-href="https://www.facebook.com/pages/Windurst/313249438731521"  data-layout="box_count" data-action="like" data-show-faces="false" data-share="false" style="position: absolute; top: 600px; left: 500px;"></div>

ここで、「いいね、してる」と「いいね、してない」の画像を表示させています。

           <?php
                echo  "$HtmlContent";
            ?>

後の残りは、このままで問題ないと思います。

    </div>
</body>
<script>
(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/ja_JP/sdk.js#xfbml=1&appId=
App IDに変更&version=v2.0";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

</script>
</html>

いかがでしたか?

初めての方には「難解」だと思いますが、一つ一つゆっくり読み解いていけば「理解」出来ると思います。
phpに関しては、さほど難しい言語ではありません、少しの勉強で誰にでも理解できる簡単な物です。
「プログラムの組み方」みたいな本があると良いかもしれませんね。

おそらく技術的に障害になるなら、javascriptではないでしょうか?
ではでは、次回もお楽しみに!!

いきなりはじめるPHP~ワクワク・ドキドキの入門教室~

新品価格
¥1,944から
(2014/6/25 22:12時点)



独習JavaScript 第2版

新品価格
¥3,024から
(2014/6/25 22:16時点)