Cakphpでphpunitをいれると、/test.phpのアドレスでテスト結果が見れますが
Debug setting does not allow access to this URL.
のエラーがでました
ただ単にデバックレベルを2にしないとだめだっただけ..
$ vim Conifig/core.php
Configure::write('debug', 2);
これで直りました
ひびのきろく
Cakphpでphpunitをいれると、/test.phpのアドレスでテスト結果が見れますが
Debug setting does not allow access to this URL.
のエラーがでました
ただ単にデバックレベルを2にしないとだめだっただけ..
$ vim Conifig/core.php
Configure::write('debug', 2);
これで直りました
CakephpでTwitter APIを使ってツイートをとってみました
ローカル環境で行い、アクセストークンを手抜して取得したバージョンです
cakephpはインストール済み
参考)
ComposerでCakephpを入れてみた | bgbgbg
cakephp cookbook のチュートリアルをcomposerを使ってやってみた | bgbgbg
TwitterOAuth PHP Library for the Twitter REST APIを使いました
まずはTwitterOAuthのインストール
composerを使うのでCakephpのアプリケーションディレクトリで
$ composer require abraham/twitteroauth
これで、Vendor/abraham/twitteroauth
にインストールされます
ControllerとViewを用意
$ vim Controller/TwittersController.php
App::import('Vendor','abraham/twitteroauth/autoload');
use Abraham\TwitterOAuth\TwitterOAuth;
をclassの上に追記しておくと
$connection = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);
とTwitterOAuthが呼び出せるようになります
Twitter APIをたたくには4つの情報が必要になります
これが呼び出すアプリのIDとパスワードに当たります
これから作るCakephpのサービスをTwitterが区別できるようにします
Twitter Application Management
にアクセスしてアプリを作ります
Create New App で
Name
Description
Website
を入力
Websiteはローカル環境なので http://127.0.0.1/ にしておきました
登録したら
Keys and Access Tokensタブをクリック
が手に入りました
あと2つ、Access Tokenが必要になります
これはユーザーの情報をプログラムが取得する際のIDとパスワードに当たります
ユーザーのTwitter情報を取得する際に、ユーザーID・パスワードをプログラムでもらうのでなく
Access Tokenをもらって認証しにいきます
アプリごとに発行されるIDとパスワードなので、少しは安全になります
Access Tokenは同じ画面下でGenerateで生成できます
※画像は一度生成したあとだったのでRegenerateになっています
そしたら
が手に入ります
そしたらプログラムに戻って、Twitter情報をとってみます
<?php
App::uses('AppController', 'Controller');
App::import('Vendor','abraham/twitteroauth/autoload');
use Abraham\TwitterOAuth\TwitterOAuth;
class TwittersController extends AppController {
public function index() {
$consumer_key = 'xxxxxx';
$consumer_secret = 'xxxxxx';
$access_token = 'xxxxxx-xxxxxx';
$access_token_secret = 'xxxxxx';
$connection = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);
$params = ['q' => '#cakephp' ,'count' => '10', 'lang'=>'ja'];
$data = $connection->get('search/tweets', $params)->statuses;
$this->set(compact('data'));
}
}
これで、#cakephpのハッシュタグがついた情報が取れるので
Viewで表示させる処理をかけば情報が表示できます
実際に使うにはAccess TokenをTwitter認証させて取る必要があります
cakephp 2.6でPaginator->numbersのリンク先を変えるのに調べてみました
参考) Paginator — CakePHP Cookbook 2.x ドキュメント
Config\routes.php
でurlをセットした時に調べました
routes.phpを
$defaults = array('controller' => 'sample');
Router::connect('/sample', $defaults);
Router::connect('/sample/:type/:mode', $defaults);
なんてしたときに
Viewでpaginator->numbersを表示させると
<?php echo $this->Paginator->numbers(); ?>
sample/type/mode にアクセスした時
ページャーのリンク先が sample?page=2 とかになってほんとは sample/type/mode?page=2
にしたいってときは
<?php echo $this->Paginator->numbers(array('type'=>$type, 'mode'=>$mode)); ?>
sample/type/mode?param=100 にアクセスした時
ページャーのリンク先が sample/type/mode?page=2 になるので
クエリパラメータ残して sample/type/mode?param=100&page=2 にしたいときは
<?php echo $this->Paginator->numbers(
array(
'type'=>$type, 'mode'=>$mode,
array('?'=>array('param'=>'100'))
)
); ?>
と ? の配列を追加してやるとできました
コアのソースコードを読んでみつけました
CakephpのModelのorderをいちいちセットするのが面倒だったので、beforeFindでセットしてみました
Sampleモデルのnameフィールドでorderをかけてみます
class Sample extends AppModel {
public function beforeFind($queryData) {
$queryData['order'][] = 'name';
return $queryData;
}
}
こんな感じで、findするときは勝手にorderがセットされます