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

2007-12-24

[][][] assets for EFT and TruePermalink Yahoo!掲示板  assets for EFT and TruePermalink Yahoo!掲示板 - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  assets for EFT and TruePermalink Yahoo!掲示板 - SweetPotato::Plagger  assets for EFT and TruePermalink Yahoo!掲示板 - SweetPotato::Plagger のブックマークコメント

Yahoo!掲示板Plaggerでenjoy!

assets/plugins/Filter-EntryFullText/yahoo_bbs.yaml

# author: SweetPotato
handle_force: http://messages\.yahoo\.co\.jp/bbs
extract: <td class=s130>(.*?)</td>
extract_capture: body

assets/plugins/Filter-TruePermalink/yahoo_bbs.yaml

# author: SweetPotato
match: http://rd\.yahoo\.co\.jp/rss/l/mb/mb/\*
rewrite: s!^http://rd\.yahoo\.co\.jp/rss/l/mb/mb/\*!!

config.yaml

ResolveRelativeLinkは無くてもいいかも。

plugins:
  - module: Subscription::Config
    config:
      feed:
         - url: http://messages.yahoo.co.jp/bbs?action=4&board=1834558&sid=1834558&tid=a34a53a5dela12ha4ollgra4a4a1aa

  - module: Aggregator::Simple

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

2007-12-09

[][] upgrader for EFT 無表情 改訂版  upgrader for EFT 無表情 改訂版 - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  upgrader for EFT 無表情 改訂版 - SweetPotato::Plagger  upgrader for EFT 無表情 改訂版 - SweetPotato::Plagger のブックマークコメント

漫画(マンガ)情報サイト《無表情》以前のサイトから移転して,サイト構造も微妙に変わってるっぽかったので以前のWeb::Scraperを書き直そうと思ったんだけど,面倒になったのでEFTだけ新しくしてCustomFeed::Simpleでシンプルにハックすることにした。

assets/plugins/Filter-EntryFullText/muhyojo.pl

# author: SweetPotato

sub custom_feed_handle {
    my ($self, $args) = @_;
    $args->{feed}->url =~ qr!^http://(?:www\.)?muhyojo\.com/(?:index\.html?)?$!;
}

sub custom_feed_follow_link {
    qr!/publisher/.*?#\d+$!
}

sub handle {
    my ($self, $args) = @_;
    $args->{entry}->link =~ qr!^http://(?:www\.)?muhyojo\.com/publisher/[-\w]+/[-\w]+/(?:index\.html?)?#\d+$!;
}

