API関連

Facebookページにある"特定の"アルバムの写真をPHPで取得する方法

Facebookページを見ると、左のメニューに「写真」という項目があるページをよく見かけます。

その名の通り、アルバムごとに写真をアップし、公開することができるわけですが、このアルバムの写真情報をPHPで取得することができます。

必要なのはPHP5.2以上が動作するサーバ環境(json_decodeがいるので)と、そのアルバムのID情報です。

ためしにFacebook Japanの公式Facebookページにある、アルバム「Facebookスポット」の写真情報を取得し、写真を一覧表示します。

まずアルバムIDですが、「Facebookスポット」アルバムページのURLをご覧ください。

http://www.facebook.com/media/set/?set=a.428510844023.214836.365989369023&type=3

というURLになっています。

いくつか数字の羅列が並んでいますが、必要なのは「a.」から次の「.」までの数字。

つまり「428510844023」です。

これを以下のサンプルプログラムの中にある「$album_id」変数に代入します。


$album_id = '428510844023';	//アルバムID
$thumb_size_set = 3;	//サムネイルのサイズ
$limit=0;	//取得したい最大枚数(0とするとデフォルト設定の25枚)

$url = "http://graph.facebook.com/".$album_id."/photos/?limit=".$limit;
$res = file_get_contents($url);
$data_array = json_decode($res, TRUE);

if(!empty($data_array["data"])){
	foreach($data_array["data"] as $values){

		$thumb_size_count = count($values["images"]);
		for($i=$thumb_size_set; $i > 0; $i--){
			if($thumb_size_count > $i){
				$thumb_size = $thumb_size_count - $i;
				break;
			}
		}

		$photo_name = $values["name"];
		$photo_link = $values["link"];
		$photo_thumb_path = $values["images"][$thumb_size]["source"];
		$photo_thumb_width = $values["images"][$thumb_size]["width"];
		$photo_thumb_height = $values["images"][$thumb_size]["height"];

		echo '<p><a href="'.$photo_link.'"><img src="'.$photo_thumb_path.'" width="'.$photo_thumb_width.'" height="'.$photo_thumb_height.'" alt="'.$photo_name.'" /></a></p>';
	}
}

サンプルを実行する

もちろん閲覧者がFacebookにログインする必要はありません。

非常に簡単ですね。

※枚数が多くなると重くなるので、キャッシュを取るなどの対策をすることをお勧めします。

 

参考にさせていただいたサイト

facebookのアルバム写真をJSONで取得して表示する with jQuery | Benjamin

nandani | 2011年12月14日 | コメント(4) | トラックバック(1) | API関連 | PHP関連

マップ表示用スクリプトをバージョンアップしました[バージョン1.4b3]

