0
Plagger the duct tape of the Web Tatsuhiko Miyagawa   [email_address] Six Apart, Ltd. / Shibuya Perl Mongers XML Developer...
<ul><li>IRC </li></ul><ul><li>#plagger-ja </li></ul><ul><li>chat.freenode.net </li></ul><ul><li>(iso-2022-jp) </li></ul>
<ul><li>アウェイっぽいので </li></ul><ul><li>自己紹介 </li></ul>
<ul><li>Tatsuhiko Miyagawa </li></ul>
 
 
http://www.vox.com/
<ul><li>What is Plagger? </li></ul>
 
 
 
 
<ul><li>Pl uggable </li></ul><ul><li>RSS/Atom </li></ul><ul><li>Agg regato r </li></ul>
<ul><li>Why Pluggable? </li></ul><ul><li>Just  for a feed aggregation? </li></ul>
<ul><li>History </li></ul>
<ul><li>2002 Apr. </li></ul><ul><li>baseball2rss </li></ul><ul><li>http://search.cpan.org/dist/WWW-Baseball-NPB/ </li></ul>
<ul><li>2003 Oct. </li></ul><ul><li>rss2javascript </li></ul><ul><li>http://blog.bulknews.net/cookbook/blosxom/rss/rss2js....
<ul><li>2004 Sep. </li></ul><ul><li>bloglines2ipod </li></ul><ul><li>http://bulknews.net/lib/utils/bloglines2ipod/ </li></ul>
 
<ul><li>2004 Oct. </li></ul><ul><li>rss2audiobook </li></ul><ul><li>http://bulknews.net/lib/utils/rss2audiobook/ </li></ul>
<ul><li>2005 Aug. </li></ul><ul><li>bloglines2gmail </li></ul><ul><li>http://svn.bulknews.net/repos/public/bloglines2email...
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quo...
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quo...
<ul><li>&quot;HTTP  リクエストが </li></ul><ul><li>エラーになったら ?&quot; </li></ul>
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quo...
<ul><li>&quot;Atom  も読みたい !&quot; </li></ul>
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; use XML::Atom::Feed; my $url = &quot;http://ex...
<ul><li>If-Modified-Since  で </li></ul><ul><li>帯域節約したい! </li></ul>
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quo...
<ul><li>&quot; 壊れたフィードも </li></ul><ul><li>パースしたい! &quot; </li></ul>
<ul><li>Etc., etc. </li></ul>
<ul><li>他にも </li></ul>
<ul><li>rss2opml </li></ul><ul><li>http://aruntx.com/software/rss2opml/ </li></ul>
<ul><li>rss2pdf </li></ul><ul><li>http://rss2pdf.com/ </li></ul>
<ul><li>rss2atom </li></ul><ul><li>brian.wanamaker.com/mybicycle/2004/02/rss2atom.html </li></ul>
<ul><li>atom2rss </li></ul><ul><li>http://www.2rss.com/software.php?page=atom2rss </li></ul>
<ul><li>rss2ical </li></ul><ul><li>http://bura-bura.com/blog/archives/2004/06/22/rss2ical/ </li></ul>
<ul><li>Bloglines2opml </li></ul><ul><li>http://mycvs.org/wp/wp-content/wp-transform.php </li></ul>
<ul><li>rss2gmail </li></ul><ul><li>http://www.cs.utexas.edu/~karu/gmailrss/ </li></ul>
<ul><li>rss2imap </li></ul><ul><li>http://rss2imap.sourceforge.jp/ </li></ul>
<ul><li>ebay2rss </li></ul><ul><li>http://www.2rss.com/software.php?page=ebay2rss </li></ul>
<ul><li>svn2rss </li></ul><ul><li>http://twiki.org/cgi-bin/view/Codev/Svn2rss </li></ul>
<ul><li><any>2<any> </li></ul>Where either of <any> is RSS|Atom|OPML
<ul><li>This is ridiculous. </li></ul>
<ul><li>Different Languages, </li></ul><ul><li>Different Bugs. </li></ul><ul><li>No hackability </li></ul>
 
