| ブログトップ | API関連 | JavaScript関連 | PHP関連 | SNS関連 |

レーティング機能と「いいね!」を連動させる【Facebook】:STEP3

この記事は1年以上前の記事のため、内容が古い可能性があります。

この記事は、『レーティング機能と「いいね!」を連動させる【Facebook】:STEP2』の続きの記事です。

 

3. 「いいね!」と「だめだね!」ボタンを設置。

 

■3-1. 「いいね!」ボタンのコードを取得する

 

こちらのサイトから「いいね!」ボタンのコードを取得してください。

このとき注意しなくてなならないのは、「XFBML」形式で取得する必要があるということです。「iframe」形式では正常に動作しませんのでご注意ください。

 

■3-2. 「いいね!」ボタンの設置と、それを監視するスクリプトの追加

 

STEP2の「2-2. Ajax Requestを用いて上記のプログラム(rating_save.php)を呼び出す」で作成したサンプルコードに手を加えます。

なお、「いいね!」ボタンを監視するスクリプトは、こちらのサイトを参考にさせていただきました。

Facebookのいいねボタンを押した時に自分で用意したjsのメソッドを呼び出す jsdo.it Share JavaScript, HTML5 and CSS

サンプルコード(step3.php)

001<?php
002session_start();
003 
004$fb_app_id = "App IDをここに入力";
005$fb_app_secret = "App Secretをここに入力";
006 
007//現在開いているページのURL
008$fb_my_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
009$fb_my_url_split = explode("?", $fb_my_url);
010$fb_my_url = $fb_my_url_split[0];
011 
012$fb_code = $_GET["code"];
013$fb_user_id = $_SESSION["fb_user_id"];
014 
015if(empty($fb_code) && empty($fb_user_id)) {
016    $fb_get_userdata = "0";
017}elseif(!empty($fb_user_id)){
018    $fb_get_userdata = "1";
019}elseif(!empty($fb_code)){
020                 
021    // Facebook側からトークンを取得
022    $fb_token_url = "https://graph.facebook.com/oauth/access_token?"
023        ."client_id=".$fb_app_id
024        ."&redirect_uri=".urlencode($fb_my_url)
025        ."&client_secret=".$fb_app_secret
026        ."&code=".$fb_code;
027    $fb_access_token = file_get_contents($fb_token_url);
028                     
029    // トークンを使用して、graph APIから名前を取得
030    $fb_graph_url = "https://graph.facebook.com/me?".$fb_access_token;
031    $fb_user = json_decode(file_get_contents($fb_graph_url));
032                 
033    if(empty($fb_user)){
034        $fb_get_userdata = "0";
035    }else{
036        $fb_get_userdata = "1";
037        $fb_user_id = $fb_user->id;
038        $_SESSION["fb_user_id"] = $fb_user_id;
039    }  
040}
041 
042 
043//これまでのレーティングデータを取得する
044$fb_count_vote = 0;
045$fb_like_vote = 0;
046if(file_exists("csv/rating.csv")){
047    $fp = fopen("csv/rating.csv", "r");
048    while ($data = fgets($fp)) {
049        $data = rtrim($data);
050        $data_split = explode(",", $data);
051        if($data_split[1] == $fb_my_url){
052            $fb_count_vote++;
053            if($data_split[2] == "1"){
054                $fb_like_vote++;
055            }
056        }
057    }
058    fclose($fp);
059}
060 
061?>
062 
063<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
064<html xmlns="http://www.w3.org/1999/xhtml">
065<head>
066    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
067    <title>レーティング機能と「いいね!」を連動させる【Facebook】</title>
068     
069    <script type="text/javascript" src="js/jquery.min.js"></script>
070     
071    <script type="text/javascript">
072     
073        if (window.attachEvent) { //IE用
074            window.attachEvent("onload", watchRating);
075        }else{
076            window.addEventListener("load", watchRating, false);
077        }
078         
079        function watchRating(){
080            if($("#rating_button") != ""){
081                timerID = setInterval(function () {
082                    if ($('.fb_edge_comment_widget.fb_iframe_widget:visible').length) {
083                        ratingSave('1');
084                    clearInterval(timerID);
085                    };
086                }, 200);
087            }
088        }
089     
090        function ratingSave(select_vote){
091            var php_url = "rating_save.php";
092            var fb_my_url = "<?php echo $fb_my_url; ?>";
093            var fb_user_id = "<?php echo $fb_user_id; ?>";
094                     
095            if(select_vote == "1"){
096                $('#rating_button').html("「いいね!」に投票されました。");
097            }else if(select_vote == "0"){
098                $('#rating_button').html("「だめだね!」に投票されました。");
099            }
100                     
101            $.post(
102                php_url,
103                {"select_vote":select_vote, "fb_my_url":fb_my_url, "fb_user_id":fb_user_id},
104                function(message, status) {
105                    if ('error' != status){
106                        message_split = message.split("/");
107                        $('#like_vote_id').html(message_split[0]);
108                        $('#count_vote_id').html(message_split[1]);
109                    }
110                   },
111                "html"
112            );
113        }
114    </script>
115     
116</head>
117 
118<body>
119 
120    <?php
121    //ユーザ基本データが取得できた場合。
122    if($fb_get_userdata == "1"):
123    ?>
124     
125    <div id="rating_button">
126        <p>以下のリンクをどちらかクリックしてください。(※いいね!を押すとFacebookに反映されます。)</p>
127         
128        <div id="fb-root"></div>
129        <script src="http://connect.facebook.net/ja_JP/all.js#appId=225227424196030&amp;xfbml=1"></script>
130        <fb:like href="<?php echo $fb_my_url; ?>" send="false" layout="button_count" width="100" show_faces="false" font=""></fb:like>
131         
132        <a href="javascript:void(0);" onclick="ratingSave('0')">だめだね!</a>
133         
134    </div>
135     
136    <?php
137    //取得できなかった場合。
138    else:
139        //アプリ許可用のURL
140        $fb_dialog_url = "http://www.facebook.com/dialog/oauth?"
141        ."client_id=".$fb_app_id
142        ."&redirect_uri=".urlencode($fb_my_url);
143    ?>
144     
145    <p>レーティングに参加するにはFacebookのアカウントが必要です。<br />
146    またFacebook用アプリの「(アプリ名)」を許可する必要があります。</p>
147    <p style="margin:5px 0px;"><a href="http://www.facebook.com/index.php" target="_blank">Facebookアカウントを取得する</a> | <a href="<?php echo $fb_dialog_url; ?>">アプリを許可する</a></p>
148     
149    <?php endif; ?>
150     
151    <p><span id="count_vote_id"><?php echo $fb_count_vote; ?></span>人中、<span id="like_vote_id"><?php echo $fb_like_vote; ?></span>人がいいね!と言っています。</p>
152     
153</body>
154</html>

