覚書的メモ:Services_Twitter

Twitter APIPHPから利用するためのもの

 1)現在良く使われているServices_Twitter
http://labs.transrain.net/products/services_twitter/ (日本語)
  必須環境:PHP4.3以上
  BASIC認証
  JSON形式のstring/指定によってそれを配列にコンバートした値がGet等の結果として戻る
Twitter APIの各メソッドに対応するメソッドが用意されている。従って、新しいメソッドに必ずしも対応できていない可能性がある。

 2)Services_Twitter 0.5.0 (β)現時点での最新版 
http://pear.php.net/package/Services_Twitter/download/
  OAuth対応版ですが、HTTP_Request2HTTP_OAuthが必要となります。
  ちなみにHTTP_OAuthは現時点の最新版が0.1.6ですがまだα版
  もう少し様子を見た方がよさそうな雰囲気です。

必須環境:
PHP 5.2.0 以上
PEAR Package: PEAR Installer 1.4.0b1 以上
 PEAR Package: HTTP_Request2
PHP Extension: json
PEAR Package: HTTP_OAuth 0.1.2 以上(オプション)

覚書的メモ:PHPでHTTP通信

Twitter APIの各メソッドを利用するのに、HTTPが使えれば良い

PHPで、HTTP通信は、
どの手法が一番一般的なのかわからないのですが・・・(ケースバイケースとは思うものの)

例えば

PHPの関数利用】

ファイルの内容を全て文字列に読み込むという関数です。
  下はPHPのマニュアルに載っている例ですが、指定したホームページの内容を取得して表示することができます。

$homepage = file_get_contents('http://www.example.com/');
echo $homepage;

  • 2. fopen関数を使う

ファイルをオープンする関数ですがURLのオープンにも同様に利用されます。

$handle=fopen('http://www.example.com/',"r") or exit("Can't open\n");
$contents = stream_get_contents($handle);
echo $contents;
fclose($handle);

  インターネット接続オープンする関数
  ファイルポインタが返されますがこれは、 fgets(), fgetss(), fputs(), fclose(), feof() 等の他のファイル関数で使用可能
   ※Services_Twitterはfsockopenを利用して通信しているようですね。

下はPHPマニュアルにあった例です。

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)
\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}

【拡張モジュールの利用】
 ※拡張モジュールのインストールとモジュール利用のための設定(php.iniの編集等)が事前に行われている必要があります

  • 4. PEARライブラリの利用

  PEARのHTTP_Requestを利用すれば良さそう

 下はマニュアルにあった例ですが

require_once "HTTP/Request.php";

$req =& new HTTP_Request("http://www.yahoo.com/");
if (!PEAR::isError($req->sendRequest())) {
echo $req->getResponseBody();
}

Twitter APIの各メソッドの利用方法例が cURLで示されていたりするので何となく親しみやすい・・・ような気もするけれどもどうだろう? PHPで使えるcURL関数の記述方法とは明らかに違いますが

