1. TOP
  2. Webサービス
  3. CakePHP
  4. CakePHPからtwitteroauthの読み込み。app::importとapp:usesのどちらを使ってもTwitter Search APIの結果表示ができない(泣)

CakePHPからtwitteroauthの読み込み。app::importとapp:usesのどちらを使ってもTwitter Search APIの結果表示ができない(泣)

|

mvc0

CakePHPでTwitter Search APIの機能でキーワード検索の結果を表示させてたいのですが思うように表示できません。APIの機能を使うためにtwittroauthをライブラリとして使用しています。

前提条件について

CakePHPでtwitteroauthライブラリを読み込み以外の前提条件には、以下の事項があります。メモ帳代わりのブログさんを参考にさせていただきました。

  • twitteroauthの配置
  • アクセストークンの定義
  • ルーティングの編集
  • AppControllerの編集
  • ApiControllerの作成

twitteroauthライブラリの読み込みについて

CakePHPのドキュメンテーションやQiitaの記事を見ていると、ライブラリの読み込みには2通りの方法があるようです。

app::importの場合

app::importは、ライブラリのファイル名が、CakePHPの規約に従っていないときに使います。githubにあるtwitteroauthをダウンロードして、app/Vendorに配置するとこんな感じになります。

cakephp_tw
  ├─app
     ├─ Vendor 
          ├─ twitteroauth
                   ├─ OAuth.php
                   ├─ twitteroauth.php

twitteroauth.phpのファイル名を、キャメルケースに変えずそのまま使います。AppController.phpは次のような状態です。

App::uses('Controller', 'Controller');
App::import('Vendor', 'twitteroauth/twitteroauth');

class AppController extends Controller {
	public $components = array('RequestHandler');

    public function beforeFilter() {
        $this->TwitterOAuth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
    }
}

cakephp_twitteroauth

ドメイン名/cakephp_twにアクセスすると、CakePHPのデフォルト画面が表示されます。why?

app::usesの場合

app::usesは、ライブラリのファイル名が、CakePHPの規約に従っているときに使います。

cakephp_tw
  ├─app
     ├─ Vendor 
          ├─ twitteroauth
                   ├─ OAuth.php
                   ├─ TwitterOauth.php

githubにあるtwitteroauth.phpは、CakePHPの命名規約通りではありません。ファイル名をキャメルケースに変えて配置します。AppController.phpは次のような状態です。

App::uses('Controller', 'Controller');
App::build(array('Vendor' => array(APP . 'Vendor' . DS . 'twitteroauth')));
App::uses('TwitterOauth', 'Vendor');

class AppController extends Controller {
	public $components = array('RequestHandler');

    public function beforeFilter() {
        $this->TwitterOAuth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
    }
}
Fatal error: Class 'TwitterOAuth' not found in /var/www/html/cakephp_tw/app/Controller/AppController.php on line 〇

ドメイン名/cakephp_twにアクセスすると、エラー表示されます(泣)

CakePHPの命名規約上、「クラス名=ファイル名」です。このエラーが出ているということは、twitteroauthライブラリのファイルが読み込めていないと考えられます。

この件だけで3時間も費やして試しているのに、解決策が見えません。

〔参考サイト〕