Facebookの情報を取得
最終更新日:2023年08月31日
Facebookアカウントのログイン情報を取得してフォームの入力欄に挿入するサンプルプログラムです。
スパイラルでは、独自クラスのメソッドgetFacebookを用意しています。
getFacebookの使用方法については、スパイラルPHPライブラリリファレンス(PHPdoc)をご参照ください。
<?php // <!-- SMP_DYNAMIC_PAGE DISPLAY_ERRORS=OFF NAME=FACEBOOK --> ?>
<?php
// 使い方
// https://xxx.smp.ne.jp/regist/is?SMPFORM=xxxx でアクセスすると通常のフォーム
// https://xxx.smp.ne.jp/regist/is?SMPFORM=xxxx&fb=1 でアクセスするとfacebookから情報を参照する
$fbOn = $SPIRAL->getParam("fb"); //フォームのfbの値を取得します
$me = array(); //フォームの初期値を格納する
$fburl = $_SERVER['REQUEST_URI'] . "&fb=1"; //facebook参照用のURLを作成
if ($fbOn) {
$args = array(
'appId' => "xxxxxxxxxxxxxxxxxxxxxxx", //facebookのappId
'secret' => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", //facebookのシークレット
'cookie' => true,
);
$facebook = $SPIRAL->getFacebook($args);
$userId = $facebook->getUser();
// アプリケーション登録済ユーザーであればユーザー情報を取得できます
// アプリケーション未登録ユーザーであればfacebookのアプリ登録画面へ誘導します
if ($userId) {
$url = $facebook->getLoginUrl(array(
'scope' => 'email,user_birthday',
'canvas' => 1,
'fbconnect' => 0,
'req_perms' => ''
));
echo "<script type='text/javascript'>top.location.href = '" . htmlspecialchars($url, ENT_QUOTES) . "';</script>";
exit;
}
// facebookのログインユーザの情報を取得します
try {
$fql = "SELECT uid, email, name, first_name, last_name, birthday_date, sex, pic_square FROM user WHERE uid = me()";
$response = $facebook->api(array('method' => 'fql.query', 'query' => $fql));
$me = $response[0];
} catch (FacebookApiException $e) {
$error = "Error : something is wrong, please try again later.";
exit;
}
}
// メールアドレスの初期値を作成(フォームの値が存在すれば上書きします)
if ($SPIRAL->getParam("f000024429")) {
$me['email'] = $SPIRAL->getParam("f000024429");
}
// 名前の初期値を作成(フォームの値が存在すれば上書きします)
if ($SPIRAL->getParam("f000024430")) {
$me['name'] = $SPIRAL->getParam("f000024430");
}
// 生年月日の初期値を作成(フォームの値が存在すれば上書きします)
$ymd = explode("/", $me['birthday_date']);
$me['birth_m'] = $ymd[0];
$me['birth_d'] = $ymd[1];
$me['birth_y'] = $ymd[2];
if ($SPIRAL->getParam("f000024763:y")) {
$me['birth_y'] = $SPIRAL->getParam("f000024763:y");
}
if ($SPIRAL->getParam("f000024763:m")) {
$me['birth_m'] = $SPIRAL->getParam("f000024763:m");
}
if ($SPIRAL->getParam("f000024763:d")) {
$me['birth_d'] = $SPIRAL->getParam("f000024763:d");
}
// 性別の初期値を作成(フォームの値が存在すれば上書きします)
$gender = $SPIRAL->getParam("f000024762");
if ($gender == "女性" || $me['sex'] == "female") {
$me['gender_m'] = "";
$me['gender_f'] = "selected";
} else if ($gender == "男性" || $me['sex'] == "male") {
$me['gender_m'] = "selected";
$me['gender_f'] = "";
} else {
$me['gender_m'] = "";
$me['gender_f'] = "";
}
?>
<!-- ここから通常のカスタムページのソースコード。$me の部分に注目してください。 -->
<!-- フィールドコード部分のみ書いています -->
<!DOCTYPE html>
<body>
facebookを利用する場合はこちら。<a href="<?= htmlspecialchars($fburl, ENT_QUOTES) ?>">こちら</a>
<table>
<tr>
<td class="title">メールアドレス <span class="need">[必須]</span></td>
<td class="data">
<input type="text" name="f000024429" value="<?= htmlspecialchars($me['email'], ENT_QUOTES) ?>" size="60" maxlength="129"><br>
<input type="text" name="f000024429:cf" value="<?= htmlspecialchars($me['email'], ENT_QUOTES) ?>" size="60" maxlength="129">(確認用)<br>
<span class="msg">$error:mail$</span>
</td>
</tr>
<tr>
<td class="title">名前</td>
<td class="data">
<input type="text" name="f000024430" value="<?= htmlspecialchars($me['name'], ENT_QUOTES) ?>" size="60" maxlength="64"><br>
<span class="msg">$error:name$</span>
</td>
</tr>
<tr>
<td class="title">性別</td>
<td class="data">
<select name="f000024762">
<option value="">--- 選択してください ---</option>
<option value="男性" <?= htmlspecialchars($me['gender_m'], ENT_QUOTES) ?>>男性</option>
<option value="女性" <?= htmlspecialchars($me['gender_f'], ENT_QUOTES) ?>>女性</option>
</select><br>
<span class="msg">$error:gender$</span>
</td>
</tr>
<tr>
<td class="title">生年月日</td>
<td class="data">
<input type="text" name="f000024763:y" value="<?= htmlspecialchars($me['birth_y'], ENT_QUOTES) ?>" size="4" maxlength="4">年
<input type="text" name="f000024763:m" value="<?= htmlspecialchars($me['birth_m'], ENT_QUOTES) ?>" size="2" maxlength="2">月
<input type="text" name="f000024763:d" value="<?= htmlspecialchars($me['birth_d'], ENT_QUOTES) ?>" size="2" maxlength="2">日<br>
<span class="msg">$error:birthday$</span>
</td>
</tr>
</table>
</body>
</html>