SweetPotato::Plagger このページをアンテナに追加 RSSフィード

2007-12-13

[][] Web::Scraper for CustomFeed::Script はてなハイク  Web::Scraper for CustomFeed::Script はてなハイク - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  Web::Scraper for CustomFeed::Script はてなハイク - SweetPotato::Plagger  Web::Scraper for CustomFeed::Script はてなハイク - SweetPotato::Plagger のブックマークコメント

はてなハイクメイン(真ん中のエントリーが並ぶ部分)のHTML構造を変更しました。これまでの、ULタグでの構造から、DIVを使った構造に変更になっています。

ページ上部のメニュー変更について - はてなハイク日記

これに合わせて修正した。

さきほどはてなハイクでRSSフィードの出力を開始しました。

  • キーワード、asin,httpページ
  • ユーザーページ

それぞれで、RSSフィードの配信をしています。RSSファイルのURLは、ヘッダ内のlinkをご覧ください。

RSSフィードの配信開始について - はてなハイク日記

とのこと。ニーズに応じてRSSとPlaggerを使いこなすべし。

  • プロフィールアイコンをセットするようにした。
  • configを修正した。

おまけでPipes版も作った。

新サービス・はてなハイクをスクレイプ。

新着ページキーワードページユーザページFollowingProfileのどれでもうまくいくはず。

まだβだからHTMLの構造が変わってスクレイパが使えなくなるかもしれんので注意。

assets/plugins/CustomFeed-Script/hatena-haiku.pl

#!/usr/local/bin/perl
# author: SweetPotato
use strict;
use warnings;

use DateTime::Format::MySQL;
use DateTime::Format::W3CDTF;
use URI;
use Web::Scraper 0.22;
use YAML;

my $url = shift or die;

my $s = scraper {
    process '//title', title => 'text';
    process '//*[@class="entry" and not(.//div[@class="input"])]',
      'entry[]' => scraper {
        process 'img.profile-image',
          icon => ['@src', sub { +{ url => $_->as_string } } ];
        process '.title', title => 'text';
        process '.body', body => 'html';
        process '.username a', author => 'text';
        process '.timestamp a', link => ['@href', sub { $_->as_string } ];
        process '.timestamp', date => ['text', \&mk_date];
        result qw( icon title body author link date );
    };
    result qw( title entry );
};
$s->user_agent->env_proxy;

my $res = $s->scrape(URI->new($url));

binmode STDOUT, ':utf8';
print YAML::Dump +{
    title => $res->{title},
    link  => $url,
    entry => $res->{entry},
};

sub mk_date {
    my $dt = DateTime::Format::MySQL->parse_datetime(shift);
       $dt->set_time_zone('Asia/Tokyo');
    DateTime::Format::W3CDTF->format_datetime($dt);
}

config.yaml

plugins:
  - module: Subscription::Config
    config:
      feed:
         - url: 'script:/path/to/hatena-haiku.pl http://h.hatena.ne.jp/'

  - module: CustomFeed::Script

  - module: Filter::ResolveRelativeLink
トラックバック - http://plagger.g.hatena.ne.jp/SweetPotato/20071213