マップ表示用スクリプト(GoogleマップAPI v3で地図とマーカー・バルーンを表示するスクリプト)をバージョンアップ(version1.4b3)しました。(ダウンロードはこちら

version1.4b2からの変更点は内部処理のみなので、差し替えるだけで動作します。

■使い方はこちら:マーカー個別版マーカー複数板

■主な変更箇所

Internet Explorer7 or 8において、特定の件数を超えるとスクリプトエラーが出てしまう問題を解決しました。

 

■バグの詳細

ループで回している中にjquery関数の$()があったのですが、(↓思いっきり適当に書くとこんな感じ)

for(var i=0; i<x; i++){
var data = $("#hoge")[i];
}

Internet Explorer7 or 8において、特定の件数を超えると、なぜか$()がスクリプトエラーとなってしまいました。

解決方法は、$()をループの外で一度変数に入れるようにしました。

var hoge = $("#hoge")[i];
for(var i=0; i<x; i++){
var data = hoge[i];
}

jquery関数を使う時は注意しよっと。

Google+1(プラスワン)ボタンを設置する

プラスワン ボタン」のサイトにアクセスし、出力されたコードを貼り付けるだけ。

URLやページのタイトルを設定する必要は特になし。

設定する必要があるのはボタンのサイズと言語だけ。

簡単ですね。

ただし、個別ページにボタンを設置する場合なら上記の方法でOKですが、カテゴリーページや月別ページのような複数の記事で構成されているページでも各記事にボタンを設置する場合は、それぞれのボタンに該当記事のURLを設定する必要があります。

上記のサイトにて、「詳細オプション」をクリックしてください。

URLを設定するフィールドが表示されます。

URLを設定すると、コードが以下のように変わります。


<!-- 次のタグを head 要素内または body 終了タグの直前に貼り付けてください -->
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{lang: 'ja'}
</script>

<!-- 次のタグを +1 ボタンを表示する箇所に貼り付けてください -->
<g:plusone href="https://nandani.sakura.ne.jp/"></g:plusone>

 

上の


<!-- 次のタグを head 要素内または body 終了タグの直前に貼り付けてください -->
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{lang: 'ja'}
</script>

部分は書いてある通り、head要素内に張り付けてしてください。(うっかりループ内に放り込むとボタンが1つしか表示されなくなります。)

 

下のg:plusoneタグについては、URLが該当ページのURLになるよう修正し、設置したい場所に張り付けてください。

WordPressなら


<!-- 次のタグを +1 ボタンを表示する箇所に貼り付けてください -->
<g:plusone href="<?php the_permalink(); ?>"></g:plusone>

って感じですね。

 

なお、自分のサイトをウェブマスターツールに登録していると、ウェブマスターツールサイトにて「+1統計情報」が確認できます。

設置したてで、ペッタンコ状態ですが^^;

ウェブマスターツールの登録方法については、こちらのサイトが参考になります。

第2回 簡単すぎる!ウェブマスターツールの設定 | Think IT

 

自分が押した+1(プラスワン)を確認したい場合は、「Google Profiles」にアクセスしてください。

プロフィール画面にて画面上部にある「+1」をクリックすると、自分の+1(プラスワン)が一覧表示されます。

取り消す場合は一覧右側にある×をクリックすれば、プラスワンを取り消せます。

nandani | 2011年09月08日 | コメント(0) | トラックバック(0) | API関連 | SNS関連

OGP情報のキャッシュ削除

メモ。

OGPを設定したあと、「いいね!」ボタンを押したりして確認すると、なぜか設定が反映されていない場合があります。

これはキャッシュのせいなので、ほっといたら反映されるようになりますが、できればすぐに確認したい!

そんな時は、Debugger(旧URLリンター)なるツールを使って、OGPの設定を確認するついでにキャッシュを消しましょう。

 

■参考にさせていただいたサイト

nandani | 2011年09月06日 | コメント(0) | トラックバック(0) | API関連 | SNS関連

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

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

 

すでにボタンが押されている場合はボタンを押せなくするプログラムを作成。

STEP3の「3-2. 「いいね!」ボタンの設置と、それを監視するスクリプトの追加」で作成したサンプルコードに手を加えます。

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


<?php
session_start();

$fb_app_id = "App IDをここに入力";
$fb_app_secret = "App Secretをここに入力";

//現在開いているページのURL
$fb_my_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];	
$fb_my_url_split = explode("?", $fb_my_url);
$fb_my_url = $fb_my_url_split[0];

$fb_code = $_GET["code"];
$fb_user_id = $_SESSION["fb_user_id"];

if(empty($fb_code) && empty($fb_user_id)) {
	$fb_get_userdata = "0";
}elseif(!empty($fb_user_id)){
	$fb_get_userdata = "1";
}elseif(!empty($fb_code)){
				
	// Facebook側からトークンを取得
	$fb_token_url = "https://graph.facebook.com/oauth/access_token?"
		."client_id=".$fb_app_id
		."&redirect_uri=".urlencode($fb_my_url)
		."&client_secret=".$fb_app_secret
		."&code=".$fb_code;
	$fb_access_token = file_get_contents($fb_token_url);
					
	// トークンを使用して、graph APIから名前を取得
	$fb_graph_url = "https://graph.facebook.com/me?".$fb_access_token;
	$fb_user = json_decode(file_get_contents($fb_graph_url));
				
	if(empty($fb_user)){
		$fb_get_userdata = "0";
	}else{
		$fb_get_userdata = "1";
		$fb_user_id = $fb_user->id;
		$_SESSION["fb_user_id"] = $fb_user_id;
	}	
}


