自分が管理しているFacebookページの一覧をPHPで取得する方法を教えてください。Facebook APIやFQLなどを使用して、現在自分(Facebookにログインしている)が管理しているFacebookページの名前とIDの一覧を対で取得したいです。

サンプルなど掲載されているサイト等あれば是非お教えください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/08/10 05:54:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351

ポイント300pt

まずはFacebookアプリを登録します。

・Facebookアプリ(ページ)の登録手順(2012年1月20日版・その1)
http://www.h-fj.com/blog/archives/2012/01/20-105000.php
・Facebookアプリ(ページ)の登録手順(2012年1月20日版・その2)
http://www.h-fj.com/blog/archives/2012/01/21-152934.php
※上記で「ウェブサイト」となっている項目は、現在は「Website with Facebook Login」となっています。


Facebook PHP SDKを準備します。
・Facebook PHP SDK (v.3.1.1)
https://github.com/facebook/facebook-php-sdk/downloads


次のコードを記述したPHPファイルと上記Facebook PHP SDKをsrcディレクトリごと、アプリ登録時にFacebook上のアプリのキャンバスURLで設定したURLにアップします。

<?php
require_once('src/facebook.php');
header("Content-type: text/html; charset=utf-8");

$facebook = new Facebook(array(
    'appId'  => "あなたのApp ID",
    'secret' => "あなたのApp Secret",
));

$user = $facebook->getUser();

if(!$user) {
	$url = $facebook->getLoginUrl(array(
		'canvas' => 1,
		'fbconnect' => 0,
		// status_updateステータス更新
		// publish_streamフィードへの書き込み許可
		// manage_pages管理しているファンページへのアクセス許可
		// offline_accessオフラインでのアクセス許可
		'req_perms' => 'status_update,publish_stream,manage_pages,offline_access'
	));
	echo " <a href='" . $url . "'>Login</a>";
	exit();
	
} else {
	try {
		$logoutUrl = $facebook->getLogoutUrl();
		$me = $facebook->api('/me'); // 自分の情報を取得
		$pagesData = $facebook->api('/me/accounts');
		
		echo "<a href='". $logoutUrl ."'>Logout</a>";
		echo "<pre>";
		print_r($me);
		print_r($pagesData);
		print_r($_SESSION);
		echo "</pre>";
		// ページの名前とIDを表示
		foreach($pagesData['data'] as $val) {
			if($val['category'] != 'Application') {
				echo "<br>\n【Page Name】" . $page_name = $val['name'];
				echo " 【ID】". $page_id = $val['id'];
			}
		}
	} catch (FacebookApiException $e) {
		echo "FacebookApiException: " . $e->getMessage();
		$loginUrl = $facebook->getLoginUrl();
		echo " <a href='" . $loginUrl . "'>Login</a>";
		exit();
	}
}

?>

※$pagesData['data']に管理しているページと登録したアプリケーションの情報が入っています。

http://d.hatena.ne.jp/language_and_engineering/20111006/p1
http://blog.hebita164.jp/entry/20101024/1287933193


※ページの名称とIDのみの表示に関してコードに追加しました。

他2件のコメントを見る
id:rouge_2008

管理人の権限で追加して管理する権限を取得したページの場合、上記Graph API利用によるコードでもFQLでも、ページのデータを取得できない現象を確認しました。
この事が明記されたページが見つからない為、仕様か不具合かは不明です。
取得したページ一覧の利用目的が分かりませんが、単に管理しているページへのアクセスを簡単に行いたいのでしたら、個人アカウントのホームにアクセスして、サイドバーからアクセスしてはいかがでしょうか?
仕事など自分専用のページを作成している場合、ページ名アカウントで「いいね!」する事もできますので、ページのハイライトに表示されている「いいね!」の一覧からアクセスする事もできます。
自分用アプリで取得したい場合は、「いいね!」したサイトの一覧なら取得できますので、管理するページだけ「いいね!」して、「$facebook->api('/me/likes');」で取得してもいいと思います。
「いいね!」を通常通り利用したい場合はこの方法は使えませんが・・・

自分で作成したページのデータは取得できるはずですので、こちらのデータが取得できない場合の理由は分かりません。
なお、一部希望の動作に添えなかったようですので、ポイント送信メッセージで一部ですがポイントを返還してありますので、ご確認お願いします。

2012/08/25 05:58:28
id:rouge_2008

パーミッションの付与が正しく行われていなかったのが原因でした。
「req_perm」を「scope」に修正すると取得できます。
大変失礼しました。

	$url = $facebook->getLoginUrl(array(
		(~ 略 ~)
		'req_perms' => 'status_update,publish_stream,manage_pages,offline_access'
	));

2012/08/25 07:19:11

その他の回答1件)

id:kitiko No.1

回答回数470ベストアンサー獲得回数42

ポイント30pt

まず前提として、facebookPHP-SDKを取得する必要があります。それは以下を参考にしてください。

