Nucleus、いろいろプラグイン
最近は中の人がいろいろ忙しいので、めっきりプログラミングから遠ざかっていたのですが、またぞろなんか作りたい病が出てきた。
せっかくなので、Twitterからキーワードで検索して、表示するとか作ってみる。超手抜き説明です。
TwitterはTwitter APIというのがあって、これを使うと簡単にできそう。
環境は、Nucleus+PHPで。Mysqlはキーワードの部分だけ使って特に書き込みとかしない。代わりに、pearのCache_Liteとか使う。
みたいな感じのひな形を用意。function output($params)ところだけ説明。
みたいな感じでキャッシュの用意。
キーワードが取得できたら、
70行くらいの短いプログラムになりました。
まあ、これでちゃんと動くし、検索結果もちゃんとでるんだけど、、、
Twitterの日本語検索はちょっと怪しい。単語一つの検索は問題ないんだけど、たとえば、「赤ちゃん型 Wiiリモコン」とかは検索できるけど、「赤ちゃん型Wiiリモコン」とかはヒットしない。
Twitterへの問い合わせをjpにしているけど、allとかするとまた検索結果が出てきたりとか・・・なので、キャッシュ時間を1日とか長めにしててもいいかもしれない。あるいはHDDに余裕あれば半年分とか・・・DBに保存する手もあるけど、面倒なのでそこまでしていないんだけど、それならキャッシュするよりDBに書き込んだ方がいいかもしれないなー
動作結果は、このページをみてください。もしTwitterがでてなかったら、他のページをみてればどこか出てると思うw
ま、そんな感じです。参考になれば。改造OKっすよw
せっかくなので、Twitterからキーワードで検索して、表示するとか作ってみる。超手抜き説明です。
TwitterはTwitter APIというのがあって、これを使うと簡単にできそう。
環境は、Nucleus+PHPで。Mysqlはキーワードの部分だけ使って特に書き込みとかしない。代わりに、pearのCache_Liteとか使う。
ソース全部晒すのははずかしいので要所要所だけ(手抜き)
<?php
class NP_プラグイン名 extends NucleusPlugin
{
function getName() { return 'プラグイン名'; }
function getAuthor() { return '作った人の名前'; }
function getURL() { return 'どこかのURL'; }
function getVersion() { return '0.0'; }
function getDescription() { return 'プラグインの説明'; }
function supportsFeature($w) { return ($w == 'SqlTablePrefix') ? 1 : 0; }
function getMinNucleusVersion() {return 330; }
function doSkinVar() {$this->output(func_get_args());}
function doTemplateVar() {$this->output(func_get_args());}
function doItemVar() {$this->output(func_get_args());}
function output($params)
{
・・・処理を書く
}
みたいな感じのひな形を用意。function output($params)ところだけ説明。
global $manager, $itemid, $blog, $DIR_MEDIA;
//キャッシュ使うので読み込み
include_once "Cache/Lite.php";
//キャッシュの保存先とリロード時間
$options = array(
'cacheDir' => $DIR_MEDIA . '/cache/',
'lifeTime' => 7200
);
//キャッシュの準備
$cache = new Cache_Lite($options);
みたいな感じでキャッシュの用意。
$id = $item['itemid'];みたいな感じでitemidからとあるプラグインのキーワードを取得(NP_Relatedとか)
$result = mysql_query("SELECT hogehoge FROM ". sql_table("plug_hogehoge") ." WHERE itemid='$id'");
キーワードが取得できたら、
//josonでもらいます。みたいな感じで、Twitterに問い合わせ。結果をjsonでもらって以下整形
$url = 'http://search.twitter.com/search.json';
$params = http_build_query(array('q' => $searchKey, 'lang' => 'jp', 'rpp' => 5));
$results = json_decode(file_get_contents("$url?$params"));
$res = 'results';みたいな感じで、データを表示。最後に
$text = 'text';
$to_user = 'to_user';
$from_user = 'from_user';
$image = 'profile_image_url';
$date = 'created_at';
if(!empty($results->$res)) {
$returnData = 'Twitterを検索:' . $searchKey . '<br>';
foreach ($results->$res as $status) {
$returnData .= '<div class="leftbox"><a target="_blank" href="http://twitter.com/' . $status->"$from_user . '">';
$returnData .= '<img src="' . $status->"$image . '" width="48px" height="48px" /></div>';
$returnData .= $status->$from_user ."</a> ". $status->$date;
$returnData .= '<div class="point11">' . $status->$text .'</div><br class="clear">';
}
$returnData .= '<a target="_blank" href="http://search.twitter.com/search?q=' . $searchKey .'">他の検索結果・・・</a><P>';
echo $returnData;
$cache->save($returnData);で保存。
70行くらいの短いプログラムになりました。
まあ、これでちゃんと動くし、検索結果もちゃんとでるんだけど、、、
Twitterの日本語検索はちょっと怪しい。単語一つの検索は問題ないんだけど、たとえば、「赤ちゃん型 Wiiリモコン」とかは検索できるけど、「赤ちゃん型Wiiリモコン」とかはヒットしない。
Twitterへの問い合わせをjpにしているけど、allとかするとまた検索結果が出てきたりとか・・・なので、キャッシュ時間を1日とか長めにしててもいいかもしれない。あるいはHDDに余裕あれば半年分とか・・・DBに保存する手もあるけど、面倒なのでそこまでしていないんだけど、それならキャッシュするよりDBに書き込んだ方がいいかもしれないなー
動作結果は、このページをみてください。もしTwitterがでてなかったら、他のページをみてればどこか出てると思うw
ま、そんな感じです。参考になれば。改造OKっすよw









