Plagger the duct tape of internet

Preview:

DESCRIPTION

at XML developers' day 2006

Citation preview

Plaggerthe duct tape of the Web

Tatsuhiko Miyagawa miyagawa@gmail.com

Six Apart, Ltd. / Shibuya Perl MongersXML Developers' Day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

IRC#plagger-ja

chat.freenode.net(iso-2022-jp)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

アウェイっぽいので自己紹介

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko Miyagawa

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

http://www.vox.com/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

What is Plagger?

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

PluggableRSS/Atom

Aggregator

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Why Pluggable?

Just for a feed aggregation?

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

History

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

2002 Apr.baseball2rss

http://search.cpan.org/dist/WWW-Baseball-NPB/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

2003 Oct.rss2javascript

http://blog.bulknews.net/cookbook/blosxom/rss/rss2js.html

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

2004 Sep.bloglines2ipod

http://bulknews.net/lib/utils/bloglines2ipod/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

2004 Oct.rss2audiobook

http://bulknews.net/lib/utils/rss2audiobook/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

2005 Aug.bloglines2gmail

http://svn.bulknews.net/repos/public/bloglines2email/trunk/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

#!/usr/bin/perluse strict;use warnings;use LWP::UserAgent;use XML::RSS;

my $url = "http://example.com/rss.xml";my $agent = LWP::UserAgent->new;my $xml = $agent->get($url)->content;my $rss = XML::RSS->new; $rss->parse($xml);

