TwitterAPIを使ってアプリケーションを作りたい!その3
前回:http://d.hatena.ne.jp/megane_bomb/20100405/1270397117
Shin x blogさんのFIND Twitterを見ながら、自分なりにがんばってみた
基本の形
・app/controllers/t_controller.php
//使用するモデルの定義 t.phpだったら、Tとか
public $uses = array('T');//actionをここに記述
public function index() {}
}
・app/models/t.php
//データベーステーブルを使わない場合に記述
public $useTable = false;
}
・app/views/t/index.ctp
を作成します。
ここから、twitterが検索できるように変えていきたいと思います。
・app/controllers/t_controller.php
//modelをインスタンス化
$t = new t();
//値が入っているか判断
if(isset($this->params['url']['q'])){
//modelのpaginateメソッドに値を渡します
$data = $t->paginate($this->params['url']['q']);
}else{
$data = null;
$this->params['url']['q'] = null;
}//ビューに取得した値を渡す
$this->set('data', $data);
$this->set('q', $this->params['url']['q']);
}
}
・app/models/t.php//ライブラリのインポート
App::import('Core', 'HttpSocket');
App::import('Core', 'Xml');class T extends AppModel {
//定数を使ってみます
const API_SEARCH = 'http://search.twitter.com/search.atom';//テーブルを使わないときに記述
public $useTable = false;
public function paginate($data){
//インスタンス化
$HttpSocket = new HttpSocket();//リクエストして、結果を取得する
$ret = $HttpSocket->get(self::API_SEARCH, "?q=".$data);//XMLの形式を配列に直して返す
if ($ret) {
$Xml = new Xml($ret);
return $Xml->toArray();
}
}
}
・app/views/t/index.ctp
<?php echo $form->create(false, array('action' => 'index', 'type' => 'get')); ?>
<input type="text" name="q" value="<?php echo h($q); ?>" />
<?php echo $form->submit(__('search', true), array('div' => false)); ?>
<?php echo $form->end(null); ?><!-- $data['Feed']['Entry']が入っているか -->
<?php if(isset($data['Feed']['Entry'])): ?>
<!-- 取得してきたデータを回します-->
<?php foreach (h($data['Feed']['Entry']) as $v): ?><!--elements/t.ctp に $v を渡します-->
<?php echo $this->element('t', compact('v')); ?><?php endforeach; ?>
<?php endif; ?>
・ビューで同じ事を何回も繰り返す場合は、views/elements/任意のファイル名を作成して
$this->element('任意のファイル名(拡張子なし)', compact('渡したい変数名($マークなし)'));を使用する。
で、追加でviews/elements/t.phpを作成
・app/views/elements/t.ctp<h3><?php echo $html->link(h($v['Author']['name']), h($v['Author']['uri'])); ?></h3>
<p>
<?php echo $html->link($html->image(h($v['Link']['1']['href']), array('width' => 48, 'hegiht' => 48, 'class' => 'img1')), h($v['Author']['uri']), array('escape' => false)); ?>
<?php echo h($v['content']['value']); ?>
</p>
そしたら http://localhost/cake/t で検索できるはず!
memo
・静的なのは$this->では参照できないからself::っていう静的アクセスで参照するってことか?
http://blog.xole.net/article.php?id=284
・HttpSocketのGetの説明
http://book.cakephp.org/ja/compare/802/get
でも!!!これではページが変わらない!
てか、paginateが使えない^^
使えるように変えようとおもったら、テーブル使わないって宣言してるのに
テーブルないよ。って怒られる。
なんでやねん
困った困った