//これまでのレーティングデータを取得する
$fb_checked_vote = "";
$fb_count_vote = 0;
$fb_like_vote = 0;
$fb_checked_flag = 0;
if(file_exists("csv/rating.csv")){
	$fp = fopen("csv/rating.csv", "r");
	while ($data = fgets($fp)) {
		$data = rtrim($data);
		$data_split = explode(",", $data);
		if($data_split[1] == $fb_my_url){
			$fb_count_vote++;
			if($data_split[2] == "1"){
				$fb_like_vote++;
			}
			
			if($data_split[0] == $fb_user_id){
				if($data_split[2] == "1"){
					$fb_checked_vote = "いいね!";
				}else{
					$fb_checked_vote = "だめだね!";
				}
			}
		}
	}
	fclose($fp);
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>レーティング機能と「いいね!」を連動させる【Facebook】</title>
	
	<script type="text/javascript" src="js/jquery.min.js"></script>
	
	<script type="text/javascript">
	
		if (window.attachEvent) { //IE用
		    window.attachEvent("onload", watchRating);
		}else{
		    window.addEventListener("load", watchRating, false);
		}
		
		function watchRating(){
			if($("#rating_button") != ""){
				timerID = setInterval(function () {
				    if ($('.fb_edge_comment_widget.fb_iframe_widget:visible').length) {
				    	ratingSave('1');
						clearInterval(timerID);
				    };
				}, 200);
			}
		}
	
		function ratingSave(select_vote){
			var php_url = "rating_save.php";
			var fb_my_url = "<?php echo $fb_my_url; ?>";
			var fb_user_id = "<?php echo $fb_user_id; ?>";
					
			if(select_vote == "1"){
				$('#rating_button').html("「いいね!」に投票されました。");
			}else if(select_vote == "0"){
				$('#rating_button').html("「だめだね!」に投票されました。");
			}
					
			$.post(
				php_url, 
				{"select_vote":select_vote, "fb_my_url":fb_my_url, "fb_user_id":fb_user_id}, 
				function(message, status) {
					if ('error' != status){
						message_split = message.split("/");
						$('#like_vote_id').html(message_split[0]);
						$('#count_vote_id').html(message_split[1]);
					}
				   },
				"html"
			);
		}
	</script>
	
</head>

<body>

	<?php
	//ユーザ基本データが取得できた場合。
	if($fb_get_userdata == "1"):
	
		//まだボタンが押されていない場合
		if(empty($fb_checked_vote)):
	?>
	
	<div id="rating_button">
		<p>以下のリンクをどちらかクリックしてください。(<b>※いいね!を押すとFacebookに反映されます。</b>)</p>
		<p><div id="fb-root"></div>
		<script src="http://connect.facebook.net/ja_JP/all.js#appId=225227424196030&amp;xfbml=1"></script>
		<fb:like href="<?php echo $fb_my_url; ?>" send="false" layout="button_count" width="100" show_faces="false" font=""></fb:like> 
		<a href="javascript:void(0);" onclick="ratingSave('0')">だめだね!</a></p>
	</div>
	
	<?php 
		//すでにボタンが押されている場合
		else: 
	?>
	
	<div>
		<?php echo $fb_checked_vote; ?>に投票済みです。
	</div>
	
	<?php endif; ?>
	
	<?php
	//取得できなかった場合。
	else:
		//アプリ許可用のURL
		$fb_dialog_url = "http://www.facebook.com/dialog/oauth?"
		."client_id=".$fb_app_id
		."&redirect_uri=".urlencode($fb_my_url);
	?>
	
	<p>レーティングに参加するにはFacebookのアカウントが必要です。<br />
	またFacebook用アプリの「(アプリ名)」を許可する必要があります。</p>
	<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>
	
	<?php endif; ?>
	
	<p><span id="count_vote_id"><?php echo $fb_count_vote; ?></span>人中、<span id="like_vote_id"><?php echo $fb_like_vote; ?></span>人がいいね!と言っています。</p>
	
</body>
</html>

■変更部分

58~64行目:csvデータ取得中にて、FacebookIDとページのURLが一致したものがあれば、どのボタンを押したかを取得する。

133~154行目:ボタンを押したデータがcsvから取得できなければ、ボタンを表示。できればボタンを非表示にし、どのボタンを押したかを表示する。

サンプルコードの実行例

 

以上です。

 

すべて読まれた方はおつかれさまでした^^
長くなってすみません。

 

■追記補足

今回のサンプルでは、レーティングの数字において、ボタンを押したユーザの合計数も「いいね!」の合計数もこちら側が保持しているcsvデータを元に計算しています。

しかしFacebookをお使いの方はご存知かと思いますが、「いいね!」というのはFacebookにて取り消すことが出来ます。

ということはFacebookが保持している「いいね!」が押された回数と、csvデータから算出した数には誤差が起こりえますが、ここではあえてcsvデータの数字を使うことにしました。

もしFacebookが保持している「いいね!」の数を取得したい場合はFQLでデータ取得し、ボタンを押したユーザの合計数などを計算してください。
FQLでのデータ取得方法はこちらのページをご参照ください。

 

このサンプルでは、すでにボタンが押されているかどうかを、FacebookIDから判断させるプログラムにしましたが、STEP1にも書いたとおり、他にも色々と手段はあります。
Facebookアプリを許可させるのが煩わしい場合は、メールアドレスなどを入力させるなどの方法でも大丈夫かと思います。

また、csvでデータを管理する方法も、データベースが使えるサーバの場合はそちらで管理するほうが何かと便利かと思います。
csvでも構わないという場合は、データ管理だけにはご注意ください(csvファイルにアクセスできないよう制限をかけておくなど)。

 

最後にSTEP1~STEP4までに記述したサンプルコードをアップしました。
今更ではありますが「ブログじゃ読みづらい!」って方はこちらからダウンロードしてください。

サンプルダウンロードページへ

 

STEP1へSTEP2へSTEP3へ|STEP4へ

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

この記事は、『レーティング機能と「いいね!」を連動させる【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)


