ホームページを作る人のネタ帳

タケルンバさんの言ってたTwitterBOT

タケルンバ

最近読み始めたタケルンバ氏がbotを作りたいとつぶやいていた記事を見て、おー、おー、この方もギークになるんだーと思ってみていたんだけど気がついたら作っちゃった。(なぜか間違われるのですが、私はギークでもなければSEでもありません。ネタ屋です。)

暇だったので


暇だっただけという事もあるんですが・・・。

ただ、衝動的に作ったものなので、RSSの解析にPEARを使っちゃいました。
magpierss/rss_fetch.inc
magpierss/rss_utils.inc

また、ランダムに画像を抽出しますが、全く同じ写真が縦列してしまう可能性もある貧相なものです。

あと動作テスト環境はPHP4.3以上で5以下です。

これをアップしてこのページにアクセスすれば、Twitterに自動投稿されます。
RSSはタケルンバさんが言っていた
http://f.hatena.ne.jp/takerunba/food/
のページのものが入ってますのでご注意を。

ツイッター吐き

ただアクセスするときは、q= で認証つけます。

このファイル.php?q=531975

って感じで、死ぬほど簡略的な認証が付いてます。
この辺については誰かが叩いてくれるかもしれない。

そのURLも含めて、Cron-job.org使えば定期更新も万事解決。

投稿処理はここを流用で。

ただタケルンバさんこれから何の言語選ぶのかという段階でサーバーもこれからっぽいので、こんなの作った意味全然ないわけで、世間一般で言われているただの自己満足です。


ソース


<?php
header("Content-Type:text/html;charset=UTF-8");
//▼死ぬほど簡易的な認証--------------------------
if($_GET['q']==""){
print "NG";
exit;
}else{
foreach($_GET as $k => $v) {
if(get_magic_quotes_gpc()) {
$v=stripslashes($v);
}
$v=htmlspecialchars($v);
$array[$k]=$v;
}
extract($array);
}
//$qが数字のみである事を確認
if(!is_numeric($q)){
print "NG";
exit;
}
//$qがちゃんと送られてきてる事をチェック
if($q=="531975"){}else{
print "NG";
exit;
}
//▲死ぬほど簡易的な認証--------------------------

require_once("magpierss/rss_fetch.inc");
require_once("magpierss/rss_utils.inc");
// キャッシュは5分に設定
define("MAGPIE_CACHE_AGE", 60*15);

// キャッシュ保存ディレクトリ指定
define("MAGPIE_CACHE_DIR", "./cache/");

// 取得するエンコーディングの設定
define("MAGPIE_OUTPUT_ENCODING","UTF-8");

// 取得するRSSのURLリスト
$urls = array(
"http://f.hatena.ne.jp/takerunba/food/rss",
);
// RSSのアイテムリストを取得
$items = getRssList($urls);
$cid=0;


foreach ($items as $item) {

$cid=$cid+1;
$href = mb_convert_encoding($item['link'],"UTF-8","auto");
$title = mb_convert_encoding($item['title'],"UTF-8","auto");
$description = mb_convert_encoding($item['description'],"UTF-8","auto");
$date = parse_w3cdtf($item[dc][date]);
$date = date("(Y/m/d)",$date);
if($cid<=50){
$title2=urlencode($title);
$hrefq[$cid]=$href;
$titleq[$cid]=$title;

}
}
//ランダムでURL出力GO
$random = rand(1,50);
//ランダムでコメント出力GO
$coments = round(rand(0,5));//ここで数字調整すればいくらでもランダムコメント増やせる

switch($coments){
case 0:
$cm= "生で食いてー";break;
case 1:
$cm= "焼いて食いてー";break;
case 2:
$cm= "煮て食いてー";break;
case 3:
$cm= "焦がして食いてー";break;
case 4:
$cm= "蒸して食いてー";break;
case 5:
$cm= "むしろ食われてー";break;
}

//出来上がったソースをとんかつに
if($cid==""){
<p>print "RSS内にエラーが見つかりました</p>";
}else{

//以下は http://d.hatena.ne.jp/hirataka522/20080126/1201300282 で
$url = "http://twitter.com/statuses/update.xml?";
$username = "ついったーのID";
$password = "ついったーのパスワード";
$params = "status=". rawurlencode($cm." ".$hrefq[$random]);

$fps = fopen($url.$params, 'r', false, stream_context_create(array(
"http" => array(
"method" => "POST",
"header" => "Authorization: Basic ". base64_encode($username. ":". $password)
)
)));

$result = "";

while(!feof($fps)){
$result .= fgets($fps);
}

fclose($fps);

}
//とんかつ処理ここまで


//複数サイトのRSS取るときに使う
function getRssList($urls)
{
$rssitems = array();
foreach ($urls as $url) {
$obj = fetch_rss($url);
$rssitems = array_merge($rssitems, $obj->items);
}
return $rssitems;
}
?>

流れとしては
RSS解析

それをランダムで抽出

それにランダムで決定した1行コメントつける

それをTwitterに投稿

こんな感じですね。
たぶん、おんなじことするにしても色々方法あるし、レアなコメントを表示するという機能も省いてるので、もっと頭のいいBOTとか見てみたいですね。

それでは、また。

@yamada_nt
Posted by@yamada_nt
スポンサードリンク

Comments 0

There are no comments yet.

Leave a reply

Trackbacks 1

Click to send a trackback(FC2 User)
この記事へのトラックバック
  • タケルンバさんの言ってたTwitterBOT*ホームページを作る人のネタ帳 を読んで、Rubyの練習も兼ねてTwitterのボットを作ってみた。 元ネタ(botを作りたい - タケルンバ卿日記)はこちらのようです。 で、Rubyでごちゃごちゃと作ってみたんだけれども、会話関係の処理が面倒

    2008.12.05 (Fri) 23:22 | 四角三乗