otsune's SnakeOil RSSフィード

python -c "print''.join([chr(x) for x in 111&1101,110+~-~11,10^11*11,110+~-~11,-~101,-~11^11*11,~-110,111&11*11,11+11+10,11|~-0110,1-~11^11*11,10^11*11,-~11^11*11,110,101])"

2007-10-25

Publish::Deliciousのendpoint定義部分を分離してPublish::BluedotとPublish::Magnoliaを継承するだけでOkにする

| Publish::Deliciousのendpoint定義部分を分離してPublish::BluedotとPublish::Magnoliaを継承するだけでOkにする - otsune's SnakeOil  を含むブックマーク はてなブックマーク - Publish::Deliciousのendpoint定義部分を分離してPublish::BluedotとPublish::Magnoliaを継承するだけでOkにする - otsune's SnakeOil  Publish::Deliciousのendpoint定義部分を分離してPublish::BluedotとPublish::Magnoliaを継承するだけでOkにする - otsune's SnakeOil  のブックマークコメント

404エラー | 該当のページが見つかりませんを見て。

BluedotもMa.gnoliaもdel.icio.us互換APIを持っているので、endpointだけinit_endpointとして分離してみた。

--- lib/Plagger/Plugin/Publish/Delicious.pm	(revision 2714)
+++ lib/Plagger/Plugin/Publish/Delicious.pm	(local)
@@ -18,12 +18,24 @@
 
 sub initialize {
     my ($self, $context, $args) = @_;
-    $self->{delicious} = Net::Delicious->new({
+
+    my $opt = {
         user => $self->conf->{username},
         pswd => $self->conf->{password},
-    });
+    };
+    if ($self->conf->{endpoint}) {
+        $opt->{endpoint} = $self->conf->{endpoint};
+    } elsif {
+        $opt->{endpoint} = init_endpoint;
+    }
+
+    $self->{delicious} = Net::Delicious->new($opt);
 }
 
+sub init_endpoint {
+    return undef; # Default undef (same https://api.del.icio.us/v1/)
+}
+
 sub add_entry {
     my($self, $context, $args) = @_;
 
@@ -84,6 +96,13 @@
 
 A flag to post entry's body as extended field for del.icio.us. Defaults to 0.
 
+=item endpoint
+
+set endpoint for compatible API (optional).
+bluedot.us https://secure.bluedot.us/v1/
+Ma.gnolia https://ma.gnolia.com/api/mirrord/v1
+Default is https://api.del.icio.us/v1/
+
 =back
 
 =cut
@@ -94,6 +113,7 @@
 
 =head1 SEE ALSO
 
-L<Plagger>, L<Net::Delicious>, L<http://del.icio.us/>
+L<Plagger>, L<Net::Delicious>, L<http://del.icio.us/>,
+L<http://bluedot.us/DeliciousApi.aspx>, L<http://wiki.ma.gnolia.com/Mirror%27d_API>
 
 =cut

んでPublish::Magnolia

package Plagger::Plugin::Publish::Magnolia;
use strict;
use base qw( Plagger::Plugin::Publish::Delicious );

sub init_endpoint {
    return 'https://ma.gnolia.com/api/mirrord/v1';
}

1;

__END__

=head1 NAME

Plagger::Plugin::Publish::Magnolia - Post to Ma.gnolia automatically

=head1 SYNOPSIS

  - module: Publish::Magnolia
    config:
      username: your-username
      password: your-password
      interval: 2
      post_body: 1

=head1 DESCRIPTION

This plugin posts feed updates to Ma.gnolia, using its REST API.

=head1 CONFIGURATION

=over 4

=item username, password

Your login and password for logging in Ma.gnolia

=item interval

Interval (as seconds) to sleep after posting each bookmark. Defaults to 3.

=item post_body

A flag to post entry's body as extended field for Ma.gnolia. Defaults to 0.

=back

=cut

=head1 AUTHOR

Masafumi Otsune

=head1 SEE ALSO

L<Plagger>, L<Net::Delicious>, L<http://wiki.ma.gnolia.com/Mirror%27d_API>

=cut

こんな感じでどうだろう?

config.yamlで指定して使い分けすりゃいいじゃんという思想もあるし、plugin指定で勝手にendpointを決めてくれるほうが分かりやすいと言うのも有るな。

あとdel.icio.usはタグが空白デリミタだけど、BluedotとMagnoliaはカンマデリミタなんで、そのあたりの置き換え処理も必要かもしれない。

アニメイトTVのEntryFullText書いた

| アニメイトTVのEntryFullText書いた - otsune's SnakeOil  を含むブックマーク はてなブックマーク - アニメイトTVのEntryFullText書いた - otsune's SnakeOil  アニメイトTVのEntryFullText書いた - otsune's SnakeOil  のブックマークコメント

アニメイトTVのATVニュース一覧を取得するPRaggerプラグイン - 水樹奈々@PRaggerというのを見つけたので、さっそくplaggerでも対応するためにEFT書いた。

ページが見つかりません。 - Plagger

assets/plugins/Filter-EntryFullText/animate_tv_nf.yaml

# http://www.animate.tv/nf/index.php
author: Masafumi Otsune
custom_feed_handle: http://www\.animate\.tv/nf/index\.php\?page[=\w&]+
custom_feed_follow_link: detail\.php\?id[=&\w]+
handle: http://www\.animate\.tv/nf/detail\.php\?id[=&\w]+
extract: <td align="left" valign="top" class="main_txt1">.*?【(.+?)】<!--
extract_capture: date
extract_xpath:
  body: //table[@border="0" and @width="555"]//td[@class="main_txt1"]

assets/plugins/Filter-EntryFullText/animate_tv_news.yaml

# http://www.animate.tv/news/index.php
author: Masafumi Otsune
custom_feed_handle: http://www\.animate\.tv/news/index2?\.php.+
custom_feed_follow_link: detail\.php\?id[=&\w]+
handle: http://www\.animate\.tv/news/detail\.php\?id=[=&\w]+
extract: <td align="right" class="main_txt2">.*?更新日:(.+?)</td>
extract_capture: date
extract_xpath:
  body: //table[@width="555"]//td[@class="main_txt1"]

んでニュースを生成するconfig.yamlの例

plugins:
  - module: Subscription::Config
    config:
      feed:
#        - url: http://www.animate.tv/nf/index.php?page=0
        - url: http://www.animate.tv/news/index2.php?type=fair,campaign

  - module: Filter::Rule
    rule:
      - module: RecentN
        count:  10

  - module: Filter::EntryFullText

  - module: Publish::Feed
    config:
      format: RSS
      dir: /usr/local/www/data/feed
      filename: animate-news.rss

feedのネタ元は http://www.animate.tv/news/index2.php?type=info,anime,game とか適当に設定してちょ。

トラックバック - http://subtech.g.hatena.ne.jp/otsune/20071025