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

元記事はこちら

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

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. データベースを作成。

CREATE DATABASE `caketweet`;
USE `caketweet`;
CREATE TABLE IF NOT EXISTS `tweets` (
`id` int(11) NOT NULL auto_increment,
`twitter_username` varchar(255) NOT NULL,
`tweet_content` text NOT NULL,
`created` datetime default NULL,
`updated` datetime default NULL,
PRIMARY KEY  (`id`)
);

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

<?php
class DATABASE_CONFIG {
	var $default = array(
		'driver' => 'mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'caketweet',
		'prefix' => '',
	);
	var $twitter = array(
		'datasource' => 'twitter',
		'username' => 'your_twitter_username',
		'password' => 'your_twitter_password',
	);
}
?>

MVC

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

<?php
class Tweet extends AppModel {
	var $name = 'Tweet';
}

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

<?php
class TweetsController extends AppController {
	var $name = 'Tweets';

	function index(){
		$this->set('tweets', $this->paginate());
	}
	function search(){
		if(!empty($this->data['Tweet']['keyword'])){
			$this->Twitter = ConnectionManager::getDataSource('twitter');
			$search_results = $this->Twitter->search($this->data['Tweet']['keyword'], 'all', 5);
			// let's loop through tweets
			foreach($search_results['Feed']['Entry'] as $rawtweet){
				// format to our needs
				$i = explode(' ', $rawtweet['Author']['name']);
				$tweet['Tweet']['twitter_username'] = $i[0];
				$tweet['Tweet']['tweet_content'] = $rawtweet['content']['value'];
				$tweet['Tweet']['created'] = date('Y-m-d H:i:s' , strtotime($rawtweet['published']));
				$tweet['Tweet']['updated'] = date('Y-m-d H:i:s' ,strtotime($rawtweet['updated']));
				// and save
				$this->Tweet->create();
				$this->Tweet->save($tweet);
			}
			$this->Session->setFlash(__('Got tweets.', true));
		}
	}
}

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

<div class="tweets index">
<h2><?php __('Tweets');?></h2>
<table cellpadding="0" cellspacing="0">
<tr>
<th><?php echo $paginator->sort('id');?></th>
<th><?php echo $paginator->sort('twitter_username');?></th>
<th><?php echo $paginator->sort('tweet_content');?></th>
<th><?php echo $paginator->sort('created');?></th>
<th class="actions"><?php __('Actions');?></th>
</tr>
<?php
$i = 0;
foreach ($tweets as $tweet):
$class = null;
if ($i++ % 2 == 0) {
$class = ' class="altrow"';
}
?>
<tr<?php echo $class;?>>
<td>
<?php echo $tweet['Tweet']['id']; ?>
</td>
<td>
<?php echo $tweet['Tweet']['twitter_username']; ?>
</td>
<td>
<?php echo $tweet['Tweet']['tweet_content']; ?>
</td>
<td>
<?php echo $tweet['Tweet']['created']; ?>
</td>
<td class="actions">
<?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'])); ?>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
<div class="paging">
<?php echo $paginator->prev('&#0171;' .__('prev', true), array('escape' => false), null, array('class'=>'disabled', 'escape' => false));?>
|  <?php echo $paginator->numbers();?>
<?php echo $paginator->next(__('next', true).' &#0187;', array('escape' => false), null, array('class'=>'disabled', 'escape' => false));?>
</div>
<div class="actions">
<ul>
<li><?php echo $html->link(__('Search tweets', true), array('action'=>'search')); ?></li>
</ul>
</div>

/app/views/tweets/search.ctp:

<div class="tweets form">
<?php echo $form->create('Tweet', array('action' => 'search'));?>
<fieldset>
<legend><?php __('Search tweet');?></legend>
<?php
echo $form->input('keyword');
?>
</fieldset>
<?php echo $form->end('Search');?>
</div>
<div class="actions">
<ul>
<li><?php echo $html->link(__('List tweets', true), array('action'=>'index'));?></li>
</ul>
</div>

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

おわりに

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

 

コメントを残す

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