アプリへのコメントを垂れ流すBotを作ってみた

HT-03Aを購入し、ぼちぼち遊んでいます。
そんな楽しみの一つとして色々なアプリをダウンロードしてみるというのが大きなトピックス。最近ではAndroidのアプリを紹介するサイトやブログが整ってきたようで、「ほう、そんなアプリがあったのか」などと思いながら遊んでいます。

で、誰か作らないかなぁっと思っていた表題の件ですが、今イチそれらしいものを見つけられなかったので作ってみましたと言うお話。

作り方その他は、以前作った奴([2009-06-14-1])とほぼ同等の製作過程になりますので割愛。内部的にはPerlを使用し、フィードアグリゲータのフレームワークであるPlaggerとWebページの情報を取得するためのWeb::Scraperを使用しています。また、元ネタとなるコメントは「http://jp.androlib.com/appcommlist.aspx」から抽出しています。

作ったのはこれ。もちろん継続して実験中なので、色々ありそうなのはご愛嬌。

https://twitter.com/androidappcmtjp>
http://jp.androlib.com/ に掲載された日本語のコメントを流すTwitterボットです。 リンク先は、androlibになっていますのでAndroidからアクセスする場合はご留意ください。実験中

<<

ちょっとした感想

個人的にTwitterをやっていると、スパム的なアカウントにフォローされたり、どこら辺が琴線に引っかかったのかフォローしてくれる人がいたりと、色々あるんだなぁっと思っていました。

の割にこのBot用アカウント、公開後数日を経過してもフォロー数は2件。そのうち一件は製作者と言う体たらく。別に発言数が極端に少ないとかそういうことはないはずなのですが、あまりに物悲しくなったので作ったものの告知も兼ねてこんな記事を起こしてみました。まぁ、作った事自体をTwitterに流していなかったりもするので「そりゃ、誰も知らねぇよ」っとも思いますが、色々と難儀するものですね。

いや、そもそもの需要が全く存在しないのでフォローされてないという可能性が大きすぎるのでなんともいえないのですがね。

ソースコードとか:追記 2010-01-31

YAMLの方は前回と同一なので、[2009-06-14-1]を参照ください。ここでは、「http://jp.androlib.com/appcommlist.aspx」からコメント部分を抽出するWeb::Scraperを使った部分のみを載せておきます。strictとwarningsが外れているのはテストをしている時の名残りですので、ご留意を。

|perl|
#!/usr/bin/perl
# filh. android-app-comment-jp.pl
# use strict;
# use warnings;
use URI;
use YAML;
use WWW::Mechanize;
use Web::Scraper;
use utf8;
use Data::Dumper;
use Digest::MD5 qw(md5 md5_hex md5_base64);

my $uri = URI->new( 'http://jp.androlib.com/appcommlist.aspx' );  
my $mech = new WWW::Mechanize;  
   $mech->get($uri);

my $s = scraper {  
    process 'div.assetcomments > div.assetcomment', 'entries[]' => scraper {  
      process 'b', 'title' => TEXT;  
      process 'i', 'body' => TEXT;  
      process 'span.stars', 'pub_date' => ['TEXT', sub { s|^.+(\d+)/(\d+)/(\d+).+$|$3-$1-$2|o; } ];  
      process 'span.stars', 'stars' => ['HTML', sub { $num_one = (s/(mstar\.png)/0/g);  s|^.+$|$num_one|o; } ];  
      process 'div.assetcomment > a', 'url' => '@href';  
  };

    result 'entries';  
};

my $src = $s->scrape($mech->content, $mech->uri);

my $feed = {  
      title => 'Android Apps Comment jp',  
      link  => $uri->as_string,  
      type => 'mixinews',  
};

$i = 0;  
for my $entry (@{ $src }) {

  # last if(3 < $i++);

  $starts = ("★" x $entry->{stars}) .  ("☆" x (5 - $entry->{stars}));

  $mes = sprintf('%s(%s), %s', $entry->{title}, $starts, $entry->{body});

  $mes = substr($mes, 0, 95) . (length($mes) > 95 ? "(略)": "");

  $text = sprintf('%s, %s',  
      $mes,  
      $entry->{url});

  # アプリのURLが同一のため、重複で省かれないようにURLにハッシュを追加する  
  $buf = $text;  
  utf8::encode($buf);  
  $url_hash = "#" . substr(md5_hex($buf), 0, 5);

  push @{$feed->{entries}}, {  
    title   => $entry->{title},  
    link   => $entry->{url} . $url_hash,  
    summary  => $starts,  
    body     => $text,  
    date     => $entry->{pub_date},  
  };  
}

binmode STDOUT, ":utf8";  
print Dump$feed;

||<