facebookのPHP-SDKで、ウォールに書き込んだり、フレンドリストを取得したり。 | motooLogue


そののちに、

友達一覧であれば:
facebook apiを使って友達一覧を取得する - phpnoviceの日記

いいね数であれば:
[PHP]FacebookのAPIを使って、特定のURLのいいね数を取得する « Codaholic

を参考にしてfacebook側から、データを取得してください

id:kanienoteiou

失礼しました。質問の書き方が誤解を招くような書き方だったかと思います。
自分がadministratorとして管理する"Facebookページ"自体の名称とそのIDを取得したいのです。

2012/08/09 10:22:52
id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント300pt

まずはFacebookアプリを登録します。

・Facebookアプリ(ページ)の登録手順(2012年1月20日版・その1)
http://www.h-fj.com/blog/archives/2012/01/20-105000.php
・Facebookアプリ(ページ)の登録手順(2012年1月20日版・その2)
http://www.h-fj.com/blog/archives/2012/01/21-152934.php
※上記で「ウェブサイト」となっている項目は、現在は「Website with Facebook Login」となっています。


Facebook PHP SDKを準備します。
・Facebook PHP SDK (v.3.1.1)
https://github.com/facebook/facebook-php-sdk/downloads


次のコードを記述したPHPファイルと上記Facebook PHP SDKをsrcディレクトリごと、アプリ登録時にFacebook上のアプリのキャンバスURLで設定したURLにアップします。

<?php
require_once('src/facebook.php');
header("Content-type: text/html; charset=utf-8");

$facebook = new Facebook(array(
    'appId'  => "あなたのApp ID",
    'secret' => "あなたのApp Secret",
));

$user = $facebook->getUser();

if(!$user) {
	$url = $facebook->getLoginUrl(array(
		'canvas' => 1,
		'fbconnect' => 0,
		// status_updateステータス更新
		// publish_streamフィードへの書き込み許可
		// manage_pages管理しているファンページへのアクセス許可
		// offline_accessオフラインでのアクセス許可
		'req_perms' => 'status_update,publish_stream,manage_pages,offline_access'
	));
	echo " <a href='" . $url . "'>Login</a>";
	exit();
	
} else {
	try {
		$logoutUrl = $facebook->getLogoutUrl();
		$me = $facebook->api('/me'); // 自分の情報を取得
		$pagesData = $facebook->api('/me/accounts');
		
		echo "<a href='". $logoutUrl ."'>Logout</a>";
		echo "<pre>";
		print_r($me);
		print_r($pagesData);
		print_r($_SESSION);
		echo "</pre>";
		// ページの名前とIDを表示
		foreach($pagesData['data'] as $val) {
			if($val['category'] != 'Application') {
				echo "<br>\n【Page Name】" . $page_name = $val['name'];
				echo " 【ID】". $page_id = $val['id'];
			}
		}
	} catch (FacebookApiException $e) {
		echo "FacebookApiException: " . $e->getMessage();
		$loginUrl = $facebook->getLoginUrl();
		echo " <a href='" . $loginUrl . "'>Login</a>";
		exit();
	}
}

?>

※$pagesData['data']に管理しているページと登録したアプリケーションの情報が入っています。

http://d.hatena.ne.jp/language_and_engineering/20111006/p1
http://blog.hebita164.jp/entry/20101024/1287933193


※ページの名称とIDのみの表示に関してコードに追加しました。

他2件のコメントを見る
id:rouge_2008

管理人の権限で追加して管理する権限を取得したページの場合、上記Graph API利用によるコードでもFQLでも、ページのデータを取得できない現象を確認しました。
この事が明記されたページが見つからない為、仕様か不具合かは不明です。
取得したページ一覧の利用目的が分かりませんが、単に管理しているページへのアクセスを簡単に行いたいのでしたら、個人アカウントのホームにアクセスして、サイドバーからアクセスしてはいかがでしょうか?
仕事など自分専用のページを作成している場合、ページ名アカウントで「いいね!」する事もできますので、ページのハイライトに表示されている「いいね!」の一覧からアクセスする事もできます。
自分用アプリで取得したい場合は、「いいね!」したサイトの一覧なら取得できますので、管理するページだけ「いいね!」して、「$facebook->api('/me/likes');」で取得してもいいと思います。
「いいね!」を通常通り利用したい場合はこの方法は使えませんが・・・

自分で作成したページのデータは取得できるはずですので、こちらのデータが取得できない場合の理由は分かりません。
なお、一部希望の動作に添えなかったようですので、ポイント送信メッセージで一部ですがポイントを返還してありますので、ご確認お願いします。

2012/08/25 05:58:28
id:rouge_2008

パーミッションの付与が正しく行われていなかったのが原因でした。
「req_perm」を「scope」に修正すると取得できます。
大変失礼しました。

	$url = $facebook->getLoginUrl(array(
		(~ 略 ~)
		'req_perms' => 'status_update,publish_stream,manage_pages,offline_access'
	));

2012/08/25 07:19:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません