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が使えない^^

使えるように変えようとおもったら、テーブル使わないって宣言してるのに
テーブルないよ。って怒られる。
なんでやねん





困った困った