自分が利用させていただいている twitteroauth( http://github.com/abraham/twitteroauth )の中ではこのcURL関数が利用されていました。


他にもざくざくあるようですが収集が付かないのでこんなところで

覚書的メモ:Twitter APIを利用する方法 -まずは Twitter API Document

Twitter APIの使い方について
Twitter API Documentationを参考にするわけなのですが
http://apiwiki.twitter.com/Twitter-API-Documentation

単純に考えれば、それぞれのTwitter API Methodに対応したURLに必要なパラメータをつけて叩けば xmlなりjsonなりの形式でデータや処理結果を返してくれるんだなぁという理解

例えばpublic timelineについては認証無しでも情報にアクセスできるので、xml形式で最新のpublic timelineを取得したければ
下のURLにアクセスするだけで良い。
http://twitter.com/statuses/public_timeline.xml

json形式でデータを取りたければ下の形式
http://twitter.com/statuses/public_timeline.json

なお、戻ってくる値の説明も詳しく同じドキュメントに載っています。
Twitter API Wiki/Return Values
http://apiwiki.twitter.com/Return-Values

このAPI Docを読んでいるだけでも、こんな機能をbotにつけられそうかな?とか、こんな制御も可能そうだな?とか夢が広がります。

とはいえ、難しいのは、認証情報(特にOAuth)を付加したり、上手くパラメータを渡したり、逆に戻ってきたデータを上手く活用したりというところ、
その際、時々このドキュメント通りに色々指定しても情報が取得できなかったり(ex. account update_profile_image )、そもそもTwitterのご機嫌が悪くて、変なデータが帰ってきたりする場合が・・・以前に比較すれば減ったとはいえ発生すること。

そして、API制限、POST制限などの制約事項
http://apiwiki.twitter.com/Getting-Started
http://help.twitter.com/forums/10711/entries/15364

参考情報LINK: Twitter API, OAuth

[Twitter API]
Twitter API Wiki
http://apiwiki.twitter.com/

Twitter API - TwitterまとめWiki
http://usy.jp/twitter/index.php?Twitter%20API


[OAuthのこと]
OAuth Core 1.0
http://oauth.net/core/1.0/
OAuth Core 1.0a
http://oauth.net/core/1.0a/

OAuth Core 1.0仕様 日本語訳
http://labs.i-revo.jp/wiki/?xtra%2FOAuth1.0

Yahoo!JAPAN デベロッパーネットワーク OAuthのフロー
http://developer.yahoo.co.jp/other/oauth/flow.html

OAuthアクセスのためのライブラリ類
http://code.google.com/p/oauth/


[TwitterとOAuth]
Twitter Authentication
http://apiwiki.twitter.com/Authentication

Twitterでのアプリ登録の方法
(画面のスクリーンショットがあるのでわかりやすい)
http://speit.blog78.fc2.com/blog-entry-50.html

[PHP+OAuth]

PHP+OAuthでTwitter
http://wolf.silk.to/labo/oauth.html

Bot作成経緯 06:OAuthの実験 と レンタル・サーバー最終決定

当時(今も?)、bot開発関連の情報を探しに行くと OAuth対策をしなければいけないけれども、そこまで中々手が回らないと嘆く声があちこちで囁かれていて・・・

botを作ってから対応するのは大変そうなので最初から入れておこう!

と、思っておりました。

そのような訳で、レンタル・サーバ選びのもう1つのポイントは
OAuthが使えそうかどうか?

幸いさくらインターネットには試用期間が設けられていたので、その期間を利用してテストを行いました。

テスト1:"Access Token"と"Access Token Secret"取得とTweetのPOSTのテスト

これは全面的に下記サイトの手順とコードを利用させていただきました。
 
PHP+OAuthでTwitter
http://wolf.silk.to/labo/oauth.html

 無事通過!!

スト2botでやりたいあれやこれはできそうかテスト

デスクトップのテスト同様に他所様のスクリプトを一通りテスト

□プログラミングができなくても作れるTwitter botの作り方
http://pha22.net/twitterbot/

 無事通過!

テスト3:OAuth+Twitter APIであれやこれやできるか もっとテスト

丁度 その頃 以下で 0.2.0-beta コードが公開。
この中の twitteroauth.php (+ OAuth.php )がなんとも便利なコードで POST/GET/DELETEとTwitter API ( http://apiwiki.twitter.com/Twitter-API-Documentation )を指定(ex. statuses/user_timeline ,statuses/mentions ...)して各機能の動作を確認することができました。

abraham / twitteroauth
http://github.com/abraham/twitteroauth/downloads

ここで色々試したおかげで、 Twitter APIへの理解がかなり深まったように思います。


テスト4:MySQL へのデータアップロード等など
  実は一番時間がかかった・・・のですが一般のbot開発には
関係無いと思われるため割愛


紆余曲折はあったにせよ、やりたいことはさくらで出来そうなことが試用期間中に確認できたので正式採用決定!!

Bot作成経緯 05:レンタルサーバー選び

レンタル・サーバー選びについては以下の条件で探しました。

1. PHP5 が使える
2. cron が使える
3. MySQLが使える
4. 料金は当然安め

結果的には さくらインターネット スタンダードプラン 選択。

選択理由は、さくらインターネットが他のサービスに比べて、ネットのバックボーンに力を入れてるように感じたことと、利用者が多いだけあって、ネット上にノウハウが蓄積されているように感じたからです。

料金が安くても 使い勝手が悪いと 障害原因等調べるのに時間を喰う・・・その時間を思えばっという計算になります

手に入れた環境は


OS:FreeBSD 7.1
CPU: 3.00GHz
モリー:3.25GB

PHP 5.2.11
MySQL5.1+phpMyAdmin3.2.3


・・・自宅PCの方がスペックいいかも(笑)
 でも、自宅でサーバー立てるよりは格安格安

Bot作成経緯 04:自分のPC開発環境

色々、ネタが揃ったところで、
既にPHPの事前学習段階で、XAMPP(ザンプ)(詳しくは http://ja.wikipedia.org/wiki/XAMPP )が、PCにインストール済みであったこともあり、先ずは自分のデスクトップ環境で実験開始!

【PC開発環境】
  (妙にスペック良いです・・でもVista嫌い(^^;))
OS:Windows Vista Ultimate SP2
CPU:Intel Core2 Duo CPU 3.00GHz
メモリ:4GB

XAMPP Window版 1.7.2
http://www.apachefriends.org/jp/xampp-windows.html
MySQL 5.1
PHP 5.3.0
phpMyAdmin 3.2.0.1


【最初のテスト】
1.テスト用の Twittterアカウント取得
  この際、下記の記事を参考にGmailアカウントを利用

 □Twitterヘビーユーザ必見!同じGmailアカウントで
  複数のユーザ登録をする方法
 http://www.lifehacker.jp/2009/08/twittergmail.html

 かなり管理性が良くて便利です!

2.まずは既存のスクリプトを動かしてみた!

下記のサイトで配布して下さっているスクリプトを実行

□プログラミングができなくても作れるTwitter botの作り方
http://pha22.net/twitterbot/

 動くはずと思っていても動くと嬉しい!

3.自分の環境で十分テストできそうな見極めがついたので、 以下、入れたい機能をモリモリ入れてはテストの繰り返し