※タイトルにOAuthと入っていますが、このシステムはOAuthに準拠していません。
はじめに
ニコ動関連のWebサービスを作ろうと思い、OAuthシステムがないか調べたところ、あったのですが
https://secure.nicovideo.jp/form/sdk
アプリでしか使えないというクソ仕様でした。さらにアプリだとしても個人では使えないようです
ニコニコOAuthは個人では申請が通らない
ならば自作するしかない、というわけで作った。
使い方
①app_idとapp_id_secret取得
まずはアカウント作成ページからアカウントを作成します。
そしてログインするとアプリ一覧ページに飛びます。
アプリ一覧ページ左上の新規登録をクリックすると新規作成できます。
各項目は適当に埋めてください
ここのapp_idとapp_id_secretはメモっときましょう。
ちなみに再発行には対応していないので流出したら終わります。
②request_tokenを取得する
<?php
$request_url = "https://niconico.oauth.tsumugu2626.xyz/request_token.php";
$post_data = array(
"app_id" => "<さっきのapp_id>",
"app_id_secret" => "<さっきのapp_id_secret>",
);
$curl=curl_init($request_url);
curl_setopt($curl,CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data));
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl,CURLOPT_COOKIEJAR, 'cookie');
curl_setopt($curl,CURLOPT_COOKIEFILE, 'tmp');
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, TRUE);
$output = curl_exec($curl);
$json_decode = json_decode($output,true);
$req_token = $json_decode["request_token"];
if (!empty($req_token)) {
header("Location: https://niconico.oauth.tsumugu2626.xyz/authenticate.php?request_token=$req_token");
exit;
} else {
echo "app_idかapp_id_secretが間違っています";
}
連携しますか?ページに飛ばすにはリクエストトークンが必要なので、 request_token.php
にPOSTしてリクエストトークンを取得します。取得できたら authenticate.php(連携しますか?ページ)
に先ほどのリクエストトークンをつけてリダイレクトさせます
③連携しますか?ページの挙動
許可するボタンを押した場合
あらかじめ設定されていたcallbackurlにパラメータをつけてリダイレクトします
http://example.com/?api_request_token=5fx7358x8f160da9fafdb3cxs5261095&reqest_token=6120d40d33f5e74cdab303b817d7ae18
許可しないボタンを押した場合
あらかじめ設定されていたcallbackurlにパラメータをつけずにリダイレクトします
http://example.com/?api_request_token=&reqest_token=
④ユーザデータの取得
$a_r_t = $_GET["api_request_token"];
if (empty($a_r_t)) {
echo "キャンセルされました";
exit;
}
$url = "https://niconico.oauth.tsumugu2626.xyz/api/data.php?api_request_token=$a_r_t";
$fg = @file_get_contents($url);
$json_decode = json_decode($fg);
var_dump($json_decode);
基本的にはapi_request_tokenをapiに渡すだけ。
セキュリティ
ログインcookieを保存しているだけなのでメアド、パスワード流出の危険がなく安全です。
デモページ
最後に
ドワンゴさん、OAuthシステムをWeb対応させて個人でも使えるようにしてください。お願いします。