<?php
session_start();

$fb_app_id = "App IDをここに入力";
$fb_app_secret = "App Secretをここに入力";

//現在開いているページのURL
$fb_my_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$fb_my_url_split = explode("?", $fb_my_url);
$fb_my_url = $fb_my_url_split[0];

$fb_code = $_GET["code"];
$fb_user_id = $_SESSION["fb_user_id"];

if(empty($fb_code) && empty($fb_user_id)) {
	$fb_get_userdata = "0";
}elseif(!empty($fb_user_id)){
	$fb_get_userdata = "1";
}elseif(!empty($fb_code)){
				
	// Facebook側からトークンを取得
	$fb_token_url = "https://graph.facebook.com/oauth/access_token?"
		."client_id=".$fb_app_id
		."&redirect_uri=".urlencode($fb_my_url)
		."&client_secret=".$fb_app_secret
		."&code=".$fb_code;
	$fb_access_token = file_get_contents($fb_token_url);
					
	// トークンを使用して、graph APIから名前を取得
	$fb_graph_url = "https://graph.facebook.com/me?".$fb_access_token;
	$fb_user = json_decode(file_get_contents($fb_graph_url));
				
	if(empty($fb_user)){
		$fb_get_userdata = "0";
	}else{
		$fb_get_userdata = "1";
		$fb_user_id = $fb_user->id;
		$_SESSION["fb_user_id"] = $fb_user_id;
	}	
}


