ツイッターのマッシュアップを作る

元記事はこちら

この記事はこちらの記事のチュートリアルとなっています。

By ics

ツイッターを使用したアプリケーション作成のための簡単なチュートリアルです。


はじめるまえに

  1. Webサーバーが動作すること
  2. データベースサーバーが動作すること(XAMPPなどで大丈夫です。)
  3. CakePHPの基本を知っていること。book.cakephp.orgなどで得られます

アプリケーションの動作

与えられたキーワードで検索し、見つかったツイートをデータベースに格納します。

はじめましょう

1. 最新のCakePHP1.3系を入手し、(Webサーバーの)ドキュメントルートに配置する。以下のようになります。

/caketweet
/app
/cake
/docs
/vendors
.htaccess
index.php

2. /app/config/core.php のカスタマイズと、/app/tmp フォルダに書き込み権限を与えることをお忘れなく。 (chmod -R 777 app/tmp)

3. ツイッターデータソースをここから入手して、/app/models/datasources に配置する。

セットアップ

1. データベースを作成。

01CREATE DATABASE `caketweet`;
02USE `caketweet`;
03CREATE TABLE IF NOT EXISTS `tweets` (
04`id` int(11) NOT NULL auto_increment,
05`twitter_username` varchar(255) NOT NULL,
06`tweet_content` text NOT NULL,
07`created` datetime default NULL,
08`updated` datetime default NULL,
09PRIMARY KEY  (`id`)
10);

2. /app/config/database.phpを編集。
例:

01<?php
02class DATABASE_CONFIG {
03    var $default array(
04        'driver' => 'mysql',
05        'persistent' => false,
06        'host' => 'localhost',
07        'login' => 'user',
08        'password' => 'password',
09        'database' => 'caketweet',
10        'prefix' => '',
11    );
12    var $twitter array(
13        'datasource' => 'twitter',
14        'username' => 'your_twitter_username',
15        'password' => 'your_twitter_password',
16    );
17}
18?>

MVC

1. tweetモデルを作成。
/app/models/tweet.php:

1<?php
2class Tweet extends AppModel {
3    var $name 'Tweet';
4}

2. tweetsコントローラを作成。
/app/controllers/tweets_controller.php

01<?php
02class TweetsController extends AppController {
03    var $name 'Tweets';
04 
05    function index(){
06        $this->set('tweets'$this->paginate());
07    }
08    function search(){
09        if(!empty($this->data['Tweet']['keyword'])){
10            $this->Twitter = ConnectionManager::getDataSource('twitter');
11            $search_results $this->Twitter->search($this->data['Tweet']['keyword'], 'all', 5);
12            // let's loop through tweets
13            foreach($search_results['Feed']['Entry'as $rawtweet){
14                // format to our needs
15                $i explode(' '$rawtweet['Author']['name']);
16                $tweet['Tweet']['twitter_username'] = $i[0];
17                $tweet['Tweet']['tweet_content'] = $rawtweet['content']['value'];
18                $tweet['Tweet']['created'] = date('Y-m-d H:i:s' strtotime($rawtweet['published']));
19                $tweet['Tweet']['updated'] = date('Y-m-d H:i:s' ,strtotime($rawtweet['updated']));
20                // and save
21                $this->Tweet->create();
22                $this->Tweet->save($tweet);
23            }
24            $this->Session->setFlash(__('Got tweets.', true));
25        }
26    }
27}

3. ビューを作成。
/app/views/tweets/index.ctp:

01<div class="tweets index">
02<h2><?php __('Tweets');?></h2>
03<table cellpadding="0" cellspacing="0">
04<tr>
05<th><?php echo $paginator->sort('id');?></th>
06<th><?php echo $paginator->sort('twitter_username');?></th>
07<th><?php echo $paginator->sort('tweet_content');?></th>
08<th><?php echo $paginator->sort('created');?></th>
09<th class="actions"><?php __('Actions');?></th>
10</tr>
11<?php
12$i = 0;
13foreach ($tweets as $tweet):
14$class = null;
15if ($i++ % 2 == 0) {
16$class ' class="altrow"';
17}
18?>
19<tr<?php echo $class;?>>
20<td>
21<?php echo $tweet['Tweet']['id']; ?>
22</td>
23<td>
24<?php echo $tweet['Tweet']['twitter_username']; ?>
25</td>
26<td>
27<?php echo $tweet['Tweet']['tweet_content']; ?>
28</td>
29<td>
30<?php echo $tweet['Tweet']['created']; ?>
31</td>
32<td class="actions">
33<?php echo $html->link(__('Delete', true), array('action'=>'delete'$tweet['Tweet']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $tweet['Tweet']['id'])); ?>
34</td>
35</tr>
36<?php endforeach; ?>
37</table>
38</div>
39<div class="paging">
40<?php echo $paginator->prev('&#0171;' .__('prev', true), array('escape' => false), null, array('class'=>'disabled''escape' => false));?>
41|  <?php echo $paginator->numbers();?>
42<?php echo $paginator->next(__('next', true).' &#0187;'array('escape' => false), null, array('class'=>'disabled''escape' => false));?>
43</div>
44<div class="actions">
45<ul>
46<li><?php echo $html->link(__('Search tweets', true), array('action'=>'search')); ?></li>
47</ul>
48</div>

/app/views/tweets/search.ctp:

01<div class="tweets form">
02<?php echo $form->create('Tweet'array('action' => 'search'));?>
03<fieldset>
04<legend><?php __('Search tweet');?></legend>
05<?php
06echo $form->input('keyword');
07?>
08</fieldset>
09<?php echo $form->end('Search');?>
10</div>
11<div class="actions">
12<ul>
13<li><?php echo $html->link(__('List tweets', true), array('action'=>'index'));?></li>
14</ul>
15</div>

ここで http://yourhost/caketweet/tweets/search にアクセスし、キーワードを入力して検索してみましょう。

おわりに

お気づきと思いますが、これらはアプリケーションの全体からは程遠く、ほんのさわりにすぎません。他に何ができるかについてはtwitter datasource内のメソッドを確認してください。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です