sub extract {
    my ($self, $args) = @_;

    my ($name) = ($args->{entry}->link =~ /#(\d+)$/) or return;
    my ($data) = ($args->{content} =~ m!(<legend[^>]*><a name="?$name"?>.*?)</fieldset>!s) or return;
    $data;
}

config.muhyojo.yaml

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://www.muhyojo.com/

  - module: Filter::EntryFullText
  - module: Filter::ResolveRelativeLink

  - module: Filter::Rule
    rule:
      module: Expression
      expression: length($args->{entry}->title->plaintext) > 1
トラックバック - http://plagger.g.hatena.ne.jp/SweetPotato/20071209

2007-10-28

[][] Web::Scraper and EFT 無表情 01:45  Web::Scraper and EFT 無表情 - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  Web::Scraper and EFT 無表情 - SweetPotato::Plagger  Web::Scraper and EFT 無表情 - SweetPotato::Plagger のブックマークコメント

Web::Scraperを書くのがだるくなったのでCustomFeed::Simple+EFTでシンプルにハックすることにした。

今話題のニュースサイト,漫画(マンガ)情報サイト《無表情》Plaggerでenjoy!

assets/plugins/CustomFeed-Script/muhyojo.pl

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

use DateTime;
use DateTime::Duration;
use Encode;
use URI;
use Web::Scraper 0.22;
use YAML;

my $url = 'http://muhyojo.web0.jp/';

my $s = scraper {
    process '//table[@width="100%" and not(@bgcolor)]/tbody/tr/td[.//div[@align="right"]]',
      'info[]' => scraper {
        process '//b', 'category' => 'text';
        process '//font[@color="red" or @color="orange"]', 'tag[]' => 'text';
        process '//a[not(@class) and not(./img)]',
          'title[]' => 'text',
          'link[]' => ['@href', sub { URI->new_abs($_, $url)->as_string } ];
        process '//font[@color="#696969"]',
          'date[]' => ['text', sub { &mk_date($_) } ];
        result qw/category tag title link date/;
      };
    result qw/info/;
};

my $res = $s->user_agent->get($url);
unless ($res->is_success) {
    die "GET $url failed: " . $res->status_line;
}

my @entry;
for my $info (@{ $s->scrape(Encode::decode('shiftjis', $res->content)) || [] }) {
    for (0 .. $#{$info->{title}}) {
        push @entry, +{
            title => $info->{title}->[$_],
            link  => $info->{link}->[$_],
            date  => $info->{date}->[$_],
            tags  => [$info->{category}, $info->{tag}->[$_]],
        };
    }
}

binmode STDOUT, ':utf8';
print YAML::Dump +{
    title => '漫画(マンガ)情報サイト《無表情》',
    link => $url,
    entry => \@entry,
};

# guess year
sub mk_date {
    my $md = shift;
    my ($month, $day) = ($md =~ /(\d{2})\/(\d{2})/) or return;

    my $today = DateTime->now->truncate(to => 'day');
    my $this = $today->clone->set(month => $month, day => $day);
    my $last = $this->clone->subtract(years => 1);
    my $next = $this->clone->add(years => 1);
    my @date = sort { DateTime::Duration->compare($a->[1], $b->[1], $today) }
               map { [$_->[0], $_->[1]->is_positive ? $_->[1] : $_->[1]->inverse ] }
               map { [$_, $today - $_] } ($this, $last, $next);
    $date[0]->[0]->strftime('%Y-%m-%d');
}

assets/plugins/Entry-FullText/muhyojo.pl

# author: SweetPotato
sub handle {
    my ($self, $args) = @_;
    $args->{entry}->link =~ qr!^http://muhyojo\.web0\.jp/publisher/[-\w]+/[-\w]+/(index\.html?)?#\d+$!;
}

sub extract {
    my ($self, $args) = @_;

    my ($name) = ($args->{entry}->link =~ /#(\d+)$/) or return;
    my ($data) = ($args->{content} =~ m!(<legend[^>]*><a name="?$name"?>.*?)</fieldset>!s) or return;
    $data;
}

config.yaml

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: script:/path/to/muhyojo.pl

  - module: CustomFeed::Script

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

2007-08-04

[][] upgrader for EFT teacup掲示板を修正  upgrader for EFT teacup掲示板を修正 - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  upgrader for EFT teacup掲示板を修正 - SweetPotato::Plagger  upgrader for EFT teacup掲示板を修正 - SweetPotato::Plagger のブックマークコメント

RSSに中途半端な内容のcontent:encodedが含まれてしまうようになった(?)ので,handleをhandle_forceにした。

トラックバック - http://plagger.g.hatena.ne.jp/SweetPotato/20070804

2007-06-27

[][] upgrader for EFT teacup掲示板 21:28  upgrader for EFT teacup掲示板 - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  upgrader for EFT teacup掲示板 - SweetPotato::Plagger  upgrader for EFT teacup掲示板 - SweetPotato::Plagger のブックマークコメント

teacup掲示板のupgrader。無料版では動作確認したけど,有料のプレミアムでは動作確認していない。

RSSに中途半端な内容のcontent:encodedが含まれてしまうようになった(?)ので,handleをhandle_forceにした。

assets/plugins/Filter-EntryFullText/teacup_bbs.yaml

# author: SweetPotato
handle_force: http://\d+\.teacup\.com/\w+/bbs
extract_xpath:
  title: //body/table[@width='98%'][2]//table[@width='100%'][1]//b[1]/text()
  body:  //body/table[@width='98%'][2]//table[@width='100%'][2]//td[@valign='top' and @align='left']
extract_after_hook: $data->{body} =~ s!<td.*?>(.*)</td>!\1!is;

config.teacup_bbs.yaml

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://01.teacup.com/demo/bbs/rss15.xml
  - module: Filter::EntryFullText
  - module: Filter::ResolveRelativeLink
トラックバック - http://plagger.g.hatena.ne.jp/SweetPotato/20070627