
サンプル・プログラムの実行例

サンプル・プログラム
putTwitter.php | サンプル・プログラム本体 |
pahooTwitterAPI.php | Twitter APIに関わるクラス pahooTwitterAPI。 使い方は「PHPでTwitterに投稿(ツイート)する」などを参照。include_path が通ったディレクトリに配置すること。 |
準備:pahooTwitterAPI クラス
0022: //OAuth用パラメータ
0023: // https://apps.twitter.com/
0024: var $TWTR_CONSUMER_KEY = '***************'; //Cunsumer key
0025: var $TWTR_CONSUMER_SECRET = '***************'; //Consumer secret
0026: var $TWTR_ACCESS_KEY = '***************'; //Access Token (oauth_token)
0027: var $TWTR_ACCESS_SECRET = '***************'; //Access Token Secret (oauth_token_secret)
0028:

事前にプログラムを登録しておく必要があり、その方法は「Twitter API - WebAPIの登録方法」を参照されたい。入手したパラメータを、上述の変数に代入しておくこと。
PHP の https対応
関数 phpinfo を使って、下図のように表示されればOK。


Windowsでは、phop.iniの下記の行を有効化する。
extension=php_openssl.dll

Linuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順

これで準備は完了だ。
Twitter API:POST statuses/update
URL |
---|
https://api.twitter.com/1.1/statuses/update.json |
フィールド名 | 要否 | 内 容 | |
---|---|---|---|
status | 必須 | 投稿文。UTF-8でエンコードされたテキストで、140文字以下。 |
解説:リクエスト
0127: /**
0128: * Twitter API:アクセストークンを用いたリクエスト(ユーザー認証あり)
0129: * @param string $url TwitterAPIのリクエストURL
0130: * @param string $method GET|POST
0131: * @param array $optionオプションパラメータ配列
0132: * @return bool TRUE:リクエスト成功/FALSE:失敗
0133: */
0134: function request_user($url, $method, $option) {
0135: //キー生成
0136: $signature_key = $this->_rawurlencode($this->TWTR_CONSUMER_SECRET) . '&' . $this->_rawurlencode($this->TWTR_ACCESS_SECRET);
0137:
0138: //パラメータ
0139: $params = array(
0140: 'oauth_token' => $this->TWTR_ACCESS_KEY,
0141: 'oauth_consumer_key' => $this->TWTR_CONSUMER_KEY,
0142: 'oauth_signature_method' => 'HMAC-SHA1',
0143: 'oauth_timestamp' => time(),
0144: 'oauth_nonce' => microtime(),
0145: 'oauth_version' => '1.0'
0146: );
0147: $params = array_merge($option, $params);
0148: ksort($params) ;
0149:
0150: //リクエスト文字列生成
0151: $request_params = http_build_query($params, '', '&');
0152: $request_params = $this->_rawurlencode($request_params);
0153: $encoded_request_method = $this->_rawurlencode($method);
0154: $encoded_request_url = $this->_rawurlencode($url);
0155:
0156: //シグネチャ生成
0157: $signature_data = $encoded_request_method . '&' . $encoded_request_url . '&' . $request_params;
0158: $hash = hash_hmac('sha1', $signature_data, $signature_key, TRUE);
0159: $signature = base64_encode($hash);
0160: $params['oauth_signature'] = $signature;
0161:
0162: //ヘッダ文字列生成
0163: $header_params = http_build_query($params, '', ',');
0164:
0165: //リクエスト用コンテキスト
0166: $context = array(
0167: 'http' => array(
0168: 'method' => $method, //リクエストメソッド
0169: 'header' => array( //ヘッダー
0170: 'Authorization: OAuth ' . $header_params
0171: ),
0172: ),
0173: );
0174:
0175: //オプション処理
0176: if (count($option) > 0) {
0177: if ($method == 'GET') {
0178: $url .= '?' . http_build_query($option);
0179: } else {
0180: $context['http']['content'] = http_build_query($option) ;
0181: }
0182: }
0183:
0184: // cURLを使ってリクエスト
0185: $curl = curl_init() ;
0186: curl_setopt($curl, CURLOPT_URL , $url);
0187: curl_setopt($curl, CURLOPT_HEADER, 1) ;
0188: curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $context['http']['method']);
0189: curl_setopt($curl, CURLOPT_SSL_VERIFYPEER , FALSE); //証明書は無視
0190: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //結果を文字列で
0191: curl_setopt($curl, CURLOPT_HTTPHEADER, $context['http']['header']);
0192: if (isset($context['http']['content']) && !empty($context['http']['content'])) {
0193: curl_setopt($curl, CURLOPT_POSTFIELDS, $context['http']['content']); //リクエストボディ
0194: }
0195: curl_setopt($curl, CURLOPT_TIMEOUT, 5);
0196: $res1 = curl_exec($curl);
0197: $res2 = curl_getinfo($curl);
0198: curl_close($curl);
0199:
0200: //結果処理
0201: $this->webapi = $url;
0202: $json = substr($res1, $res2['header_size']);
0203: if ($this->isphp7over()) {
0204: $this->responses = @json_decode($json, FALSE, 512, JSON_BIGINT_AS_STRING);
0205: } else {
0206: $this->responses = @json_decode($json, FALSE, 512);
0207: }
0208: if (isset($this->responses->errors)) {
0209: $this->error = TRUE;
0210: $this->errmsg = $this->responses->errors[0]->message;
0211: $this->errcode = $this->responses->errors[0]->code;
0212: }
0213:
0214: return (! $this->error);
0215: }
Twitter APIの戻り値はJSON形式である。結果をデコードし、クラス変数 $responses に代入しておく。同時にエラー判定も行う。
解説:ツイート
0335: /**
0336: * 投稿する
0337: * @param string $message投稿メッセージ(UTF-8限定)
0338: * @return bool TRUE:リクエスト成功/FALSE:失敗
0339: */
0340: function tweet($message) {
0341: $url = 'https://api.twitter.com/1.1/statuses/update.json';
0342: $method = 'POST' ;
0343: $option = array('status' => $message);
0344:
0345: return $this->request_user($url, $method, $option);
0346: }
先ほど紹介したユーザー関数 request_user に対し、リクエストURL、メソッド(POSTまたはGET)、投稿文を渡すだけで完了である。
解説:メイン・プログラム
0200: //ツイート実行
0201: if ($msg != '') {
0202: $msg = htmlspecialchars($msg);
0203: if ($ptw->twitter_strlen($msg) <= 140) {
0204: $res = $ptw->tweet($msg);
0205: if ($res == FALSE) {
0206: $outmsg = '<p style="text:red;">投稿失敗:' . $ptw->errmsg . '</p>';
0207: } else {
0208: $id_str = (string)$ptw->responses->id_str;
0209: $url = 'https://twitter.com/' . (string)$ptw->responses->user->screen_name . '/status/' . $id_str;
0210: $outmsg = '<p>投稿成功:<a href="' . $url . '">' . $url . '</a></p>';
0211: }
0212: } else {
0213: $outmsg = '<p style="text:red;">メッセージを140文字以下にしてください.</p>';
0214: }
0215: }
0216:

