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

2007-09-20

[] Subscription::Toranoana 大きい画像へのリンク付き修正版  Subscription::Toranoana 大きい画像へのリンク付き修正版 - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  Subscription::Toranoana 大きい画像へのリンク付き修正版 - SweetPotato::Plagger  Subscription::Toranoana 大きい画像へのリンク付き修正版 - SweetPotato::Plagger のブックマークコメント

とらのあなの各店舗の出庫同人誌一覧を取得し,同人誌の小さいサンプル画像と通販ページにある個々の同人誌ページへのリンクを出力する,d:id:fubaさん作のSubscription::Toranoana

私はこのプラグインの常用者なんだけど,最近(というか大分前なのかな?)個々の同人誌ページに大きいサンプル画像へのリンクが追加されたようなので,プラグインの出力結果にも大きい画像へのリンクを含めるようにしてみた。ついでにリファクタリングをしたり,ログメッセージを詳しくしてみた。

Plagger/Plugin/Subscription/Toranoana.pm

本文に3枚のサンプル画像が表示されるのは以前と同じだが,各画像を選択すると大きい画像にジャンプする。「画像サイズが小さすぎてエロシーンが読めねえ!」とお嘆きの俺もこれで一安心。

package Plagger::Plugin::Subscription::Toranoana;
use base qw( Plagger::Plugin );
use strict;
use warnings;

use Plagger::Entry;
use Plagger::Feed;
use Plagger::Util;

use HTML::TreeBuilder::XPath;
use URI;

sub register {
    my ($self, $context) = @_;
    $context->register_hook(
        $self,
        'subscription.load' => \&load,
    );
}

sub load {
    my ($self, $context) = @_;

    my $shops = $self->conf->{shop};
       $shops = [$shops] unless ref $shops;
    my $day = $self->conf->{day} || Plagger::Date->today->strftime('%m%d');

    for my $shop (@$shops) {
        my $feed = Plagger::Feed->new;
           $feed->aggregator(sub { $self->aggregate($context, $shop, $day) });
        $context->subscription->add($feed);
    }
}

sub aggregate {
    my ($self, $context, $shop, $day) = @_;

    my $feed = Plagger::Feed->new;
       $feed->title('Toranoana@'."$shop $day");

    my $url = URI->new("http://www.toranoana.jp/shop/newka/$day/${shop}_all.html");
    my $tree = HTML::TreeBuilder::XPath->new;
       $tree->parse(Plagger::Util::load_uri($url));

    my $books = eval { $tree->findnodes('//body/div[3]/table') };
    if ($@) {
        $self->log(error => $@);
        return;
    }

    for my $book (@$books) {
        my $entry = $self->create_entry($context, $book) or next;
        $feed->add_entry($entry);
    }

    $context->update->add($feed);
}

sub create_entry {
    my ($self, $context, $book) = @_;

    my $html = $book->as_HTML('<>&');

    my @record = ($html =~ m!<td[^>]*>([^<]*)</td>!g) or return;
    my ($id, $circle, $title, $genre) = @record;

    my $dir = join '/', ($id =~ /^(\d{2})(\d{4})(\d{2})(\d{2})/);
    my $link = "http://www.toranoana.jp/mailorder/article/$dir/$id.html";

    if ($self->conf->{yaoi_block} && ($html =~ /color: #FF99FF/)) {
        $context->log(info => "$title by $circle ($link) is yaoi");
        return;
    }

    my $body = join '', map {
          qq!<a href="http://img.toranoana.jp/popup_img/$dir/$id-${_}p.jpg">!
        . qq!<img src="http://img.toranoana.jp/img/$dir/$id-$_.gif" />!
        . qq!</a>!
    } (1..3);

    my $entry = Plagger::Entry->new;
       $entry->title($title);
       $entry->link($link);
       $entry->body($body);
       $entry->author($circle);
       $entry->tags([$genre]);

    return $entry;
}

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

2007-09-19

[] 画像系tumblrの画像を収集したい  画像系tumblrの画像を収集したい - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  画像系tumblrの画像を収集したい - SweetPotato::Plagger  画像系tumblrの画像を収集したい - SweetPotato::Plagger のブックマークコメント

APIを叩くソリューションを。

Reblogではなく単純に収集がしたい人向け。

config.yaml

global:
  assets_path: /path/to/assets
  timezone: Asia/Tokyo
  log:
    level: info
  cache:
    base: /path/to/cache

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://moepic17.tumblr.com/rss
        - url: http://moepic18.tumblr.com/rss
        - url: http://school-mizugi.tumblr.com/rss
        - url: http://kuro-tights.tumblr.com/rss

  - module: Filter::FindEnclosures
  - module: Filter::FetchEnclosure
    config:
      dir: /path/to/enclosure
      fake_referer: 1

画像系tumblrのRSSをSubscription::Configで取得し,Filter::FindEnclosuresとFilter::FetchEnclosureでエントリの画像をローカルに保存。

このconfig.yamlでPlaggerを実行すると,/path/to/enclosure以下にフィードごとにフォルダが作成され,その中に画像が保存される。フォルダ名はフィードのID(URL?)のMD5値になっているから,フォルダの中身を見て「このフォルダはこのフィードに対応している」ってのは手作業で確認せにゃならんけど。

あとはこれを定期的に実行すればOK。ただしtumblrのフィードは20件までしかエントリが表示されないから,エントリが流れて画像に抜けが出るのが嫌という人は実行時間に注意。例えば,萌え連18さんは夜から深夜の投稿が多いから,その時間帯に1時間おきに取得するとか。

2007-09-17

[][] scraper for CustomFeed::Config FlexComix ブラッド 修正 00:30  scraper for CustomFeed::Config FlexComix ブラッド 修正 - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  scraper for CustomFeed::Config FlexComix ブラッド 修正 - SweetPotato::Plagger  scraper for CustomFeed::Config FlexComix ブラッド 修正 - SweetPotato::Plagger のブックマークコメント

ページ構造が変わっていたようなのでXPathを修正した。

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