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

2009-09-09

COMIC ZIN が通販サイトをプレオープンしたのでTOPページの新着ピックアップを取得するWeb::Scraperを手抜きな感じで作った COMIC ZIN が通販サイトをプレオープンしたのでTOPページの新着ピックアップを取得するWeb::Scraperを手抜きな感じで作った - SweetPotato::Plagger を含むブックマーク はてなブックマーク - COMIC ZIN が通販サイトをプレオープンしたのでTOPページの新着ピックアップを取得するWeb::Scraperを手抜きな感じで作った - SweetPotato::Plagger COMIC ZIN が通販サイトをプレオープンしたのでTOPページの新着ピックアップを取得するWeb::Scraperを手抜きな感じで作った - SweetPotato::Plagger のブックマークコメント

同人誌だけ取得する仕様。mk_body もうちょっとキレイに書けないものか。

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use URI;
use Web::Scraper 0.22;
use YAML;

my $url = 'http://shop.comiczin.jp/';
my $s = scraper {
    process '//a[contains(@class,"title_area") and string-length(@href)=59]', 'entry[]' => +{
        title => 'text',
        link  => ['@href', \&as_string],
        body  => ['@href', \&as_string, sub { /=(\d+)$/; $1 }, \&mk_body],
    };
    result qw( entry );
};
$s->user_agent->env_proxy;

binmode STDOUT, ":utf8";
print Dump +{
    title => 'COMIC ZIN 通信販売',
    link  => $url,
    entry => $s->scrape(URI->new($url)),
};

sub mk_body {
    my $id = $_;
    my $dir = int($id / 1000) * 1000;
    my $c = "http://shop.comiczin.jp/upload/save_image/_$dir/_";
    my $m = "${c}m/${id}_";
    my $mhtml = qq!<a href="${m}l.jpg"><img src="${m}m.jpg"></a>!;
    my $s = "${c}s/${id}_s";
    my $shtml = join '', map {
        qq!<a href="$s${_}_l.jpg"><img src="$s${_}_s.jpg"></a>!
    } qw( 1 2 3 );
    "$mhtml$shtml";
}

sub as_string { $_->as_string }

Plaggerで使うときはこんな感じのYAML。

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: script:/path/to/shop_comiczin_jp.pl
  - module: CustomFeed::Script
トラックバック - http://plagger.g.hatena.ne.jp/SweetPotato/20090909