一度に投稿できるツイートは、半角でも全角でも140文字以下なので、入力文字数のチェックをしておく。
ユーザー関数 twitter_strlen は、英数字も日本語も1文字としてカウントするが、URLのみ23文字としてカウントするTwitter仕様である。140文字を超えた場合にはツイートしない。

tweet を実行した後、戻り値を解析し、成功した場合には投稿メッセージへのリンクを表示する。
Twitterへの再登録が必要な場合も

プログラムのバージョンアップで正常に動作しない場合は、Twitterへ新規登録してみるといいだろう。
参考サイト
- API Overview:公式サイト
- PHP4でoAuth。Twitter APIでつぶやく。『マチルダさ~ん』:motooLogue
- Twitter APIの使い方まとめ」:シンカー
- PHPでTwitterに投稿する:ぱふぅ家のホームページ
- PHPで指定した住所のTwitterトレンドを表示する:ぱふぅ家のホームページ
- PHPでTwitterに投稿(ツイート)する:ぱふぅ家のホームページ
- PHPでTwitterのプロファイル画像を変更する:ぱふぅ家のホームページ
- PHPでリツイート回数の上位を表示:ぱふぅ家のホームページ
- PHPで最近リツイートしてくれたユーザー一覧を表示:ぱふぅ家のホームページ
- PHPでTwitterに画像付きメッセージ投稿:ぱふぅ家のホームページ
- PHPでツイートの埋め込み用HTMLを取得:ぱふぅ家のホームページ
- PHPでTwitter相互フォローを表示:ぱふぅ家のホームページ
- Twitter APIからつぶやきを拾ってDBに入れる:レスペス・トランクィル
- WEB APIの使い方とは?挑戦したらすごく楽しい!:僕の私の備忘録
- ゼロから学ぶOAuth:技術評論社
- PHPでTwitter APIのOAuthを使う方法まとめ:頭ん中
参考書籍
![]() |
Twitter API ポケットリファレンス | ||
著者 | 山本裕介 | ||
出版社 | 技術評論社 | ||
サイズ | 単行本 | ||
発売日 | 2011年07月 | ||
価格 | 2,728円(税込) | ||
ISBN | 9784774147321 | ||
Twitter APIの機能を完全解剖!最新のAPI群もサンプルコードを交えてわかりやすく解説。PHP、Java、Ruby、Pythonなどメジャーな言語でTwitter APIを自在にプログラミング。ライブラリのセットアップ方法、JSON、OAuthなど重要な技術要素も、総合的に解説。この1冊でTwitter APIの全機能がわかる、使える、開発できる。 | |||
![]() |
Twitter APIリファレンスガイドブック | ||
著者 | 池田成樹 | ||
出版社 | カットシステム | ||
サイズ | 単行本 | ||
発売日 | 2010年09月 | ||
価格 | 3,300円(税込) | ||
ISBN | 9784877832438 | ||
つぶやく世界をプログラミング。OAuth認証+Ruby+twurl環境でのAPI呼び出しを紹介。 | |||
質疑応答
Twitterのトレンドを毎時ごとに表示し、そのトレンドワードに対して複数のユーザー(Aさん・Bさん・Cさん・・・など)でつぶやかせることは可能ですか【回答】
「PHPで指定した住所のTwitterトレンドを表示する」のプログラムを使ってトレンドを取得し、本項のプログラムを使って投稿すれば実現できるでしょう。