Seacolor Labs. このページをアンテナに追加 RSSフィード

2007-02-24

[][] 入出力が複数なrecipe 15:56  入出力が複数なrecipe - Seacolor Labs. を含むブックマーク はてなブックマーク -  入出力が複数なrecipe - Seacolor Labs.  入出力が複数なrecipe - Seacolor Labs. のブックマークコメント

 id:mizzyさんのmizzy.org - Plagger にあって Yahoo!pipes にあるものより

それ Plagger でもできるよ。複数の入力から一つの出力もできるし、一つの入力から複数の出力もできるし、複数の入力から複数の出力もできる。

 の補足など。

 むしろ何で「Plaggerじゃできない」なんて勘違いが生まれてしまったのか?

 それはおそらく、config.yamlの書き方例のほとんどが単一の入出力であった為なのではないかと。

 と、いうわけで複数入出力時のconfig.yamlを書いてみる。

複数入力から一つの出力へ

  - module: Subscription::Config
    config:
      feed:
        - http://b.hatena.ne.jp/hotentry/news/rss
        - http://del.icio.us/rss/

  - module: SmartFeed::All
    config:
      title: sbmix

  - module: Publish::Feed
    rule:
      expression: $args->{feed}->id eq 'smartfeed:all'
    config:
      format: RSS
      dir: /home/user/www
      filename: sbmix.rss

一つの入力から複数の出力へ

  - module: Subscription::Config
    config:
      feed:
        - http://del.icio.us/rss/

  - module: Publish::Gmail
    config:
      mailto:   user@gmail.com
      mailfrom: postmaster@domain.com
      mailroute:
        via: sendmail
        command: /usr/sbin/sendmail
  - module: Publish::PSP
    config:
      output_file: /home/user/www

複数入力から複数の出力へ

  - module: Subscription::Config
    config:
      feed:
        - http://b.hatena.ne.jp/hotentry/news/rss
        - http://del.icio.us/rss/

  - module: SmartFeed::All
    config:
      title: sbmix

  - module: Publish::Gmail
    config:
      mailto:   user@gmail.com
      mailfrom: postmaster@domain.com
      mailroute:
        via: sendmail
        command: /usr/sbin/sendmail
  - module: Publish::PSP
    config:
      output_file: /home/user/www

2006-08-01

[][][] del.icio.usはてなブックマークを同期させるyaml(完全版) 19:27  del.icio.usとはてなブックマークを同期させるyaml(完全版) - Seacolor Labs. を含むブックマーク はてなブックマーク -  del.icio.usとはてなブックマークを同期させるyaml(完全版) - Seacolor Labs.  del.icio.usとはてなブックマークを同期させるyaml(完全版) - Seacolor Labs. のブックマークコメント

 del.icio.usブックマークはてなブックマークポストする設定を自分好みに改良し、「たぶんもうこれ以上いじることはないだろう」というレベルまで達したyamlです。

atode.ccクローンを使っているので、toreadタグが付いているものはポストしないようにしてあります。

追記:06/08/07

 d:id:otsune様より取りこぼしの危険性を指摘されたので重複チェックをFreshからDedupedに変更しました。

 「完成版じゃなかったの?」というツッコミタイトルを御再見いただきたく候。

global:
  plugin_path:
    - C:\Perl\site\lib\Plagger\Plugin
  assets_path: C:\Perl\site\lib\Plagger\assets
  timezone: Asia/Tokyo
  log:
    level: info
  cache:
    base: /plagger

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://del.icio.us/rss/seacolor

  - module: Filter::Rule
    rule:
      module: Deduped
      path: /plagger/cache_rule/delicious2hateb.tmp
      compare_body: 1
  - module: Filter::Reverse
  - module: Filter::DeliciousFeedTags

  - module: Publish::HatenaBookmark
    rule:
      expression: not $args->{entry}->has_tag('toread')
    config:
      username: (your account)
      password: (your password)
      interval: 8
      post_body: 1 

2006-06-25

[] Subscription::VersionUpInfo 19:27  Subscription::VersionUpInfo - Seacolor Labs. を含むブックマーク はてなブックマーク -  Subscription::VersionUpInfo - Seacolor Labs.  Subscription::VersionUpInfo - Seacolor Labs. のブックマークコメント

できたんで公開。

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

use Plagger::UserAgent;
use Plagger::Util;
use Encode;
use URI;

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

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

    my $url = URI->new("http://www2s.biglobe.ne.jp/~takao777/versionupinfo/");

    $context->log(info => "GET $url");

    my $agent = Plagger::UserAgent->new;
    my $res = $agent->fetch($url, $self);

    if ($res->http_response->is_error) {
        $context->log(error => "GET $url failed: " . $res->status_line);
        return;
    }

    my $content = Plagger::Util::decode_content($res);
    my $title   = Plagger::Util::extract_title($content);

    my $feed = Plagger::Feed->new;
    $feed->title($title);
    $feed->link($url);

    while ($content =~ m|<li><a href="(.*?)" target="_blank">(.*?)</a>(.*?)<!--.*-->(.*?)<(tt\|em)>(.*?)</\5>|g) {
        my($link, $title1, $title2, $body1, $body2) = ($1, $2, $3, $4, $6);
        my $title = $title1 . $title2;
        my $body = $body1 . $body2;

        my $entry = Plagger::Entry->new;
        $entry->title($title);
        $entry->link($link);
        $entry->body($body);

        $feed->add_entry($entry);
    }

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

1;

__END__

=head1 NAME