//これまでのレーティングデータを取得する
$fb_count_vote = 0;
$fb_like_vote = 0;
if(file_exists("csv/rating.csv")){
	$fp = fopen("csv/rating.csv", "r");
	while ($data = fgets($fp)) {
		$data = rtrim($data);
		$data_split = explode(",", $data);
		if($data_split[1] == $fb_my_url){
			$fb_count_vote++;
			if($data_split[2] == "1"){
				$fb_like_vote++;
			}
		}
	}
	fclose($fp);
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>レーティング機能と「いいね!」を連動させる【Facebook】</title>
	
	<script type="text/javascript" src="js/jquery.min.js"></script>
	
	<script type="text/javascript">
	
		if (window.attachEvent) { //IE用
		    window.attachEvent("onload", watchRating);
		}else{
		    window.addEventListener("load", watchRating, false);
		}
		
		function watchRating(){
			if($("#rating_button") != ""){
				timerID = setInterval(function () {
				    if ($('.fb_edge_comment_widget.fb_iframe_widget:visible').length) {
				    	ratingSave('1');
					clearInterval(timerID);
				    };
				}, 200);
			}
		}
	
		function ratingSave(select_vote){
			var php_url = "rating_save.php";
			var fb_my_url = "<?php echo $fb_my_url; ?>";
			var fb_user_id = "<?php echo $fb_user_id; ?>";
					
			if(select_vote == "1"){
				$('#rating_button').html("「いいね!」に投票されました。");
			}else if(select_vote == "0"){
				$('#rating_button').html("「だめだね!」に投票されました。");
			}
					
			$.post(
				php_url, 
				{"select_vote":select_vote, "fb_my_url":fb_my_url, "fb_user_id":fb_user_id}, 
				function(message, status) {
					if ('error' != status){
						message_split = message.split("/");
						$('#like_vote_id').html(message_split[0]);
						$('#count_vote_id').html(message_split[1]);
					}
				   },
				"html"
			);
		}
	</script>
	
</head>

<body>

	<?php
	//ユーザ基本データが取得できた場合。
	if($fb_get_userdata == "1"):
	?>
	
	<div id="rating_button">
		<p>以下のリンクをどちらかクリックしてください。(※いいね!を押すとFacebookに反映されます。)</p>
		
		<div id="fb-root"></div>
		<script src="http://connect.facebook.net/ja_JP/all.js#appId=225227424196030&amp;xfbml=1"></script>
		<fb:like href="<?php echo $fb_my_url; ?>" send="false" layout="button_count" width="100" show_faces="false" font=""></fb:like> 
		
		<a href="javascript:void(0);" onclick="ratingSave('0')">だめだね!</a>
		
	</div>
	
	<?php
	//取得できなかった場合。
	else:
		//アプリ許可用のURL
		$fb_dialog_url = "http://www.facebook.com/dialog/oauth?"
		."client_id=".$fb_app_id
		."&redirect_uri=".urlencode($fb_my_url);
	?>
	
	<p>レーティングに参加するにはFacebookのアカウントが必要です。<br />
	またFacebook用アプリの「(アプリ名)」を許可する必要があります。</p>
	<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>
	
	<?php endif; ?>
	
	<p><span id="count_vote_id"><?php echo $fb_count_vote; ?></span>人中、<span id="like_vote_id"><?php echo $fb_like_vote; ?></span>人がいいね!と言っています。</p>
	
</body>
</html>

■追加部分

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

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

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

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

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

サンプルコードの実行例

 

STEP1へSTEP2へ|STEP3へ|STEP4へ

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

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

STEP2からjqueryを使用しますので、あらかじめこちらのサイトからダウンロードを行ってください

 

2. 「いいね!」「だめだね!」ボタンが押されたとき、そのデータをcsv形式で保存するプログラムを作成。

ボタンが押された際、csv形式でデータを保存するプログラムを作成します。
保存するデータは

  • ボタンを押したユーザのFacebookID
  • ページのURL
  • 「いいね!」「だめだね!」のどちらのボタンを押したか

です。

(さらに…)

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

ここで言うレーティング機能とは

「80人中、60人がいいね!と言っています。」

という機能の事を指します。

 

独自でこのレーティング機能を作る上で、「いいね!」ボタンを連動させるには、

  • 「いいね!」に相対するボタン、つまりBADボタンをつける。(ここでは以降BADボタンのことを「だめだね!」ボタンということにします。)
  • 「いいね!」と「だめだね!」ボタンを押した回数を、こちら側が保持する。(※1)
  • 「いいね!」または「だめだね!」ボタンが押されたら、そのユーザはそのページの両ボタンを押せなくする。

の3つが必要となります。

※1:Facebookには「だめだね!」ボタンに該当する機能が有りませんので、誰が押したか、何回ボタンが押されたかのデータはこちらが保持する必要が有ります。
なお、WordpressやMTでレーティング機能を設置したい場合はDISQUSというシステムもあるので、そちらを利用したほうが早いかもしれません^^;

 

作成手順としては

  1. ログインしているユーザのFacebookIDを取得する機能を設置。
    Facebookアカウントをもっていないユーザ、またはFacebookIDを取得するアプリを許可していない場合はボタンを表示しないプログラムを作成。
  2. 「いいね!」「だめだね!」ボタンが押されたとき、そのデータをcsv形式で保存するプログラムを作成。
  3. 「いいね!」と「だめだね!」ボタンを設置。
  4. すでにボタンが押されている場合はボタンを押せなくするプログラムを作成。

 

なお、1.における「FacebookID」というのは、Facebookにログインする際に使用するIDではなく、Facebook登録時に自動的に連番で割り振られる番号のことです。

「FacebookID」をわざわざ取得する必要がある理由は、
『「いいね!」または「だめだね!」ボタンが押されたら、そのユーザはそのページの両ボタンを押せなくする。』
という点を制御するためです。

「いいね!」ボタンはご存知の通り、一度押したらそのページではもう押せなくなります。しかし「だめだね!」はこちらで用意する機能ですので、誰が押しているかを取得する必要が有ります。

もちろんメールアドレスを入力させるとかIPで制限させるなどの手段も有りますが、ここではFacebookIDを元に制限させる仕様として記述していきます。

 

■必要条件

  • PHP5.2以上が動作するサーバ。
  • facebookのアカウントを持っている。
  • facebook ディベロッパー登録が完了している。(ディベロッパー登録をしていない方は、こちらのサイトをご参照ください。)
  • allow_url_fopenがOnになっている。
  • jqueryを使用しますので、あらかじめこちらのサイトからダウンロードを行ってください。

(さらに…)

PHPを用いてFacebookにログインしているユーザの基本情報を取得する方法【Facebook】

メモ。主に解説サイトの紹介。

なんとなく分かりづらいタイトルですが、自分が今Facebookにログインしているとして、とあるサイトにアクセスしたときに、自分の基本データが収集される・・・あれ?何かすごい恐ろしいこと書いているような・・・^^;

まあ何のために取得するかというと、サイト運営者それぞれに理由があると思いますが、信頼できるユーザかどうか(スパムではないかという意味)を調べたり、二重投稿などを防ぐために必要だったりします。

この基本データというのはいわゆる「プロフィール」なので、Facebookにログインしている状態ならば誰でも見れるものではあるのですが、とはいえ勝手に収集されてはかないません。

というわけで、当然ながら勝手に情報を収集できるわけがなく、そのサイトがユーザの基本データを得るには、訪れたユーザに「取得しても別にいいよ」と許可してもらう必要があります。

↓許可画面はこんな感じ

ここで「許可する」ボタンが押されると、そのサイトは許可したユーザの基本データを取得できるようになります。

では、ユーザの基本データを取得するアプリの開発方法を記したサイトのご紹介です。

 

※事前に「アプリケーションID」や「アプリの秘訣」を取得するために、facebook DEVELOPERSページの「アプリ」画面にて、これ専用のアプリを新規作成しておいてください。またアプリを作成するにはディベロッパー登録を行う必要があります。未登録の方はこちらのサイトを参考に登録してください。分かりやすく手順を書いてくださっています。

Facebook 開発者登録 - ネットショップサポート[PBsupport 門戸開放塾]

 

設置時ちょっとはまってしまったこと

設置直後「アプリの許可」画面を開こうとすると以下のようなエラー画面が出てしまいました。

○エラー内容

API Error Code: 191
API Error Description: The specified URL is not owned by the application
Error Message: Invalid redirect_uri: 指定されたURLは、アプリケーションの設定で許可されていません。

これはアプリ作成時にWebsiteを設定していないためです。

1.facebook DEVELOPERSページの「アプリ」画面を開いてください。

2.データ取得で使用するアプリを選択し、「設定」の「Edit Settings」をクリックしてください。

3.「Website」にデータ取得プログラムを設置しているホームページのURLとドメインを入力してください。

これで正常に「アプリの許可」画面が開くようになります。

nandani | 2011年08月20日 | コメント(0) | トラックバック(5) | API関連 | PHP関連 | SNS関連

FQLで特定のページの「いいね!」ボタンが押された回数などを取得する方法【Facebook】

FQLで特定のページの「いいね!」ボタンが押された回数などを取得する方法です。

PHPを用いるとこんな感じ。


$target_url = "http://www.yahoo.co.jp"; //データを取得したいページのURL

$select = 'SELECT like_count, total_count, share_count, click_count FROM link_stat WHERE url="'.$target_url.'"';
$select = urlencode($select);
$fb_url = "http://api.facebook.com/method/fql.query?query=".$select;
$res = file_get_contents($fb_url);
echo $res;

$target_urlの変数にデータを取得したいページのURLを入れてください。

実行結果(XML形式で表示されます。)

■参考サイト

Facebookの「いいね!」ボタンが押された回数を取得する方法 - でぶぬる日記

fql.query - Facebook開発者

nandani | 2011年08月20日 | コメント(0) | トラックバック(2) | API関連 | PHP関連 | SNS関連

Copyright(c) 2010 - 2024 ダリの雑記