ver.1サポートサイト


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>