Plagger::Plugin::Subscription::VersionUpInfo - Create VersionUpInfo feed

=head1 SYNOPSIS

  - module: Subscription::VersionUpInfo

=head1 DESCRIPTION

This plugin creates a feed off of VersionUpInfo HTML pages.

=head1 AUTHOR

Kazushi Tominaga

=head1 SEE ALSO

L<Plagger>

=cut

Subscription::SoftAntennaもできたので、ついでに公開。

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

use Plagger::UserAgent;
use Plagger::Util;
use Encode;
use URI;
use URI::QueryParam;

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

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

    my $url = URI->new("http://www.softantenna.com/");

    $context->log(info => "GET $url");

    my $agent = Plagger::UserAgent->new;
    my $res = $agent->fetch($url, $self);

    if ($res->http_response->is_error) {
        $context->log(error => "GET $url failed: " . $res->status_line);
        return;
    }

    my $content = Plagger::Util::decode_content($res);
    my $title   = Plagger::Util::extract_title($content);

    my $feed = Plagger::Feed->new;
    $feed->title(decode('iso 2022-jp', $title));
    $feed->link($url);

    while ($content =~ m!<li class=saitem><strong><a href="(.*?)">(.*?)</a>.*</a>(.*?)</span><br>\n<span class=small>(.*?)</span>\n!g) {
        my($link, $title1, $title2, $body) = ($1, $2, $3, $4);
        my $title = $title1 . $title2;

        my $entry = Plagger::Entry->new;
        $entry->title(decode('iso 2022-jp', $title));
        $entry->link($link);
        $entry->body(decode('iso 2022-jp', $body));

        $feed->add_entry($entry);
    }

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

1;

__END__

=head1 NAME

Plagger::Plugin::CustomFeed::SoftAntenna - Create SoftAntenna feed

=head1 SYNOPSIS

  - module: Subscription::SoftAntenna

=head1 DESCRIPTION

This plugin creates a feed off of SoftAntenna HTML pages.

=head1 AUTHOR

Kazushi Tominaga

=head1 SEE ALSO

L<Plagger>

=cut

2006-06-19

[][][] 製作予定のPlagger::Plugins 22:38  製作予定のPlagger::Plugins - Seacolor Labs. を含むブックマーク はてなブックマーク -  製作予定のPlagger::Plugins - Seacolor Labs.  製作予定のPlagger::Plugins - Seacolor Labs. のブックマークコメント

自分を鼓舞する意味も込めて製作予定のプラグインを書いておく。

・CustomFeed::VersionUpInfo
 OnlineSoft VersionUp.infoの新着情報を取得。

・Subscription::Spurl
 Spurl!APIを通してフィードを取得。

・Publish::Spurl
 Spurl!APIを通してフィード更新

Spurlプラグインは非常に有用そうなので是非欲しいところ。

頑張れ自分。

2006-06-17

[] Subscription::SoftAntenna 19:27  Subscription::SoftAntenna - Seacolor Labs. を含むブックマーク はてなブックマーク -  Subscription::SoftAntenna - Seacolor Labs.  Subscription::SoftAntenna - Seacolor Labs. のブックマークコメント

試しにSubscriptionでSoftAntennaを作っているのだけれど、これがなぜだか上手くいかないわけです。

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

use Plagger::UserAgent;
use Plagger::Util;
use Encode;
use URI;

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

    $context->register_hook(
        $self,
        'subscription.load' => \&load,
    );
}

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

    my $url = URI->new("http://www.softantenna.com/index.html");

    $context->log(debug => "GET $url");

    my $agent = Plagger::UserAgent->new;
    my $res = $agent->fetch($url, $self);

    if ($res->http_response->is_error) {
        $context->log(error => "GET $url failed: " . $res->status_line);
        return;
    }

    my $content = Plagger::Util::decode_content($res);
    my $title   = Plagger::Util::extract_title($content);

    my $feed = Plagger::Feed->new;
    $feed->url($url) or $context->error("URL is missing");
    $feed->title(decode('iso 2022-jp', $title));
    $feed->link($url);

    while ($content =~ m!<li class=saitem><strong><a href="(https?://[^"]*)">(.*?)</a>[^\n]+\n<span class=small>(.*?)</span>\n!g) {
        my($link, $title, $body) = ($1, $2, $3);

        my $entry = Plagger::Entry->new;
        $entry->title(decode('iso 2022-jp', $title));
        $entry->link($link);
        $entry->body(decode('iso 2022-jp', $body));

        $feed->add_entry($entry);
    }

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

1;

実行すると、

Plagger [info] plugin Plagger::Plugin::Subscription::SoftAntenna loaded.
Plagger [info] plugin Plagger::Plugin::Publish::Feed loaded.
Plagger::Plugin::Subscription::SoftAntenna [debug] GET http://www.softantenna.co
m/index.html
Plagger::Cache [debug] Cache HIT: Subscription-SoftAntenna|http://www.softantenn
a.com/index.html
Plagger [info] plugin Plagger::Plugin::Aggregator::Simple loaded.
Plagger::Plugin::Aggregator::Simple [info] Fetch http://www.softantenna.com/inde
x.html
Plagger::Cache [debug] Cache HIT: Aggregator-Simple|http://www.softantenna.com/i
ndex.html
Plagger::Plugin::Aggregator::Simple [debug] 200: http://www.softantenna.com/inde
x.html
Plagger [error] http://www.softantenna.com/index.html is not aggregated by any a
ggregator

となってしまう。

なぜにAggregator::Simpleがエラー起こしてるんだろう……?