ということでPHPでTwitterAPIをつかってつぶやきを投稿するサンプルを作りました。 ※Twitter APIを使うにはOAuth認証を使いますのでこちらより必要なモノを取得してください。必要なもの・Consumer key ・Consumer secret 前回の記事を参考にしてください。 今回はサイトURLを http://example.com/index.php コールバックURLを http://example.com/callback.php という感じに設定しました。 通常コールバックURLにてアクセストークンの保存処理などを行うのですが、今回は サンプルということでそのままつぶやきを投稿しています。 下記ソースです。 index.php<?php session_start(); require_once 'common.php'; $consumer_key = '取得したコンシューマキー'; $consumer_secret = '取得したコンシューマシークレット'; $request_url = 'https://api.twitter.com/oauth/request_token'; $auth_url = 'https://api.twitter.com/oauth/authorize'; // シグネチャ作成用パラメータ $signature_params = array( 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => md5(microtime() . mt_rand()), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_timestamp' => time(), 'oauth_version' => '1.0', ); // シグネチャの作成 $signature = getOAuthSignature($request_url, $signature_params, $consumer_secret); $signature_params['oauth_signature'] = $signature; // トークン取得用リクエスト文字列作成 $query = getRequestQuery($signature_params); // リクエストトークン取得 $request_token = getRequestToken($request_url, $query); // Twitterのアプリケーション認証画面へリダイレクト header('Location: ' . $auth_url . '?oauth_token=' . $request_token); exit; /** * リクエストトークンの取得 * @param string $request_url リクエストURL * @param string $query リクエストパラメータのクエリストリング * @return string $request_token リクエストトークン */ function getRequestToken($request_url, $query) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $request_url . '?' . $query); $res = curl_exec($ch); curl_close($ch); parse_str($res, $result); $request_token = $result['oauth_token']; return $request_token; }callback.php<?php session_start(); require_once 'common.php'; $consumer_key = '取得したコンシューマキー'; $consumer_secret = '取得したコンシューマシークレット'; $access_url = 'https://api.twitter.com/oauth/access_token'; $update_api = 'https://api.twitter.com/1/statuses/update.json'; // アクセストークン取得用パラメータ $params = array( 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => md5(microtime() . mt_rand()), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_timestamp' => time(), 'oauth_token' => $_GET['oauth_token'], 'oauth_verifier' => $_GET['oauth_verifier'], 'oauth_version' => '1.0', ); $signature = getOAuthSignature($access_url, $params, $consumer_secret, 'POST', $_GET['oauth_token_secret']); $params['oauth_signature'] = $signature; // トークン取得用リクエスト文字列作成 $query = getRequestQuery($params); // アクセストークンとシークレットの取得 $access_token = getAccessToken($access_url, $query); // ツイート投稿パラメータ unset($params['oauth_signature'], $params['oauth_verifier']); $params['status'] = 'test投稿'; $params['oauth_token'] = $access_token['oauth_token']; uksort($params, 'strnatcmp'); $signature = getOAuthSignature($update_api, $params, $consumer_secret, 'POST', $access_token['oauth_token_secret']); $params['oauth_signature'] = $signature; // パラメータ名でソート uksort($params, 'strnatcmp'); $request_param = getRequestQuery($params); echo '<pre>'; print_r(update($update_api, $request_param)); echo '</pre>'; /** * つぶやきの投稿 * @param string $update_api update apiのURL * @param string $request_param リクエストパラメータ * @return string $res TwitterAPIよりのレスポンス */ function update($update_api, $request_param) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $update_api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $request_param); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_exec($ch); return $res; } /** * アクセストークンの取得 * @param string $access_url アクセストークン取得用URL * @param assoc_array $query アクセストークン取得用クエリ * @return assoc_array $result アクセストークン と アクセストークンシークレット */ function getAccessToken($access_url, $query) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $access_url . '?' . $query); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); parse_str($res, $result); $access_token = $result['oauth_token']; return $result; }common.php<?php /** * シグネチャ文字列の作成 * @param string $request_url リクエストURL * @param assoc_array $params シグネチャ作成用パラメータ * @param string $consumer_secret コンシューマシークレット * @param string $method リクエストメソッド * @param string $oauth_token OAuth token * @return string $signature シグネチャ */ function getOAuthSignature($request_url, $params, $consumer_secret, $method = 'GET', $oauth_token_secret = '') { $signature = ''; $params = array_map('urlEncodeRfc', $params); uksort($params, 'strnatcmp'); $param = array(); foreach ($params as $key => $val) { $param[] = $key . '=' . $val; } $query = implode('&', $param); $base_array = array( $method, $request_url, $query, ); $base_array = array_map('urlEncodeRfc', $base_array); $base_string = implode('&', $base_array); $key = array( $consumer_secret, $oauth_token_secret, ); $key = array_map('urlEncodeRfc', $key); $key = implode('&', $key); // ベース文字列をシグネチャに $signature = base64_encode(hash_hmac('sha1', $base_string, $key, true)); return $signature; } /** * URLエンコードをしたリクエスト用クエリストリングを作成 * @param assoc_array $params 作成する連想配列 * @return string $query クエリストリング */ function getRequestQuery($params) { $params = array_map('urlEncodeRfc', $params); $query_param = array(); foreach ($params as $key => $val) { $query_param[] = $key . '=' . $val; } $query = implode('&', $query_param); return $query; } /** * URLエンコード * @param string $str エンコードする文字列 * @return string $enc_str エンコード済み文字列 */ function urlEncodeRfc($str) { $enc_str = str_replace('%7E', '~', rawurlencode($str)); return $enc_str; }流れは、index.phpでまず、リクエストトークンを取得します。 その後リクエストトークンをクエリパラメータとしてTwitterの アプリケーション認証画面にリダイレクトします。 ユーザが認証を押下した場合 コールバックURL「callback.php」 に リダイレクトされます。 リダイレクトされてきた際にGETパラメータにて 「oauth_token」 「oauth_token_secret」 の値が付加されていますので、その値を使いアクセストークンを取得します。 つぶやきを投稿する際はつぶやき投稿用パラメータを含めたシグネチャを作成し、 取得したアクセストークンを使ってリクエストを送信します。 おおまかな流れは以上になります。 終わり 関連記事: 【Twitter】TwitterのAPIを使う準備
2012/01/22
【PHP】Twitter APIを使ってつぶやきを投稿するサンプル【Twitter】
2012/01/21
【Twitter】TwitterのAPIを使う準備
ということでTwitterAPIを使う準備をしました。 まず、こちらへアクセスすると下記の画面へ遷移します。 赤い四角で囲まれている 「Create an app」 を押下します。 すると下記画面が表示されログイン要求をされますので、いつものログインIDとPWを入力し ログインします。 ログイン後に下記の画面が表示されますので、そこに必要な項目を入力します。 下記が入力項目とその画面になります。 ・Name アプリケーション名 ・Description アプリケーションの説明文 ・WebSite アプリケーションのTOP ・Callback URL 認証時のコールバック用URL 入力が完了したら一番下の 「Create your Twitter application」 を押下します。 するとこちらの画面に遷移しますので、 Consumer key Consumer secret をアプリケーションで使用しますので保存します。 以上でTwitterAPIを使ったアプリケーションの作成準備は完了です。 次はつぶやきの投稿サンプルを作成したいと思います。 終わり 【追記】 Twitter APIでつぶやきを投稿する際は書き込み権限が必要になりますので下記の画面にて 「Read & Write」にチェックを入れる必要があります。 関連記事: 【PHP】Twitter APIを使ってつぶやきを投稿するサンプル【Twitter】
2011/12/28
【プログラミング】OAuth認証のお話
今日はOAuth認証のことについていろいろ調べてみたのでそのことについて書いていきたいと 思います。OAuthとはOAuthとは 「認可情報の委譲」 を行うプロトコルです。 オースと読むらしいです。 要点としてはあらかじめ信頼関係があるサービス間でユーザの同意のもとセキュアにユーザの権限を 受け渡しするというものです。Oauth認証の相関図OAuth認証の相関関係OAuth認証は下記3つの相関関係でできています。 ・OAuthを提供するサービスプロバイダ(Twitterなど) ・OAuthを使ってサービスを作るコンシューマ ・サービスを使用するユーザ サービスプロバイダはOAuth認証と認証によって使用できるようにサービスを提供します。 コンシューマはユーザがOAuth認証を使って使用するサービスを提供します。 ユーザはコンシューマのサービスのアクセスを許可したり、許可を解除したりします。OAuthの流れ1.コンシューマがサービスプロバイダからOAuthの利用申請をする。 Consumer Key や Consumer Secret をサービスプロバイダから取得する。 2.ユーザがコンシューマのサービスにサービスプロバイダから 使用する権限を取得するよう要求する。 3.コンシューマがバックグラウンドでリクエストトークンを取得する。 ※先に4のフローに移行するサービスもあるようです。 4.コンシューマはサービスプロバイダに未認可のリクエストトークンを パラメータに載せてリダイレクトさせる。 5.ユーザがサービスプロバイダにてアクセス権の委譲を許可する。 この際未認可のリクエストトークンをサービスプロバイダが許可済みにする。 6.サービスプロバイダがユーザをコンシューマへとリダイレクトさせる。 7.コンシューマが認可済みのリクエストトークンを使いバックグラウンドで アクセストークンを取得する。 8.コンシューマがアクセストークンを使いOAuthにより提供されている サービス情報にアクセスする。 終わり
登録:
投稿 (Atom)