■追加部分

72~87行目:いいね!ボタンに変化がないかを監視。ボタンが押されたら、ratingSaveを実行。

127~129行目:3-1で取得した「いいね!」ボタンを貼り付ける。fb:likeタグのhrefには、開いているページのURLが入るようにする。

131行目の「だめだね!」ボタンはSTEP2から変更する必要はありません。

※今度のサンプルコードの実行例はFacebookに反映されるのでご注意ください。

※この段階では、まだ「だめだね!」ボタンが無限に押せてしまいます。

サンプルコードの実行例

 

STEP1へSTEP2へ|STEP3へ|STEP4へ

日々の生活にhappyをプラスする|ハピタス

LINEで送る

トラックバック

トラックバックURL

トラックバック一覧

[...] < レーティング機能と「いいね!」を連動させる【Facebook】:STEP1 | ブログトップ | API関連 | JavaScript関連 | PHP関連 | レーティング機能と「いいね!」を連動させる【Facebook】:STEP3 > [...]

[...] < レーティング機能と「いいね!」を連動させる【Facebook】:STEP3 | ブログトップ | API関連 | JavaScript関連 | PHP関連 | [...]

[...] STEP1|STEP2|STEP3|STEP4 [...]

コメントする

※メールアドレスが公開されることはありません。

名前 *
メール*
URL
Copyright(c) 2010 - 2025 ダリの雑記