タケルンバさんの言ってた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とか見てみたいですね。
それでは、また。