via http://www.atmarkit.co.jp/fnetwork/rensai/5minplagger/02.html
IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures Fetc...
IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures Fetc...
IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures Fetc...
IRC, Eject,  Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures Fet...
<ul><li>Just like UNIX pipe </li></ul>Subscribe OPML | StripRSSAd | ResolveRelativeLink   | Publish Feed --type=Atom
I believe RSS has the potential to be the “UNIX pipe of the internet” … Ray Ozzie CTO of Microsoft http://rayozzie.spaces....
&quot;the Unix shell for Web 2.0&quot;
<ul><li>組み合わせの数 </li></ul><ul><li>{CustomFeed,Subscription}/*.pm: 35 </li></ul><ul><li>{Publish,Notify}/*.pm: 37 </li></ul...
<ul><li>Plagger  </li></ul><ul><li>Core features </li></ul>
<ul><li>RSS/Atom </li></ul><ul><li>Auto-Discovery </li></ul>
<ul><li>Support Feed formats </li></ul><ul><li>RSS 0.91 to Atom 1.0 </li></ul><ul><li>(XML::Feed + hacks) </li></ul>
<ul><li>Support parsing </li></ul><ul><li>Broken feeds </li></ul><ul><li>(XML::Liberal) </li></ul>
<ul><li>HTTP optimizations </li></ul><ul><li>If-Modified-Since / gzip </li></ul><ul><li>(URI::Fetch) </li></ul>
<ul><li>Podcast / Videocast </li></ul><ul><li>Support </li></ul><ul><li>(RSS 2.0 & Atom 1.0) </li></ul>
<ul><li>Photocast </li></ul><ul><li>Media RSS </li></ul><ul><li>iTunes RSS* </li></ul>
<ul><li>非同期ダウンロード </li></ul><ul><li>cURL, wget, HTTP::Parallel & HTTP::Async* </li></ul>
<ul><li>完全な国際化 </li></ul><ul><li>Unicode & Timezone </li></ul>
<ul><li>Access to </li></ul><ul><li>browser Cookies </li></ul><ul><li>IE, Safari, Firefox and w3m </li></ul>
<ul><li>Screen-scraping </li></ul><ul><li>Via CutomFeed::* </li></ul>
<ul><li>Stackable Plugins </li></ul>
<ul><li>Rule-based </li></ul><ul><li>Dispatch of Plugins </li></ul>
<ul><li>Plagger  の </li></ul><ul><li>インストール </li></ul>
 
 
<ul><li>省略 </li></ul>http://plagger.org/trac/wiki/PlaggerQuickStart
<ul><li>Plagger </li></ul><ul><li>クイックチュートリアル </li></ul>
<ul><li>Email  クライアントで </li></ul><ul><li>RSS フィードを読みたい! </li></ul><ul><li>(Gmail, Thunderbird) </li></ul>
rss2email.yaml plugins: - module: Subscription::Config config: feed: - http://bulknews.vox.com/library/posts/atom.xml - ht...
RSS in Gmail
HTML + Images
Feed Image (Logo / Buddy Icon)
Search
Auto grouping (“Conversations”)
Diff
<ul><li>オフライン(飛行機)でも </li></ul><ul><li>フィードを読みたい! </li></ul>
rss2email.yaml plugins: - module: Subscription::Config config: feed: - http://bulknews.vox.com/library/posts/atom.xml - ht...
Offline Mode POP3 + Thunderbird
<ul><li>&quot; フィードのリストを </li></ul><ul><li>YAML  で管理するのメンドウ &quot; </li></ul>
opml2email.yaml plugins: - module: Subscription::OPML config: url: http://example.com/subscription.opml - module: Publish:...
<ul><li>&quot;OPML  を手動で編集するのはテラダルス &quot; </li></ul>
filesub2email.yaml plugins: - module: Subscription::File config: url: file:///path/to/subscription.txt - module: Publish::...
<ul><li>&quot;1000 フィード以上読んでると自分のマシンで読むのは帯域のムダ。 Bloglines  にクロールさせたい。 &quot; </li></ul>
bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah -...
<ul><li>&quot; それ  Livedoor Reader  で &quot; </li></ul>
bloglines2email.yaml plugins: - module: Subscription::LivedoorReader config: username: YOU@example.com password: blahblahb...
<ul><li>&quot;Gmail / Thunderbird  から </li></ul><ul><li>del.icio.us  にブクマしたい !&quot; </li></ul>
bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah -...
 
<ul><li>&quot; それはてなブックマークで &quot; </li></ul>
bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah -...
 
<ul><li>&quot;RSS 広告ウザス &quot; </li></ul>
bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah -...
<ul><li>Quick tour </li></ul><ul><li>For more plugins </li></ul>
Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Fil...
Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Fil...
<ul><li>Subscription </li></ul><ul><li>load subscriptions </li></ul><ul><li>(list the feeds/URLs to aggregate) </li></ul>
<ul><li>Subscription::Config </li></ul>- module: Subscription::Config config: feed: - http://www.yapcchicago.org/feed/ - h...
<ul><li>Subscription::OPML </li></ul>- module: Subscription::OPML config: url: http://www.example.com/subs.opml # subs.opm...
<ul><li>Subscription::File </li></ul>- module: Subscription::File config: url: file:///path/to/subscription.txt % cat subs...
<ul><li>Subscription::XOXO </li></ul>- module: Subscription::XOXO config: url: http://www.example.com/subscription.html # ...
<ul><li>Subscription::Bookmarks </li></ul><ul><li>Read bookmarks file of IE, Firefox and Safari </li></ul>
Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Fil...
<ul><li>Filter </li></ul><ul><li>Normalize / Repair feed metadata </li></ul><ul><li>Upgrade feed content </li></ul><ul><li...
<ul><li>Filter::EntryFullText </li></ul><ul><li>本文なしのフィードをアップグレード </li></ul><ul><li>個別 HTML を取得して正規表現  / XPath   </li></ul>
<ul><li>Filter::TruePermalink </li></ul><ul><li>リダイレクト URL などを  Canonicalize </li></ul><ul><li>(e.g. http://…/go.php?url=…...
<ul><li>Filter::FindEnclosures </li></ul><ul><li>コンテンツからエンクロージャを抽出 </li></ul><ul><li><a href=&quot;http://…./foo.mp3&quot;...
Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Fil...
<ul><li>Publish </li></ul><ul><li>Publish aggregated entry to online services </li></ul><ul><li>reBlogging </li></ul><ul><...
<ul><li>Publish::Feed </li></ul><ul><li>Republish feed in RSS/Atom </li></ul><ul><li>Good to use with scrapers </li></ul>
<ul><li>Publish::MT </li></ul><ul><li>Reblog entries using MT XML-RPC </li></ul>
<ul><li>Publish::MTWidget </li></ul>
<ul><li>Publish::Email </li></ul><ul><li>text/plain, multipart/alternative </li></ul><ul><li>Pluggable email protocols </l...
<ul><li>Publish::iCal </li></ul><ul><li>Publish iCal feeds out of RSS/Atom </li></ul>
<ul><li>Publish::Excel </li></ul>仕事の合間に !
Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Fil...
<ul><li>Search </li></ul><ul><li>Index aggregated entries on search engines </li></ul>
<ul><li>Search::Spotlight </li></ul>
<ul><li>Search::Estraier </li></ul><ul><li>Uses HyperEstraier XMLRPC node API </li></ul>
<ul><li>Search::Lucene* </li></ul><ul><li>Use Lucene WebService API  </li></ul><ul><li>(OpenSearch 1.1 and Atom) </li></ul>
Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Fil...
<ul><li>Notify </li></ul><ul><li>Notify feed updates in various ways </li></ul>
<ul><li>Notify::Growl </li></ul>
<ul><li>Notify::Balloon </li></ul>
<ul><li>Notify::MSAgent </li></ul>
Notify::Eject Supports: Windows, Linux, FreeBSD and Mac OSX!
<ul><li>Notify::Pizza </li></ul>
<ul><li>Notify::Pizza </li></ul>Now it does Sushi too!
<ul><li>Plagger に </li></ul><ul><li>対する誤解 </li></ul>
 
http://d.hatena.ne.jp/sugarcut/20061117/p1 それ Pla 脳 それ Plagger で できるよ それプラズマで 説明できるよ
 
<ul><li>何でもできる </li></ul><ul><li>… わけじゃない </li></ul>
 
<ul><li>Plagger is a </li></ul><ul><li>&quot;Feed&quot; aggregator </li></ul>
Plagger::Subscription Plagger::Feed author id link title tags url entries Plagger::Feed author id link title tags url entr...
ピザ  Pla  の意義
 
 
 
&quot;the Unix shell for Web 2.0&quot;
&quot;RSS is the Standard IO for the Web&quot;
&quot;RSS is the  Standard  IO for the Web&quot;
Feed formats RSS 0.91 RSS 2.0 RSS1.0 / RDF Atom 1.0 JSON iCal OPML XOXO XBEL Sitemaps attention.xml Amazon API Google API ...
Feed Vocabulary / Extensions rvw: Enclosures Photocast iTunes RSS Media RSS Dublin Core FOAF microformats
 
Plagger = The duct tape of the web.
<ul><li>Example: </li></ul><ul><li>Location metadata </li></ul>
N 37.7782 W 122.3973
GeoRSS <georss:point>37.7782 -122.3973</georss:point>  <georss:where> <gml:Point> <gml:pos>37.7782 -122.3973</gml:pos> </g...
RDF geo vocabulary <foaf:based_near> <geo:Point> <geo:lat>35.678</geo:lat> <geo:long>139.770</geo:long> </geo:Point> </foa...
Flickr geo tag <media:category scheme=&quot;urn:flickr:tags&quot;> geo:lat=37.7782 geo:lon=-122.3973 </media:category> xml...
GeoURL <meta name=&quot;ICBM&quot; content=&quot;37.7782, -122.3973&quot; />
geo microformats <div class=&quot;geo&quot;> <span class=&quot;latitude&quot;>37.7782</span> <span class=&quot;longitude&q...
Links to Google Maps <a href=&quot;http://maps.google.com/maps?q=37.7782,-122.3973&z=16&quot;> Link to Google Maps</a>
Eznavi mail
Photo EXIF
adr  <div class=&quot;adr&quot;> <div class=&quot;street-address&quot;>548 4th St.</div> <span class=&quot;locality&quot;>...
<ul><li>We don't care </li></ul><ul><li>about format diffs. </li></ul>
GeoRSS <georss:point>37.7782 -122.3973</georss:point>  <georss:where> <gml:Point> <gml:pos>37.7782 -122.3973</gml:pos> </g...
RDF geo vocabulary <foaf:based_near> <geo:Point> <geo:lat>35.678</geo:lat> <geo:long>139.770</geo:long> </geo:Point> </foa...
Flickr geo tag <media:category scheme=&quot;urn:flickr:tags&quot;> geo:lat=37.7782 geo:lon=-122.3973 </media:category> Fil...
GeoURL <meta name=&quot;ICBM&quot; content=&quot;37.7782, -122.3973&quot; /> Filter::GeoURL
geo microformats <div class=&quot;geo&quot;> <span class=&quot;latitude&quot;>37.7782</span> <span class=&quot;longitude&q...
Links to Google Maps <a href=&quot;http://maps.google.com/maps?q=37.7782,-122.3973&z=16&quot;> Link to Google Maps</a>  Fi...
Eznavi mail Filter::ExtractMapsLinks
Photo EXIF Filter::FetchEnclosure + Filter::ExtractEXIF
adr  <div class=&quot;adr&quot;> <div class=&quot;street-address&quot;>548 4th St.</div> <span class=&quot;locality&quot;>...
<ul><li>Publish::KML </li></ul><ul><li>Publish::GoogleMaps </li></ul><ul><li>Publish::Feed </li></ul><ul><li>(with geotags...
<ul><li>Everything's done </li></ul><ul><li>in plugins </li></ul><ul><li>= Clean & extensible. </li></ul>
<ul><li>Plagger </li></ul><ul><li>dev. Status </li></ul>
<ul><li>Version </li></ul><ul><li>0.7.13 </li></ul>
<ul><li>Coming Soon … </li></ul>
<ul><li>iTunes RSS support </li></ul>
<ul><li>Geo extensions </li></ul>
<ul><li>Enclosure processors </li></ul><ul><li>ffmpeg, Sync::PSP, Sync::iPodVideo </li></ul>
<ul><li>Pluggable summarizer </li></ul><ul><li>& text formatter </li></ul><ul><li>Lingua::EN::Summarize, Text::Original, H...
<ul><li>Rich Media metadata </li></ul><ul><li>ID3 tag in enclosures </li></ul><ul><li>Links to imdb.com / amazon.com </li>...
<ul><li>Calendar Support </li></ul><ul><li>iCal parser & emitter </li></ul><ul><li>hCalendar microformats </li></ul><ul><l...
<ul><li>Email refactoring </li></ul><ul><li>text/plain, iso-2022-jp support </li></ul><ul><li>Pluggable storage engines </...
<ul><li>http://plagger.org/ </li></ul><ul><li>Planet, Mailing List, IRC </li></ul><ul><li>Bug Tracking, SVN repository </l...
<ul><li>#plagger-ja on freenode </li></ul>
<ul><li>Join Us! </li></ul>
<ul><li>Thank you </li></ul><ul><li>Questions? </li></ul>
Upcoming SlideShare
Loading in...5
×

Plagger the duct tape of internet

4,696

Published on

at XML developers' day 2006

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,696
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
53
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Plagger the duct tape of internet"

  1. 1. Plagger the duct tape of the Web Tatsuhiko Miyagawa [email_address] Six Apart, Ltd. / Shibuya Perl Mongers XML Developers' Day #9
  2. 2. <ul><li>IRC </li></ul><ul><li>#plagger-ja </li></ul><ul><li>chat.freenode.net </li></ul><ul><li>(iso-2022-jp) </li></ul>
  3. 3. <ul><li>アウェイっぽいので </li></ul><ul><li>自己紹介 </li></ul>
  4. 4. <ul><li>Tatsuhiko Miyagawa </li></ul>
  5. 7. http://www.vox.com/
  6. 8. <ul><li>What is Plagger? </li></ul>
  7. 13. <ul><li>Pl uggable </li></ul><ul><li>RSS/Atom </li></ul><ul><li>Agg regato r </li></ul>
  8. 14. <ul><li>Why Pluggable? </li></ul><ul><li>Just for a feed aggregation? </li></ul>
  9. 15. <ul><li>History </li></ul>
  10. 16. <ul><li>2002 Apr. </li></ul><ul><li>baseball2rss </li></ul><ul><li>http://search.cpan.org/dist/WWW-Baseball-NPB/ </li></ul>
  11. 17. <ul><li>2003 Oct. </li></ul><ul><li>rss2javascript </li></ul><ul><li>http://blog.bulknews.net/cookbook/blosxom/rss/rss2js.html </li></ul>
  12. 18. <ul><li>2004 Sep. </li></ul><ul><li>bloglines2ipod </li></ul><ul><li>http://bulknews.net/lib/utils/bloglines2ipod/ </li></ul>
  13. 20. <ul><li>2004 Oct. </li></ul><ul><li>rss2audiobook </li></ul><ul><li>http://bulknews.net/lib/utils/rss2audiobook/ </li></ul>
  14. 21. <ul><li>2005 Aug. </li></ul><ul><li>bloglines2gmail </li></ul><ul><li>http://svn.bulknews.net/repos/public/bloglines2email/trunk/ </li></ul>
  15. 22. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quot;; 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 }
  16. 23. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quot;; 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 }
  17. 24. <ul><li>&quot;HTTP リクエストが </li></ul><ul><li>エラーになったら ?&quot; </li></ul>
  18. 25. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quot;; my $agent = LWP::UserAgent->new; my $res = $agent->get($url); if ($res->is_error) { die &quot;Bah.&quot; } my $xml = $res->content; my $rss = XML::RSS->new; $rss->parse($xml); for my $item (@{$rss->items}) { # do something with $item }
  19. 26. <ul><li>&quot;Atom も読みたい !&quot; </li></ul>
  20. 27. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; use XML::Atom::Feed; my $url = &quot;http://example.com/rss.xml&quot;; my $agent = LWP::UserAgent->new; my $res = $agent->get($url); if ($res->is_error) { die &quot;Bah.&quot; } 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); }
  21. 28. <ul><li>If-Modified-Since で </li></ul><ul><li>帯域節約したい! </li></ul>
  22. 29. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quot;; my $agent = LWP::UserAgent->new; my $local = cache_path_for($url); my $res = $agent->mirror($url, $local); if ($res->is_error) { die &quot;Bah.&quot; } my $xml = $res->content; …
  23. 30. <ul><li>&quot; 壊れたフィードも </li></ul><ul><li>パースしたい! &quot; </li></ul>
  24. 31. <ul><li>Etc., etc. </li></ul>
  25. 32. <ul><li>他にも </li></ul>
  26. 33. <ul><li>rss2opml </li></ul><ul><li>http://aruntx.com/software/rss2opml/ </li></ul>
  27. 34. <ul><li>rss2pdf </li></ul><ul><li>http://rss2pdf.com/ </li></ul>
  28. 35. <ul><li>rss2atom </li></ul><ul><li>brian.wanamaker.com/mybicycle/2004/02/rss2atom.html </li></ul>
  29. 36. <ul><li>atom2rss </li></ul><ul><li>http://www.2rss.com/software.php?page=atom2rss </li></ul>
  30. 37. <ul><li>rss2ical </li></ul><ul><li>http://bura-bura.com/blog/archives/2004/06/22/rss2ical/ </li></ul>
  31. 38. <ul><li>Bloglines2opml </li></ul><ul><li>http://mycvs.org/wp/wp-content/wp-transform.php </li></ul>
  32. 39. <ul><li>rss2gmail </li></ul><ul><li>http://www.cs.utexas.edu/~karu/gmailrss/ </li></ul>
  33. 40. <ul><li>rss2imap </li></ul><ul><li>http://rss2imap.sourceforge.jp/ </li></ul>
  34. 41. <ul><li>ebay2rss </li></ul><ul><li>http://www.2rss.com/software.php?page=ebay2rss </li></ul>
  35. 42. <ul><li>svn2rss </li></ul><ul><li>http://twiki.org/cgi-bin/view/Codev/Svn2rss </li></ul>
  36. 43. <ul><li><any>2<any> </li></ul>Where either of <any> is RSS|Atom|OPML
  37. 44. <ul><li>This is ridiculous. </li></ul>
  38. 45. <ul><li>Different Languages, </li></ul><ul><li>Different Bugs. </li></ul><ul><li>No hackability </li></ul>
  39. 47. via http://www.atmarkit.co.jp/fnetwork/rensai/5minplagger/02.html
  40. 48. IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures FetchEnclosure SpamAssassin RSSLiberalDateTime URLBL ResolveRelativeLink … Gmail Delicious PDF MT Feed Planet Speech … Notify Bloglines Config OPML, XOXO File, DBI, FOAF … Mixi, Frepa POP3, iCal iTunes, Amazon YouTube … Subscription CustomFeed
  41. 49. IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures FetchEnclosure SpamAssassin RSSLiberalDateTime URLBL ResolveRelativeLink … Gmail Delicious PDF MT Feed Planet Speech … Notify Bloglines Config OPML, XOXO File, DBI, FOAF … Mixi, Frepa POP3, iCal iTunes, Amazon YouTube … Subscription CustomFeed
  42. 50. IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures FetchEnclosure SpamAssassin RSSLiberalDateTime URLBL ResolveRelativeLink … Gmail Delicious PDF MT Feed Planet Speech … Notify Bloglines Config OPML, XOXO File, DBI, FOAF … Mixi, Frepa POP3, iCal iTunes, Amazon YouTube … Subscription CustomFeed
  43. 51. IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures FetchEnclosure SpamAssassin RSSLiberalDateTime URLBL ResolveRelativeLink … Gmail Delicious PDF MT Feed Planet Speech … Notify Bloglines Config OPML , XOXO File, DBI, FOAF … Mixi, Frepa POP3, iCal iTunes, Amazon YouTube … Subscription CustomFeed
  44. 52. <ul><li>Just like UNIX pipe </li></ul>Subscribe OPML | StripRSSAd | ResolveRelativeLink | Publish Feed --type=Atom
  45. 53. I believe RSS has the potential to be the “UNIX pipe of the internet” … Ray Ozzie CTO of Microsoft http://rayozzie.spaces.live.com/blog/cns!FB3017FBB9B2E142!285.entry
  46. 54. &quot;the Unix shell for Web 2.0&quot;
  47. 55. <ul><li>組み合わせの数 </li></ul><ul><li>{CustomFeed,Subscription}/*.pm: 35 </li></ul><ul><li>{Publish,Notify}/*.pm: 37 </li></ul><ul><li>35 * 37 = 1295 </li></ul>
  48. 56. <ul><li>Plagger </li></ul><ul><li>Core features </li></ul>
  49. 57. <ul><li>RSS/Atom </li></ul><ul><li>Auto-Discovery </li></ul>
  50. 58. <ul><li>Support Feed formats </li></ul><ul><li>RSS 0.91 to Atom 1.0 </li></ul><ul><li>(XML::Feed + hacks) </li></ul>
  51. 59. <ul><li>Support parsing </li></ul><ul><li>Broken feeds </li></ul><ul><li>(XML::Liberal) </li></ul>
  52. 60. <ul><li>HTTP optimizations </li></ul><ul><li>If-Modified-Since / gzip </li></ul><ul><li>(URI::Fetch) </li></ul>
  53. 61. <ul><li>Podcast / Videocast </li></ul><ul><li>Support </li></ul><ul><li>(RSS 2.0 & Atom 1.0) </li></ul>
  54. 62. <ul><li>Photocast </li></ul><ul><li>Media RSS </li></ul><ul><li>iTunes RSS* </li></ul>
  55. 63. <ul><li>非同期ダウンロード </li></ul><ul><li>cURL, wget, HTTP::Parallel & HTTP::Async* </li></ul>
  56. 64. <ul><li>完全な国際化 </li></ul><ul><li>Unicode & Timezone </li></ul>
  57. 65. <ul><li>Access to </li></ul><ul><li>browser Cookies </li></ul><ul><li>IE, Safari, Firefox and w3m </li></ul>
  58. 66. <ul><li>Screen-scraping </li></ul><ul><li>Via CutomFeed::* </li></ul>
  59. 67. <ul><li>Stackable Plugins </li></ul>
  60. 68. <ul><li>Rule-based </li></ul><ul><li>Dispatch of Plugins </li></ul>
  61. 69. <ul><li>Plagger の </li></ul><ul><li>インストール </li></ul>
  62. 72. <ul><li>省略 </li></ul>http://plagger.org/trac/wiki/PlaggerQuickStart
  63. 73. <ul><li>Plagger </li></ul><ul><li>クイックチュートリアル </li></ul>
  64. 74. <ul><li>Email クライアントで </li></ul><ul><li>RSS フィードを読みたい! </li></ul><ul><li>(Gmail, Thunderbird) </li></ul>
  65. 75. 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
  66. 76. RSS in Gmail
  67. 77. HTML + Images
  68. 78. Feed Image (Logo / Buddy Icon)
  69. 79. Search
  70. 80. Auto grouping (“Conversations”)
  71. 81. Diff
  72. 82. <ul><li>オフライン(飛行機)でも </li></ul><ul><li>フィードを読みたい! </li></ul>
  73. 83. 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
  74. 84. Offline Mode POP3 + Thunderbird
  75. 85. <ul><li>&quot; フィードのリストを </li></ul><ul><li>YAML で管理するのメンドウ &quot; </li></ul>
  76. 86. opml2email.yaml plugins: - module: Subscription::OPML config: url: http://example.com/subscription.opml - module: Publish::Gmail config: mailto: miyagawa@gmail.com # subscription.opml <?xml version=&quot;1.0&quot;?> <opml> <outline title=&quot;Subscriptions&quot;> <outline title=&quot;miyagawa&quot; type=&quot;rss&quot; xmlUrl=&quot;http://bulknews.typepad.com/blog/atom.xml&quot; /> <outline title=&quot;miyagawa on Vox&quot; type=&quot;rss&quot; htmlUrl=&quot;http://bulknews.vox.com/&quot; /> </outline> </opml>
  77. 87. <ul><li>&quot;OPML を手動で編集するのはテラダルス &quot; </li></ul>
  78. 88. filesub2email.yaml plugins: - module: Subscription::File config: url: file:///path/to/subscription.txt - module: Publish::Gmail config: mailto: miyagawa@gmail.com > cat subscription.txt http://bulknews.typepad.com/blog/atom.xml http://bulknews.vox.com/ >
  79. 89. <ul><li>&quot;1000 フィード以上読んでると自分のマシンで読むのは帯域のムダ。 Bloglines にクロールさせたい。 &quot; </li></ul>
  80. 90. bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah - module: Publish::Gmail config: mailto: miyagawa@gmail.com
  81. 91. <ul><li>&quot; それ Livedoor Reader で &quot; </li></ul>
  82. 92. bloglines2email.yaml plugins: - module: Subscription::LivedoorReader config: username: YOU@example.com password: blahblahblah - module: Publish::Gmail config: mailto: miyagawa@gmail.com
  83. 93. <ul><li>&quot;Gmail / Thunderbird から </li></ul><ul><li>del.icio.us にブクマしたい !&quot; </li></ul>
  84. 94. 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
  85. 96. <ul><li>&quot; それはてなブックマークで &quot; </li></ul>
  86. 97. 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
  87. 99. <ul><li>&quot;RSS 広告ウザス &quot; </li></ul>
  88. 100. 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
  89. 101. <ul><li>Quick tour </li></ul><ul><li>For more plugins </li></ul>
  90. 102. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  91. 103. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  92. 104. <ul><li>Subscription </li></ul><ul><li>load subscriptions </li></ul><ul><li>(list the feeds/URLs to aggregate) </li></ul>
  93. 105. <ul><li>Subscription::Config </li></ul>- module: Subscription::Config config: feed: - http://www.yapcchicago.org/feed/ - http://tokyo.yapcasia.org/blog/
  94. 106. <ul><li>Subscription::OPML </li></ul>- module: Subscription::OPML config: url: http://www.example.com/subs.opml # subs.opml <opml> <outline xmlUrl=&quot;http://www.yapcchicago.org/feed/&quot; /> <outline htmlUrl=&quot;http://tokyo.yapcasia.org/blog/&quot; /> </opml>
  95. 107. <ul><li>Subscription::File </li></ul>- module: Subscription::File config: url: file:///path/to/subscription.txt % cat subscription.txt http://www.yapcchicago.org/feed/ http://tokyo.yapcasia.org/blog/ %
  96. 108. <ul><li>Subscription::XOXO </li></ul>- module: Subscription::XOXO config: url: http://www.example.com/subscription.html # subscription.html <ul class=&quot;xoxo&quot;> <li><a href=&quot;http://www.yapcchicago.org/feed/&quot;>YAPC::NA</a></li> <li><a href=&quot;http://tokyo.yapcasia.org/blog/&quot;>YAPC::NA</a></li> </ul>
  97. 109. <ul><li>Subscription::Bookmarks </li></ul><ul><li>Read bookmarks file of IE, Firefox and Safari </li></ul>
  98. 110. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  99. 111. <ul><li>Filter </li></ul><ul><li>Normalize / Repair feed metadata </li></ul><ul><li>Upgrade feed content </li></ul><ul><li>Filter feed content using text filters </li></ul><ul><li>Invoke some action on entries </li></ul>
  100. 112. <ul><li>Filter::EntryFullText </li></ul><ul><li>本文なしのフィードをアップグレード </li></ul><ul><li>個別 HTML を取得して正規表現 / XPath </li></ul>
  101. 113. <ul><li>Filter::TruePermalink </li></ul><ul><li>リダイレクト URL などを Canonicalize </li></ul><ul><li>(e.g. http://…/go.php?url=….) </li></ul>
  102. 114. <ul><li>Filter::FindEnclosures </li></ul><ul><li>コンテンツからエンクロージャを抽出 </li></ul><ul><li><a href=&quot;http://…./foo.mp3&quot;>episode #1</a> </li></ul>
  103. 115. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  104. 116. <ul><li>Publish </li></ul><ul><li>Publish aggregated entry to online services </li></ul><ul><li>reBlogging </li></ul><ul><li>Convert feeds to other formats </li></ul>
  105. 117. <ul><li>Publish::Feed </li></ul><ul><li>Republish feed in RSS/Atom </li></ul><ul><li>Good to use with scrapers </li></ul>
  106. 118. <ul><li>Publish::MT </li></ul><ul><li>Reblog entries using MT XML-RPC </li></ul>
  107. 119. <ul><li>Publish::MTWidget </li></ul>
  108. 120. <ul><li>Publish::Email </li></ul><ul><li>text/plain, multipart/alternative </li></ul><ul><li>Pluggable email protocols </li></ul><ul><li>(SMTP, SMTP Auth, IMAP, Maildir …) </li></ul>
  109. 121. <ul><li>Publish::iCal </li></ul><ul><li>Publish iCal feeds out of RSS/Atom </li></ul>
  110. 122. <ul><li>Publish::Excel </li></ul>仕事の合間に !
  111. 123. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  112. 124. <ul><li>Search </li></ul><ul><li>Index aggregated entries on search engines </li></ul>
  113. 125. <ul><li>Search::Spotlight </li></ul>
  114. 126. <ul><li>Search::Estraier </li></ul><ul><li>Uses HyperEstraier XMLRPC node API </li></ul>
  115. 127. <ul><li>Search::Lucene* </li></ul><ul><li>Use Lucene WebService API </li></ul><ul><li>(OpenSearch 1.1 and Atom) </li></ul>
  116. 128. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  117. 129. <ul><li>Notify </li></ul><ul><li>Notify feed updates in various ways </li></ul>
  118. 130. <ul><li>Notify::Growl </li></ul>
  119. 131. <ul><li>Notify::Balloon </li></ul>
  120. 132. <ul><li>Notify::MSAgent </li></ul>
  121. 133. Notify::Eject Supports: Windows, Linux, FreeBSD and Mac OSX!
  122. 134. <ul><li>Notify::Pizza </li></ul>
  123. 135. <ul><li>Notify::Pizza </li></ul>Now it does Sushi too!
  124. 136. <ul><li>Plagger に </li></ul><ul><li>対する誤解 </li></ul>
  125. 138. http://d.hatena.ne.jp/sugarcut/20061117/p1 それ Pla 脳 それ Plagger で できるよ それプラズマで 説明できるよ
  126. 140. <ul><li>何でもできる </li></ul><ul><li>… わけじゃない </li></ul>
  127. 142. <ul><li>Plagger is a </li></ul><ul><li>&quot;Feed&quot; aggregator </li></ul>
  128. 143. Plagger::Subscription Plagger::Feed author id link title tags url entries Plagger::Feed author id link title tags url entries Plagger::Feed author id link title tags url entries Plagger::Entry author id link permalink title tags enclosures
  129. 144. ピザ Pla の意義
  130. 148. &quot;the Unix shell for Web 2.0&quot;
  131. 149. &quot;RSS is the Standard IO for the Web&quot;
  132. 150. &quot;RSS is the Standard IO for the Web&quot;
  133. 151. Feed formats RSS 0.91 RSS 2.0 RSS1.0 / RDF Atom 1.0 JSON iCal OPML XOXO XBEL Sitemaps attention.xml Amazon API Google API OpenSearch AtomPP GData
  134. 152. Feed Vocabulary / Extensions rvw: Enclosures Photocast iTunes RSS Media RSS Dublin Core FOAF microformats
  135. 154. Plagger = The duct tape of the web.
  136. 155. <ul><li>Example: </li></ul><ul><li>Location metadata </li></ul>
  137. 156. N 37.7782 W 122.3973
  138. 157. 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=&quot;http://www.georss.org/georss&quot; xmlns:gml=&quot;http://www.opengis.net/gml&quot;
  139. 158. 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=&quot;http://www.w3.org/2003/01/geo/wgs84_pos#&quot;
  140. 159. Flickr geo tag <media:category scheme=&quot;urn:flickr:tags&quot;> geo:lat=37.7782 geo:lon=-122.3973 </media:category> xmlns:media=&quot;http://search.yahoo.com/mrss/&quot;
  141. 160. GeoURL <meta name=&quot;ICBM&quot; content=&quot;37.7782, -122.3973&quot; />
  142. 161. geo microformats <div class=&quot;geo&quot;> <span class=&quot;latitude&quot;>37.7782</span> <span class=&quot;longitude&quot;>-122.3973</span> </div>
  143. 162. Links to Google Maps <a href=&quot;http://maps.google.com/maps?q=37.7782,-122.3973&z=16&quot;> Link to Google Maps</a>
  144. 163. Eznavi mail
  145. 164. Photo EXIF
  146. 165. adr <div class=&quot;adr&quot;> <div class=&quot;street-address&quot;>548 4th St.</div> <span class=&quot;locality&quot;>San Francisco</span>, <span class=&quot;region&quot;>CA</span> <span class=&quot;postal-code&quot;>94107</span> <div class=&quot;country-name&quot;>U.S.A.</div> </div>
  147. 166. <ul><li>We don't care </li></ul><ul><li>about format diffs. </li></ul>
  148. 167. 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
  149. 168. 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
  150. 169. Flickr geo tag <media:category scheme=&quot;urn:flickr:tags&quot;> geo:lat=37.7782 geo:lon=-122.3973 </media:category> Filter::geotagged
  151. 170. GeoURL <meta name=&quot;ICBM&quot; content=&quot;37.7782, -122.3973&quot; /> Filter::GeoURL
  152. 171. geo microformats <div class=&quot;geo&quot;> <span class=&quot;latitude&quot;>37.7782</span> <span class=&quot;longitude&quot;>-122.3973</span> </div> Filter::Microformats::geo
  153. 172. Links to Google Maps <a href=&quot;http://maps.google.com/maps?q=37.7782,-122.3973&z=16&quot;> Link to Google Maps</a> Filter::ExtractMapsLinks
  154. 173. Eznavi mail Filter::ExtractMapsLinks
  155. 174. Photo EXIF Filter::FetchEnclosure + Filter::ExtractEXIF
  156. 175. adr <div class=&quot;adr&quot;> <div class=&quot;street-address&quot;>548 4th St.</div> <span class=&quot;locality&quot;>San Francisco</span>, <span class=&quot;region&quot;>CA</span> <span class=&quot;postal-code&quot;>94107</span> <div class=&quot;country-name&quot;>U.S.A.</div> </div> Filter::Microformats::adr + Filter::Geocoding::US
  157. 176. <ul><li>Publish::KML </li></ul><ul><li>Publish::GoogleMaps </li></ul><ul><li>Publish::Feed </li></ul><ul><li>(with geotags) </li></ul>
  158. 177. <ul><li>Everything's done </li></ul><ul><li>in plugins </li></ul><ul><li>= Clean & extensible. </li></ul>
  159. 178. <ul><li>Plagger </li></ul><ul><li>dev. Status </li></ul>
  160. 179. <ul><li>Version </li></ul><ul><li>0.7.13 </li></ul>
  161. 180. <ul><li>Coming Soon … </li></ul>
  162. 181. <ul><li>iTunes RSS support </li></ul>
  163. 182. <ul><li>Geo extensions </li></ul>
  164. 183. <ul><li>Enclosure processors </li></ul><ul><li>ffmpeg, Sync::PSP, Sync::iPodVideo </li></ul>
  165. 184. <ul><li>Pluggable summarizer </li></ul><ul><li>& text formatter </li></ul><ul><li>Lingua::EN::Summarize, Text::Original, HTML::WikiConverter, HTML::FormatText </li></ul>
  166. 185. <ul><li>Rich Media metadata </li></ul><ul><li>ID3 tag in enclosures </li></ul><ul><li>Links to imdb.com / amazon.com </li></ul><ul><li>hReview microformats </li></ul>
  167. 186. <ul><li>Calendar Support </li></ul><ul><li>iCal parser & emitter </li></ul><ul><li>hCalendar microformats </li></ul><ul><li>.ics attached in emails </li></ul><ul><li>Sync::SyncML </li></ul>
  168. 187. <ul><li>Email refactoring </li></ul><ul><li>text/plain, iso-2022-jp support </li></ul><ul><li>Pluggable storage engines </li></ul>
  169. 188. <ul><li>http://plagger.org/ </li></ul><ul><li>Planet, Mailing List, IRC </li></ul><ul><li>Bug Tracking, SVN repository </li></ul>
  170. 189. <ul><li>#plagger-ja on freenode </li></ul>
  171. 190. <ul><li>Join Us! </li></ul>
  172. 191. <ul><li>Thank you </li></ul><ul><li>Questions? </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×