TwitterOAuthは便利なライブラリなんですが、いかんせんcakeで使うには情報が錯そうしていてよくわからない。
いろいろ試してみた。
composerから入れる
今回はcomposerからのインストールを試みました。
composer.jsonに下記を追加
"require": { "abraham/twitteroauth": "0.5.0", },
composerで更新をかけるとAPP/Vendor/abraham/twitteroauth/src/ のフォルダに本体がダウンロードされます。
で、この中にあるTwitterOAuth.phpをロードしたいのですが…
ここで情報が錯そうします。
ファイル名がTwitterOAuth.phpだったり小文字だけのtwitteroauth.phpだったりまちまちなのです。
今回はキャメルケース記法のTwitterOAuth.phpだったので
App::build(array('Vendor' => array(APP . 'Vendor' . DS . 'twitteroauth'))); App::uses('TwitterOauth', 'Vendor');
と書けばいいはずなのですがなぜかダメ。
じゃ、app::import()をつかう
ほかの書き方としてapp::import()でロードする方法もあります。
これはcakeのルールに従っていないファイルをロードする場合に使うものです。
が、
App::build(array('Vendor' => array(APP.'Vendor/abraham/twitteroauth/src/'))); App::import('Vendor','abraham/twitteroauth/src/TwitterOAuth');
なんか、Configクラスがないといわれます。
ということで、Configを追加してみましたが今度は他のがないといわれるので、順番に全部ロードしていくと
こうなりました
App::import('Vendor','abraham/twitteroauth/src/Config'); App::import('Vendor','abraham/twitteroauth/src/Response'); App::import('Vendor','abraham/twitteroauth/src/SignatureMethod'); App::import('Vendor','abraham/twitteroauth/src/HmacSha1'); App::import('Vendor','abraham/twitteroauth/src/Consumer'); App::import('Vendor','abraham/twitteroauth/src/Token'); App::import('Vendor','abraham/twitteroauth/src/Request'); App::import('Vendor','abraham/twitteroauth/src/Util'); App::import('Vendor','abraham/twitteroauth/src/Util/JsonDecoder'); App::import('Vendor','abraham/twitteroauth/src/TwitterOAuth'); use Abraham\TwitterOAuth\TwitterOAuth;
一応、これでもツイートは取得できたのですが…。なんかファイルをロードする順番でまずいことが起こるような感じでした。
あと、なんだかスマートじゃない…
composerのautoloaderにお任せ
実は、composerにはautoloaderなるものが入っていて、自動でincludeしてくれるらしいのです!
ただ、cakeで使うには問題があるらしく、bootstrap.phpで以下のような内容を書く必要があるようです。
// composerのautoloadを読み込み require APP . '/Vendor/autoload.php'; // CakePHPのオートローダーをいったん削除し、composerより先ににする // https://github.com/composer/composer/commit/c80cb76b9b5082ecc3e5b53b1050f76bb27b127b を参照 spl_autoload_unregister(array('App', 'load')); spl_autoload_register(array('App', 'load'), true, true); CakePlugin::loadAll();
で、あとは、実際に使いたいファイルの先頭で
use Abraham\TwitterOAuth\TwitterOAuth;
こんな感じでロードすればOKのようです。