PHPでTwitterのbotを作る方法 ツイートをする/ツイート一覧を取得する(API v1)
この記事はTwitter API v1のものです。
2013年6月11日でTwitter APIのv1は使用できなくなり、使用できるのはv1.1となっています。
[参考記事] PHPでTwitterのbotを作る方法 ツイートをする/ツイート一覧を取得する v1.1
2012/09/16 記事を修正しました(http関数でエラーが出る)
TwitterのAPIを使用するには、以前はベーシック認証による認証方式が使えていましたが、今では使えなくなっています。
そこでOAuthによる認証方式を使用します。
PHPでTwitterのツイートをする
PHPでTwitterのツイート一覧を取得する
CURL関数が使用できない場合
Twitter APIに接続するライブラリは、abraham氏のtwitteroauthにあるコードを使用すると実装が楽です。
abraham/twitteroauth GitHub
The first PHP Library to support OAuth for Twitter's REST API
ここからtwitteroauthをダウンロードします。(バージョンは0.2.0などでかまいません)
このファイルを解凍し、twitteroauthフォルダ内のファイルを使用します。
OAuth.php
twitteroauth.php
[参考記事] Twitter APIを使用する (Twitterアプリケーション登録)
Twitterの開発用サイトでアプリケーションを登録して、
Consumer key、Consumer secret、Access Token、Access Token Secret
を取得します。
PHPでTwitterのツイートをする
APIに送る値はUTF-8で送信します。
// ツイート内容 $status = 'つぶやき'; require_once("twitteroauth.php"); // Consumer keyの値 $consumer_key = "consumer_key"; // Consumer secretの値 $consumer_secret = "consumer_secret"; // Access Tokenの値 $access_token = "access_token"; // Access Token Secretの値 $access_token_secret = "access_token_secret"; // OAuthオブジェクト生成 $twitterOauth = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $ret = $twitterOauth->OAuthRequest("http://api.twitter.com/1/statuses/update.xml","POST",array("status"=>$status));
PHPでTwitterのツイート一覧を取得する
//twitterID $screen_name = 'pentan_info'; require_once("twitteroauth.php"); // Consumer keyの値 $consumer_key = "consumer_key"; // Consumer secretの値 $consumer_secret = "consumer_secret"; // Access Tokenの値 $access_token = "access_token"; // Access Token Secretの値 $access_token_secret = "access_token_secret"; // OAuthオブジェクト生成 $twitterOauth = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $ret = $ret = $twitterOauth->OAuthRequest("http://api.twitter.com/1/statuses/user_timeline.xml","GET",array("screen_name"=>$screen_name)); $xml = simplexml_load_string($ret); foreach($xml->status as $value){ //発言内容 $text = $value->text; //発言者のtwitterID $screen_name = $value->user->screen_name; //発言者の名前 $name = $value->user->name; }
CURL関数が使用できない場合
twitteroauth.phpではcurl_init()やcurl_setopt()などCURL関数を使用しています。
しかしCURL関数を使用するためには、libcurlパッケージをインストールしておく必要があります。
このためCURL関数が使用できない場合にはhttp()メソッドは使用できない。
そこでCURL関数を使用していない代替となるhttp()メソッドは次のようになります。
これに置き換えると使用することができます。
function http($url, $method="GET", $post=NULL, $ver="1.0") { $URL = parse_url($url); if(empty($URL["query"])){ $URL["query"] = ""; }else{ $URL["query"]="?".$URL["query"]; } if(empty($URL["port"])){ if (preg_match('/^https/i',$url)) { $URL["port"]=443; }else{ $URL["port"]=80; } } if(empty($URL["path"])){ $URL["path"] = "/"; } //リクエストライン $request = $method . " " . $URL["path"] . $URL["query"] . " HTTP/".$ver."\r\n"; //リクエストヘッダ $request .= "Host: " . $URL["host"] . "\r\n"; //POSTの時 if(strtoupper($method) == "POST") { $postdata = $post; $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: " . strlen($postdata) . "\r\n"; } $request .= "\r\n"; //接続 if($URL["port"]==443){ $fp = @fsockopen('ssl://'.$URL["host"], $URL["port"], $errno, $errstr, 5); }else{ $fp = @fsockopen($URL["host"], $URL["port"], $errno, $errstr, 5); } //エラー処理 if(!$fp){ return false; } //リクエスト送信 fputs($fp, $request); //応答データ受信 $response = ""; while (!feof($fp)){ $data= fgets($fp); $response.=$data; } fclose($fp); list($dummy,$response) = explode("\r\n\r\n",$response,2); return $response; }
CURL関数が使用できるときには、twitteroauth.php既存のhttp()メソッドを使用して、CURL関数が使用できないときには別のメソッドを使うようにするのが正しいかもしれません。
function http($url, $method, $postfields = NULL) { if (!func_exists('curl_init')) { return $this->httpNoCurl($url, $method, $postfields); } …… } function httpNoCurl($url, $method="GET", $post=NULL,$ver="1.0") { $URL = parse_url($url); if(empty($URL["query"])){ $URL["query"] = ""; }else{ $URL["query"]="?".$URL["query"]; } if(empty($URL["port"])){ if (preg_match('/^https/i',$url)) { $URL["port"]=443; }else{ $URL["port"]=80; } } if(empty($URL["path"])){ $URL["path"] = "/"; } //リクエストライン $request = $method . " " . $URL["path"] . $URL["query"] . " HTTP/".$ver."\r\n"; //リクエストヘッダ $request .= "Host: " . $URL["host"] . "\r\n"; //POSTの時 if(strtoupper($method) == "POST") { $postdata = $post; $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: " . strlen($postdata) . "\r\n"; } $request .= "\r\n"; //接続 if($URL["port"]==443){ $fp = @fsockopen('ssl://'.$URL["host"], $URL["port"], $errno, $errstr, 5); }else{ $fp = @fsockopen($URL["host"], $URL["port"], $errno, $errstr, 5); } //エラー処理 if(!$fp){ return false; } //リクエスト送信 fputs($fp, $request); //応答データ受信 $response = ""; while (!feof($fp)){ $data= fgets($fp); $response.=$data; } fclose($fp); list($dummy,$response) = explode("\r\n\r\n",$response,2); return $response; }
関連記事
- PHPでwebサーバー(apache/nginx)の実行ユーザー・グループを確認する方法
- リクエストヘッダーやリクエストボディーなどを取得する方法
- 負荷が高いときには503エラーを返す方法
- サイトの更新情報をPINGサーバに送信する方法
- PHPでロードアベレージを表示させる方法
- PHPでTwitterのツイートをする/ツイート一覧を取得する/検索する(API v1.1)
- インクルードパスを設定する方法
- オブジェクト(Object)を配列(Array)に変換する方法
- PHPでgzip圧縮形式(gz圧縮)のファイルを読み書きする方法
- PHPでfacebook投稿時に公開範囲を指定する方法
- PHPで複数の画像をfacebookに投稿する方法
- PHPでfacebookのフィード(ウォール)に投稿する方法
- PHPでのfacebookアプリの認証処理(APIを使うユーザー認証)
- MySQL関数のまとめ
- MySQLサーバに接続できるかどうかを確認する
- ディレクトリ内のファイルのパーミッションを一括で変更する
- POSTでアップロードできるファイルサイズの制限を変更する方法
- 暗号化・複合化を行う ブロック暗号
- date型やdatetime型と年月日時分秒への変換
- 関数・メソッドの存在を調べる方法
- strtotimeの指定
- PHPでHTMLメールを送る方法
- ディレクトリセパレータを短く定義する DIRECTORY_SEPARATOR
- モザイク画像を作る方法
- HTML内のアクセス解析タグを除去する方法
- HTMLのTABLEタグを簡単にCSVファイルに変換する方法
- 画像表示のときに指定サイズにリサイズする(画像の拡大縮小)
- テキストを可逆的な暗号化する Crypt_Blowfish
- PHPでwhois検索をする Net_Whois
- よく使うヘッダー関数のまとめ
- キャリア・世代を判別する
- mb_send_mailでCCやBCCを指定する 表示名を指定する
- より高速に、推測困難な一意なIDを生成する方法
- 画像ファイルを指定容量ぎりぎりに圧縮する
- 指定したHTTPヘッダーが送信済みあるいは送信予定に含まれているか
- DOCUMENT ROOTを得る $_SERVER["DOCUMENT_ROOT"]は使えない!
- マルチバイト文字列(日本語文字)を一文字づつ取り出す
- ファイルを削除する/フォルダを削除する
- ファイルを読み込む/ファイルに書き込む
- ディレクトリ内のファイル一覧を取得する
- quoted-printable文字列の変換
スポンサーリンク