ということで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】
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