2008/01/31


タレントスケジュールなんてサイトを見つけたので、さっそくスクレイピング。
ドキュメントに同じid属性が複数あるという、なんともダイナミックなHTMLにもめげず作り上げたのが以下 #!/usr/bin/perl

use encoding 'utf-8';
use strict;
use warnings;
use Encode qw(from_to);
use URI;
use URI::Escape qw(uri_escape_utf8);
use Web::Scraper;
use YAML;

if ($^O eq 'MSWin32') {
    binmode(STDERR, ':encoding(shift_jis)');
    Encode::from_to($ARGV[0], 'cp932', 'utf-8');
}
my $talent = shift || '小島よしお';

my $talent_schedule = scraper {
    process '//div[@class="find_bl"]/following-sibling::*[1]//td', day => 'TEXT';
    process '//div[@class="find_bl"]/following-sibling::*[1]//td/div',
        'schedule[]' => scraper {
            process 'div', media => sub { my $m = $_->attr('class'); $m =~ s/^icon_//g; $m };
            process '/div/a', url => '@href';
            process '/div/a', title => 'TEXT';
            process '/div/node()[1]', timespan => sub {
                my $s = $_->string_value;
                $s =~ s/ //;
                $s =~ s/(^|[^\d])(\d):(\d\d)/0$2:$3/g;
                my @span = split(/[^\d:]/, $s);
                \@span;
            };
        };
    result qw/day schedule/;
};
my $uri = URI->new('http://talent-schedule.jp/'.uri_escape_utf8($talent));
my $oppappi_schedule = $talent_schedule->scrape($uri);
warn Dump $oppappi_schedule;
ちょっと日付まわりで苦労してますが...

小島よしおって、結構番組出てますねぇ。

でもそんなの関係ry)
Posted at by




終わり無き戦い...
/lang/perl/plagger/lib/Plagger/Plugin/Publish/Magnolia.pm - CodeRepos::Share - Trac
Ma.gnolia.com...意外とUIが好き。

これで、私が同期しているソーシャルブックマークは
  • Publish::Delicious
  • Publish::LivedoorClip
  • Publish::Buzzurl
  • Publish::LivedoorCilp
  • Publish::Buzzurl
  • Publish::GooBookmark
  • Publish::NiftyClip
  • Publish::Pookmark
  • Publish::YahooBookmark
  • Publish::BlueDot という名の Pubilsh::Delicious
  • Publish::Magnolia
となった。
収拾がつかなくなってきた。
さて、明日は何作ろう

追記
otsuneさんのの方がよい。
CodeRepsに上げてあるMagnolia.pmは、plaggerのsvn/trunkが変わったタイミングで消します。
Posted at by




調べたら、BlueDotってdel.icio.us v1 API互換のAPIを公開してた。
ちゃんと調べるべきだなぁ...
ただ、Publish::Delciousではendpoint書き換えられないからパッチ書いた。
Index: lib/Plagger/Plugin/Publish/Delicious.pm
===================================================================
--- lib/Plagger/Plugin/Publish/Delicious.pm (revision 1981)
+++ lib/Plagger/Plugin/Publish/Delicious.pm (working copy)
@@ -18,10 +18,14 @@
 
 sub initialize {
     my ($self, $context, $args) = @_;
-    $self->{delicious} = Net::Delicious->new({
+    my $opt = {
         user => $self->conf->{username},
         pswd => $self->conf->{password},
-    });
+    };
+    for my $key (qw/ endpoint/) {
+        $opt->{$key} = $self->conf->{$key} if $self->conf->{$key};
+    }
+    $self->{delicious} = Net::Delicious->new($opt);
 }
 
 sub add_entry {
YAMLには - module: Publish::Delicious
  config:
    username: del.icio.us-username
    password: del.icio.us-password
    interval: 2
    post_body: 1
    endpoint: https://secure.bluedot.us/v1/
と書くと行ける!

これで、私が同期しているソーシャルブックマークは
  • Publish::Delicious
  • Publish::LivedoorClip
  • Publish::Buzzurl
  • Publish::LivedoorCilp
  • Publish::Buzzurl
  • Publish::GooBookmark
  • Publish::NiftyClip
  • Publish::Pookmark
  • Publish::YahooBookmark
  • Publish::BlueDot という名の Pubilsh::Delicious
となった。
収拾がつかなくなってきた。
こうなったらどこまでやれるか勝負だ
Posted at by