CakePHP で PEAR (Services_Twitter) を使う方法

Pear は PHP で利用できる便利なライブラリです。今回は Services_Twitter というものを CakePHP で利用しようとしたところで、ちょぴーり躓いたので、メモしておきます。

今回は簡単に Twitter API を操作できる PEAR パッケージ Services_Twitter を導入することを仮定して話を進めていきます。

Services_Twitter をダウンロードする

こちらから Services_Twitter をダウンロードできます。

Windows でダウンロードすると Services_Twitter-0.4.0.tgz.tar というアーカイブファイルになってしまいまして、解凍しても中身空で、なんか解凍できなかったので Linux を起動してそこから作業をするという荒業に出ました。

PAER を配置する

/app/vendors にファイルを置きます。今回の場合ですと Services ディレクトリをそのままここにコピーしてこれば良いですね。

inclide_path.php を作成する

/app/vendors に inclide_path.php を作成します。内容は以下になります。定数に PEAR_PATH と入っていますが、他の名称に変更してもらって構いませんです。

1
2
3
<?php
define('PEAR_PATH', dirname(__FILE__));
set_include_path(PEAR_PATH . "/");

dirname(__FILE__)) ですが、dirname() は親ディレクトリを求め、__FILE__ は現在のファイルのフルパスを表す定数文字列が入ります。以下が参考になりました。
tips – 汎用インクルード用ファイルでの include, require では dirname(__FILE__) を使う

この inclide_path.php は“vendorsにpear::soapを組み込んでSOAPを使いたい” フォーラム – CakePHP Users in Japan を参考に作りました。

PEAR を読み込む

先ほどの include_path.php がここで役に立ちます。
ファイルが一つなら直接 path を指定しても良かったのかもしれませんが、複数ファイルがあるなら断然 include_path を設定した方が楽ですねー。

2行目は適宜変更してください。第2引数と第3引数注目です。

1
2
App::import('Vendor', 'include_path');
App::import('Vendor', 'Services', array('file'=>'Twitter.php'));

Twitter でつぶやく

以下のようにコントローラー内に書けば動きます。
Services_Twitter のページに詳しい使い方がのっていますので、一度目を通したいところですね。

1
2
3
4
$user = 'twitterのユーザ名';
$pass = 'twitterのパスワード';
$st =& new Services_Twitter($user, $pass);
$st->setUpdate('テスト投稿');

string(xx) “HTTP/1.1 302 Found” で投稿できない

完璧なプログラムなのに、このエラーで投稿できない場合は、Twitter.php の 501行 の var_dump をコメントアウトすれば上手く動きます。
PHP::Services_Twitter のTwitter.phpでvar_dumpの消し忘れ? | 生涯一馬鹿で行こう!

bot を作るのに参考になるサイト

私自身 Web サービスを使うのに向いてなくて、どうせなら提供する側に回りたい今日この頃。bot を作ろうと思っていますので、参考になりそうなサイトを探して、以下が秀逸でした。
キャラクタ系Twitterbotをつくってみた初心者向けまとめ そのいち – ものおき@はてな

コメント

  1. 命名屋が出張する Twitter の bot @meimeibot を公開 | ウェブルさんのコメント

    [...] の勉強や bot への憧れから作ってみました。 以下の記事が制作の過程のメモですねー。命名のロジック以外は、この記事そのままです。 CakePHP で PEAR (Services_Twitter) を使う方法 | ウェブル [...]