for my $item (@{$rss->items}) { # do something with $item}

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

#!/usr/bin/perluse strict;use warnings;use LWP::UserAgent;use XML::RSS;

my $url = "http://example.com/rss.xml";my $agent = LWP::UserAgent->new;my $xml = $agent->get($url)->content;my $rss = XML::RSS->new; $rss->parse($xml);

for my $item (@{$rss->items}) { # do something with $item}

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

"HTTP リクエストがエラーになったら ?"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

#!/usr/bin/perluse strict;use warnings;use LWP::UserAgent;use XML::RSS;

my $url = "http://example.com/rss.xml";my $agent = LWP::UserAgent->new;my $res = $agent->get($url);if ($res->is_error) { die "Bah." }my $xml = $res->content;my $rss = XML::RSS->new; $rss->parse($xml);

for my $item (@{$rss->items}) { # do something with $item}

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

"Atom も読みたい !"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

#!/usr/bin/perluse strict;use warnings;use LWP::UserAgent;use XML::RSS;use XML::Atom::Feed;

my $url = "http://example.com/rss.xml";my $agent = LWP::UserAgent->new;my $res = $agent->get($url);if ($res->is_error) { die "Bah." }my $xml = $res->content;if ($res->content_type =~ /atom/) { my $feed = XML::Atom::Feed->new(\$xml);} else { my $rss = XML::RSS->new; $rss->parse($xml);}

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

If-Modified-Since で帯域節約したい!

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

#!/usr/bin/perluse strict;use warnings;use LWP::UserAgent;use XML::RSS;

my $url = "http://example.com/rss.xml";my $agent = LWP::UserAgent->new;my $local = cache_path_for($url);my $res = $agent->mirror($url, $local);if ($res->is_error) { die "Bah." }my $xml = $res->content;…

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

" 壊れたフィードもパースしたい! "

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Etc., etc.

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

他にも

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rss2opml

http://aruntx.com/software/rss2opml/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rss2pdf

http://rss2pdf.com/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rss2atom

brian.wanamaker.com/mybicycle/2004/02/rss2atom.html

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

atom2rss

http://www.2rss.com/software.php?page=atom2rss

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rss2ical

http://bura-bura.com/blog/archives/2004/06/22/rss2ical/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Bloglines2opml

http://mycvs.org/wp/wp-content/wp-transform.php

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rss2gmail

http://www.cs.utexas.edu/~karu/gmailrss/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rss2imap

http://rss2imap.sourceforge.jp/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

ebay2rss

http://www.2rss.com/software.php?page=ebay2rss

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

svn2rss

http://twiki.org/cgi-bin/view/Codev/Svn2rss

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

<any>2<any>

Where either of <any> is RSS|Atom|OPML

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

This is ridiculous.

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Different Languages,Different Bugs.No hackability

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

via http://www.atmarkit.co.jp/fnetwork/rensai/5minplagger/02.html

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

IRC, Eject, GrowlMSAgent, SSTP …

Filter Publish

StripRSSAdTruePermalinkEntryFullTextPipeThumbnailFindEnclosuresFetchEnclosureSpamAssassinRSSLiberalDateTimeURLBLResolveRelativeLink…

GmailDeliciousPDFMTFeedPlanetSpeech…

Notify

BloglinesConfigOPML, XOXOFile, DBI, FOAF …

Mixi, FrepaPOP3, iCaliTunes, AmazonYouTube …

Subscription

CustomFeed

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

IRC, Eject, GrowlMSAgent, SSTP …

Filter Publish

StripRSSAdTruePermalinkEntryFullTextPipeThumbnailFindEnclosuresFetchEnclosureSpamAssassinRSSLiberalDateTimeURLBLResolveRelativeLink…

GmailDeliciousPDFMTFeedPlanetSpeech…

Notify

BloglinesConfigOPML, XOXOFile, DBI, FOAF …

Mixi, FrepaPOP3, iCaliTunes, AmazonYouTube …

Subscription

CustomFeed

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

IRC, Eject, GrowlMSAgent, SSTP …

Filter Publish

StripRSSAdTruePermalinkEntryFullTextPipeThumbnailFindEnclosuresFetchEnclosureSpamAssassinRSSLiberalDateTimeURLBLResolveRelativeLink…

GmailDeliciousPDFMTFeedPlanetSpeech…

Notify

BloglinesConfigOPML, XOXOFile, DBI, FOAF …

Mixi, FrepaPOP3, iCaliTunes, AmazonYouTube …

Subscription

CustomFeed

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

IRC, Eject, GrowlMSAgent, SSTP …

Filter Publish

StripRSSAdTruePermalinkEntryFullTextPipeThumbnailFindEnclosuresFetchEnclosureSpamAssassinRSSLiberalDateTimeURLBLResolveRelativeLink…

GmailDeliciousPDFMTFeedPlanetSpeech…

Notify

BloglinesConfigOPML, XOXOFile, DBI, FOAF …

Mixi, FrepaPOP3, iCaliTunes, AmazonYouTube …

Subscription

CustomFeed

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Just like UNIX pipe

Subscribe OPML | StripRSSAd | ResolveRelativeLink \| Publish Feed --type=Atom

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

I believe RSS has the potential to be the “UNIX pipe of the internet” …

Ray OzzieCTO of Microsoft

http://rayozzie.spaces.live.com/blog/cns!FB3017FBB9B2E142!285.entry

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

"the Unix shell for Web 2.0"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

組み合わせの数

{CustomFeed,Subscription}/*.pm: 35

{Publish,Notify}/*.pm: 37

35 * 37 = 1295

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plagger Core features

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

RSS/AtomAuto-Discovery

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Support Feed formatsRSS 0.91 to Atom 1.0(XML::Feed + hacks)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Support parsingBroken feeds(XML::Liberal)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

HTTP optimizationsIf-Modified-Since /

gzip(URI::Fetch)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Podcast / VideocastSupport

(RSS 2.0 & Atom 1.0)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

PhotocastMedia RSS

iTunes RSS*

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

非同期ダウンロードcURL, wget,

HTTP::Parallel & HTTP::Async*

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

完全な国際化Unicode & Timezone

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Access tobrowser Cookies

IE, Safari, Firefox and w3m

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Screen-scrapingVia CutomFeed::*

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Stackable Plugins

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Rule-basedDispatch of Plugins

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plagger のインストール

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

省略http://plagger.org/trac/wiki/PlaggerQuickStart

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plaggerクイックチュートリアル

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Email クライアントでRSS フィードを読みたい!(Gmail, Thunderbird)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rss2email.yaml

plugins: - module: Subscription::Config config: feed: - http://bulknews.vox.com/library/posts/atom.xml - http://bulknews.typepad.com/blog/ - module: Publish::Gmail config: mailto: miyagawa@gmail.com

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

RSS in Gmail

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

HTML + Images

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Feed Image (Logo / Buddy Icon)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Search

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Auto grouping (“Conversations”)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Diff

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

オフライン(飛行機)でもフィードを読みたい!

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rss2email.yaml

plugins: - module: Subscription::Config config: feed: - http://bulknews.vox.com/library/posts/atom.xml - http://bulknews.typepad.com/blog/ - module: Filter::FindEnclosures - module: Filter::FetchEnclosure config: dir: /tmp - module: Publish::Gmail config: mailto: miyagawa@gmail.com attach_enclosures: 1

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Offline Mode

POP3 + Thunderbird

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

" フィードのリストをYAML で管理するのメンドウ "

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

opml2email.yamlplugins: - module: Subscription::OPML config: url: http://example.com/subscription.opml - module: Publish::Gmail config: mailto: miyagawa@gmail.com

# subscription.opml<?xml version="1.0"?><opml><outline title="Subscriptions"> <outline title="miyagawa" type="rss" xmlUrl="http://bulknews.typepad.com/blog/atom.xml" /> <outline title="miyagawa on Vox" type="rss" htmlUrl="http://bulknews.vox.com/" /></outline></opml>

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

"OPML を手動で編集するのはテラダルス "

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

filesub2email.yaml

plugins: - module: Subscription::File config: url: file:///path/to/subscription.txt - module: Publish::Gmail config: mailto: miyagawa@gmail.com

> cat subscription.txthttp://bulknews.typepad.com/blog/atom.xmlhttp://bulknews.vox.com/>

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

"1000 フィード以上読んでると自分のマシンで読むのは帯域のムダ。 Bloglines にクロールさせたい。 "

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

bloglines2email.yaml

plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah - module: Publish::Gmail config: mailto: miyagawa@gmail.com

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

" それ Livedoor Reader で "

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

bloglines2email.yaml

plugins: - module: Subscription::LivedoorReader config: username: YOU@example.com password: blahblahblah - module: Publish::Gmail config: mailto: miyagawa@gmail.com

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

"Gmail / Thunderbird からdel.icio.us にブクマしたい !"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

bloglines2email.yaml

plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah

- module: Widget::Simple config: widget: delicious

- module: Publish::Gmail config: mailto: miyagawa@gmail.com

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

" それはてなブックマークで "

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

bloglines2email.yaml

plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah

- module: Widget::Simple config: widget: hatena_bookmark_users

- module: Publish::Gmail config: mailto: miyagawa@gmail.com

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

"RSS 広告ウザス "

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

bloglines2email.yaml

plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah

- module: Widget::Simple config: widget: delicious

- module: Filter::StripRSSAd

- module: Publish::Gmail config: mailto: miyagawa@gmail.com

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/23 XML Developers' Day #92006/11/23 XML Developers' Day #9

Quick tourFor more plugins

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plugin phases (types)

SubscriptionAggregatorCustomFeed

FilterPublishSearchNotify

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plugin phases (types)

SubscriptionAggregatorCustomFeed

FilterPublishSearchNotify

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Subscription

load subscriptions(list the feeds/URLs to aggregate)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Subscription::Config - module: Subscription::Config config: feed: - http://www.yapcchicago.org/feed/ - http://tokyo.yapcasia.org/blog/

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

- module: Subscription::OPML config: url: http://www.example.com/subs.opml

# subs.opml <opml> <outline xmlUrl="http://www.yapcchicago.org/feed/" /> <outline htmlUrl="http://tokyo.yapcasia.org/blog/" /> </opml>

Subscription::OPML

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

- module: Subscription::File config: url: file:///path/to/subscription.txt

% cat subscription.txt http://www.yapcchicago.org/feed/ http://tokyo.yapcasia.org/blog/ %

Subscription::File

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Subscription::XOXO - module: Subscription::XOXO config: url: http://www.example.com/subscription.html

# subscription.html <ul class="xoxo"> <li><a href="http://www.yapcchicago.org/feed/">YAPC::NA</a></li> <li><a href="http://tokyo.yapcasia.org/blog/">YAPC::NA</a></li> </ul>

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Subscription::Bookmarks

Read bookmarks file of IE, Firefox and Safari

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plugin phases (types)

SubscriptionAggregatorCustomFeed

FilterPublishSearchNotify

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Filter

Normalize / Repair feed metadataUpgrade feed content

Filter feed content using text filtersInvoke some action on entries

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Filter::EntryFullText

本文なしのフィードをアップグレード個別 HTML を取得して正規表現 / XPath

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Filter::TruePermalink

リダイレクト URL などを Canonicalize(e.g. http://…/go.php?url=….)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Filter::FindEnclosures

コンテンツからエンクロージャを抽出<a href="http://…./foo.mp3">episode

#1</a>

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plugin phases (types)

SubscriptionAggregatorCustomFeed

FilterPublishSearchNotify

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Publish

Publish aggregated entry to online servicesreBlogging

Convert feeds to other formats

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Publish::Feed

Republish feed in RSS/AtomGood to use with scrapers

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Publish::MT

Reblog entries using MT XML-RPC

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Publish::MTWidget

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Publish::Email

text/plain, multipart/alternativePluggable email protocols

(SMTP, SMTP Auth, IMAP, Maildir …)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Publish::iCal

Publish iCal feeds out of RSS/Atom

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Publish::Excel

仕事の合間に !

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plugin phases (types)

SubscriptionAggregatorCustomFeed

FilterPublishSearchNotify

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Search

Index aggregated entries on search engines

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Search::Spotlight

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Search::Estraier

Uses HyperEstraier XMLRPC node API

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Search::Lucene*

Use Lucene WebService API (OpenSearch 1.1 and Atom)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plugin phases (types)

SubscriptionAggregatorCustomFeed

FilterPublishSearchNotify

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Notify

Notify feed updates in various ways

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Notify::Growl

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Notify::Balloon

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Notify::MSAgent

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Notify::Eject

Supports: Windows, Linux, FreeBSD and Mac OSX!

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Notify::Pizza

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Notify::Pizza

Now it does Sushi too!

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plagger に対する誤解

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

それ Plagger でできるよ

それプラズマで説明できるよ

http://d.hatena.ne.jp/sugarcut/20061117/p1

それ Pla 脳

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

何でもできる

… わけじゃない

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plagger is a"Feed" aggregator

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plagger::Subscription

Plagger::Feed

authoridlinktitletagsurlentries

Plagger::Feed

authoridlinktitletagsurlentries

Plagger::Feed

authoridlinktitletagsurlentries

Plagger::Entry

authoridlinkpermalinktitletagsenclosures

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

ピザ Pla の意義

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

"the Unix shell for Web 2.0"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

"RSS is the Standard IO for the Web"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

"RSS is the Standard IO for the Web"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Feed formats

RSS 0.91RSS 2.0RSS1.0 / RDF

Atom 1.0

JSON

iCal

OPML

XOXOXBEL

Sitemaps

attention.xml

Amazon API

Google APIOpenSearch

AtomPP

GData

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

rvw:

Enclosures

Feed Vocabulary / Extensions

Photocast

iTunes RSSMedia RSS

Dublin Core

FOAF

microformats

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plagger = The duct tape of the web.

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Example:Location metadata

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

N 37.7782 W 122.3973

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

GeoRSS

<georss:point>37.7782 -122.3973</georss:point>

<georss:where> <gml:Point> <gml:pos>37.7782 -122.3973</gml:pos> </gml:Point></georss:where>

xmlns:georss="http://www.georss.org/georss"xmlns:gml="http://www.opengis.net/gml"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

RDF geo vocabulary

<foaf:based_near> <geo:Point> <geo:lat>35.678</geo:lat> <geo:long>139.770</geo:long> </geo:Point></foaf:based_near>

xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Flickr geo tag

<media:category scheme="urn:flickr:tags">geo:lat=37.7782 geo:lon=-122.3973</media:category>

xmlns:media="http://search.yahoo.com/mrss/"

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

GeoURL

<meta name="ICBM" content="37.7782, -122.3973" />

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

geo microformats

<div class="geo"> <span class="latitude">37.7782</span> <span class="longitude">-122.3973</span></div>

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Links to Google Maps

<a href="http://maps.google.com/maps?q=37.7782,-122.3973&z=16">Link to Google Maps</a>

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Eznavi mail

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Photo EXIF

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

adr

<div class="adr"> <div class="street-address">548 4th St.</div> <span class="locality">San Francisco</span>, <span class="region">CA</span> <span class="postal-code">94107</span> <div class="country-name">U.S.A.</div></div>

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

We don't careabout format diffs.

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

GeoRSS

<georss:point>37.7782 -122.3973</georss:point>

<georss:where> <gml:Point> <gml:pos>37.7782 -122.3973</gml:pos> </gml:Point></georss:where>

Namespace::GeoRSS

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

RDF geo vocabulary

<foaf:based_near> <geo:Point> <geo:lat>35.678</geo:lat> <geo:long>139.770</geo:long> </geo:Point></foaf:based_near>

Namespace::Geo

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Flickr geo tag

<media:category scheme="urn:flickr:tags">geo:lat=37.7782 geo:lon=-122.3973</media:category>

Filter::geotagged

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

GeoURL

<meta name="ICBM" content="37.7782, -122.3973" />

Filter::GeoURL

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

geo microformats

<div class="geo"> <span class="latitude">37.7782</span> <span class="longitude">-122.3973</span></div>

Filter::Microformats::geo

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Links to Google Maps

<a href="http://maps.google.com/maps?q=37.7782,-122.3973&z=16">Link to Google Maps</a>

Filter::ExtractMapsLinks

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Eznavi mail

Filter::ExtractMapsLinks

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Photo EXIF

Filter::FetchEnclosure +Filter::ExtractEXIF

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

adr

<div class="adr"> <div class="street-address">548 4th St.</div> <span class="locality">San Francisco</span>, <span class="region">CA</span> <span class="postal-code">94107</span> <div class="country-name">U.S.A.</div></div>

Filter::Microformats::adr +Filter::Geocoding::US

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Publish::KMLPublish::GoogleMaps

Publish::Feed(with geotags)

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Everything's donein plugins

= Clean & extensible.

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Plaggerdev. Status

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Version0.7.13

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Coming Soon …

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

iTunes RSS support

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Geo extensions

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Enclosure processors

ffmpeg, Sync::PSP, Sync::iPodVideo

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Pluggable summarizer

& text formatter

Lingua::EN::Summarize, Text::Original, HTML::WikiConverter, HTML::FormatText

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Rich Media metadata

ID3 tag in enclosuresLinks to imdb.com / amazon.com

hReview microformats

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Calendar Support

iCal parser & emitterhCalendar microformats.ics attached in emails

Sync::SyncML

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Email refactoring

text/plain, iso-2022-jp supportPluggable storage engines

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

http://plagger.org/

Planet, Mailing List, IRCBug Tracking, SVN repository

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

#plagger-ja on freenode

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Join Us!

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/11/24 XML developers' day #92006/11/24 XML developers' day #9

Thank you

Questions?

Recommended