Plagger the duct tape of internet

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite & 1 Group

    Plagger the duct tape of internet - Presentation Transcript

    1. Plagger the duct tape of the Web Tatsuhiko Miyagawa [email_address] Six Apart, Ltd. / Shibuya Perl Mongers XML Developers' Day #9
      • IRC
      • #plagger-ja
      • chat.freenode.net
      • (iso-2022-jp)
      • アウェイっぽいので
      • 自己紹介
      • Tatsuhiko Miyagawa
    2.  
    3.  
    4. http://www.vox.com/
      • What is Plagger?
    5.  
    6.  
    7.  
    8.  
      • Pl uggable
      • RSS/Atom
      • Agg regato r
      • Why Pluggable?
      • Just for a feed aggregation?
      • History
      • 2002 Apr.
      • baseball2rss
      • http://search.cpan.org/dist/WWW-Baseball-NPB/
      • 2003 Oct.
      • rss2javascript
      • http://blog.bulknews.net/cookbook/blosxom/rss/rss2js.html
      • 2004 Sep.
      • bloglines2ipod
      • http://bulknews.net/lib/utils/bloglines2ipod/
    9.  
      • 2004 Oct.
      • rss2audiobook
      • http://bulknews.net/lib/utils/rss2audiobook/
      • 2005 Aug.
      • bloglines2gmail
      • http://svn.bulknews.net/repos/public/bloglines2email/trunk/
    10. #!/usr/bin/perl use 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 }
    11. #!/usr/bin/perl use 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 }
      • "HTTP リクエストが
      • エラーになったら ?"
    12. #!/usr/bin/perl use 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 }
      • "Atom も読みたい !"
    13. #!/usr/bin/perl use 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); }
      • If-Modified-Since で
      • 帯域節約したい!
    14. #!/usr/bin/perl use 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; …
      • " 壊れたフィードも
      • パースしたい! "
      • Etc., etc.
      • 他にも
      • rss2opml
      • http://aruntx.com/software/rss2opml/
      • rss2pdf
      • http://rss2pdf.com/
      • rss2atom
      • brian.wanamaker.com/mybicycle/2004/02/rss2atom.html
      • atom2rss
      • http://www.2rss.com/software.php?page=atom2rss
      • rss2ical
      • http://bura-bura.com/blog/archives/2004/06/22/rss2ical/
      • Bloglines2opml
      • http://mycvs.org/wp/wp-content/wp-transform.php
      • rss2gmail
      • http://www.cs.utexas.edu/~karu/gmailrss/
      • rss2imap
      • http://rss2imap.sourceforge.jp/
      • ebay2rss
      • http://www.2rss.com/software.php?page=ebay2rss
      • svn2rss
      • http://twiki.org/cgi-bin/view/Codev/Svn2rss
      • <any>2<any>
      Where either of <any> is RSS|Atom|OPML
      • This is ridiculous.
      • Different Languages,
      • Different Bugs.
      • No hackability
    15.  
    16. via http://www.atmarkit.co.jp/fnetwork/rensai/5minplagger/02.html
    17. 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
    18. 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
    19. 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
    20. 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
      • Just like UNIX pipe
      Subscribe OPML | StripRSSAd | ResolveRelativeLink | Publish Feed --type=Atom
    21. 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
    22. &quot;the Unix shell for Web 2.0&quot;
      • 組み合わせの数
      • {CustomFeed,Subscription}/*.pm: 35
      • {Publish,Notify}/*.pm: 37
      • 35 * 37 = 1295
      • Plagger
      • Core features
      • RSS/Atom
      • Auto-Discovery
      • Support Feed formats
      • RSS 0.91 to Atom 1.0
      • (XML::Feed + hacks)
      • Support parsing
      • Broken feeds
      • (XML::Liberal)
      • HTTP optimizations
      • If-Modified-Since / gzip
      • (URI::Fetch)
      • Podcast / Videocast
      • Support
      • (RSS 2.0 & Atom 1.0)
      • Photocast
      • Media RSS
      • iTunes RSS*
      • 非同期ダウンロード
      • cURL, wget, HTTP::Parallel & HTTP::Async*
      • 完全な国際化
      • Unicode & Timezone
      • Access to
      • browser Cookies
      • IE, Safari, Firefox and w3m
      • Screen-scraping
      • Via CutomFeed::*
      • Stackable Plugins
      • Rule-based
      • Dispatch of Plugins
      • Plagger の
      • インストール
    23.  
    24.  
      • 省略
      http://plagger.org/trac/wiki/PlaggerQuickStart
      • Plagger
      • クイックチュートリアル
      • Email クライアントで
      • RSS フィードを読みたい!
      • (Gmail, Thunderbird)
    25. 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
    26. RSS in Gmail
    27. HTML + Images
    28. Feed Image (Logo / Buddy Icon)
    29. Search
    30. Auto grouping (“Conversations”)
    31. Diff
      • オフライン(飛行機)でも
      • フィードを読みたい!
    32. 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
    33. Offline Mode POP3 + Thunderbird
      • &quot; フィードのリストを
      • YAML で管理するのメンドウ &quot;
    34. 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>
      • &quot;OPML を手動で編集するのはテラダルス &quot;
    35. 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/ >
      • &quot;1000 フィード以上読んでると自分のマシンで読むのは帯域のムダ。 Bloglines にクロールさせたい。 &quot;
    36. bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah - module: Publish::Gmail config: mailto: miyagawa@gmail.com
      • &quot; それ Livedoor Reader で &quot;
    37. bloglines2email.yaml plugins: - module: Subscription::LivedoorReader config: username: YOU@example.com password: blahblahblah - module: Publish::Gmail config: mailto: miyagawa@gmail.com
      • &quot;Gmail / Thunderbird から
      • del.icio.us にブクマしたい !&quot;
    38. 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
    39.  
      • &quot; それはてなブックマークで &quot;
    40. 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
    41.  
      • &quot;RSS 広告ウザス &quot;
    42. 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
      • Quick tour
      • For more plugins
    43. Plugin phases (types)
      • Subscription
      • Aggregator
      • CustomFeed
      • Filter
      • Publish
      • Search
      • Notify
    44. Plugin phases (types)
      • Subscription
      • Aggregator
      • CustomFeed
      • Filter
      • Publish
      • Search
      • Notify
      • Subscription
      • load subscriptions
      • (list the feeds/URLs to aggregate)
      • Subscription::Config
      - module: Subscription::Config config: feed: - http://www.yapcchicago.org/feed/ - http://tokyo.yapcasia.org/blog/
      • Subscription::OPML
      - 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>
      • Subscription::File
      - module: Subscription::File config: url: file:///path/to/subscription.txt % cat subscription.txt http://www.yapcchicago.org/feed/ http://tokyo.yapcasia.org/blog/ %
      • Subscription::XOXO
      - 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>
      • Subscription::Bookmarks
      • Read bookmarks file of IE, Firefox and Safari
    45. Plugin phases (types)
      • Subscription
      • Aggregator
      • CustomFeed
      • Filter
      • Publish
      • Search
      • Notify
      • Filter
      • Normalize / Repair feed metadata
      • Upgrade feed content
      • Filter feed content using text filters
      • Invoke some action on entries
      • Filter::EntryFullText
      • 本文なしのフィードをアップグレード
      • 個別 HTML を取得して正規表現 / XPath
      • Filter::TruePermalink
      • リダイレクト URL などを Canonicalize
      • (e.g. http://…/go.php?url=….)
      • Filter::FindEnclosures
      • コンテンツからエンクロージャを抽出
      • <a href=&quot;http://…./foo.mp3&quot;>episode #1</a>
    46. Plugin phases (types)
      • Subscription
      • Aggregator
      • CustomFeed
      • Filter
      • Publish
      • Search
      • Notify
      • Publish
      • Publish aggregated entry to online services
      • reBlogging
      • Convert feeds to other formats
      • Publish::Feed
      • Republish feed in RSS/Atom
      • Good to use with scrapers
      • Publish::MT
      • Reblog entries using MT XML-RPC
      • Publish::MTWidget
      • Publish::Email
      • text/plain, multipart/alternative
      • Pluggable email protocols
      • (SMTP, SMTP Auth, IMAP, Maildir …)
      • Publish::iCal
      • Publish iCal feeds out of RSS/Atom
      • Publish::Excel
      仕事の合間に !
    47. Plugin phases (types)
      • Subscription
      • Aggregator
      • CustomFeed
      • Filter
      • Publish
      • Search
      • Notify
      • Search
      • Index aggregated entries on search engines
      • Search::Spotlight
      • Search::Estraier
      • Uses HyperEstraier XMLRPC node API
      • Search::Lucene*
      • Use Lucene WebService API
      • (OpenSearch 1.1 and Atom)
    48. Plugin phases (types)
      • Subscription
      • Aggregator
      • CustomFeed
      • Filter
      • Publish
      • Search
      • Notify
      • Notify
      • Notify feed updates in various ways
      • Notify::Growl
      • Notify::Balloon
      • Notify::MSAgent
    49. Notify::Eject Supports: Windows, Linux, FreeBSD and Mac OSX!
      • Notify::Pizza
      • Notify::Pizza
      Now it does Sushi too!
      • Plagger に
      • 対する誤解
    50.  
    51. http://d.hatena.ne.jp/sugarcut/20061117/p1 それ Pla 脳 それ Plagger で できるよ それプラズマで 説明できるよ
    52.  
      • 何でもできる
      • … わけじゃない
    53.  
      • Plagger is a
      • &quot;Feed&quot; aggregator
    54. 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
    55. ピザ Pla の意義
    56.  
    57.  
    58.  
    59. &quot;the Unix shell for Web 2.0&quot;
    60. &quot;RSS is the Standard IO for the Web&quot;
    61. &quot;RSS is the Standard IO for the Web&quot;
    62. 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
    63. Feed Vocabulary / Extensions rvw: Enclosures Photocast iTunes RSS Media RSS Dublin Core FOAF microformats
    64.  
    65. Plagger = The duct tape of the web.
      • Example:
      • Location metadata
    66. N 37.7782 W 122.3973
    67. 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;
    68. 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;
    69. 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;
    70. GeoURL <meta name=&quot;ICBM&quot; content=&quot;37.7782, -122.3973&quot; />
    71. geo microformats <div class=&quot;geo&quot;> <span class=&quot;latitude&quot;>37.7782</span> <span class=&quot;longitude&quot;>-122.3973</span> </div>
    72. 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>
    73. Eznavi mail
    74. Photo EXIF
    75. 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>
      • We don't care
      • about format diffs.
    76. 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
    77. 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
    78. Flickr geo tag <media:category scheme=&quot;urn:flickr:tags&quot;> geo:lat=37.7782 geo:lon=-122.3973 </media:category> Filter::geotagged
    79. GeoURL <meta name=&quot;ICBM&quot; content=&quot;37.7782, -122.3973&quot; /> Filter::GeoURL
    80. 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
    81. 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
    82. Eznavi mail Filter::ExtractMapsLinks
    83. Photo EXIF Filter::FetchEnclosure + Filter::ExtractEXIF
    84. 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
      • Publish::KML
      • Publish::GoogleMaps
      • Publish::Feed
      • (with geotags)
      • Everything's done
      • in plugins
      • = Clean & extensible.
      • Plagger
      • dev. Status
      • Version
      • 0.7.13
      • Coming Soon …
      • iTunes RSS support
      • Geo extensions
      • Enclosure processors
      • ffmpeg, Sync::PSP, Sync::iPodVideo
      • Pluggable summarizer
      • & text formatter
      • Lingua::EN::Summarize, Text::Original, HTML::WikiConverter, HTML::FormatText
      • Rich Media metadata
      • ID3 tag in enclosures
      • Links to imdb.com / amazon.com
      • hReview microformats
      • Calendar Support
      • iCal parser & emitter
      • hCalendar microformats
      • .ics attached in emails
      • Sync::SyncML
      • Email refactoring
      • text/plain, iso-2022-jp support
      • Pluggable storage engines
      • http://plagger.org/
      • Planet, Mailing List, IRC
      • Bug Tracking, SVN repository
      • #plagger-ja on freenode
      • Join Us!
      • Thank you
      • Questions?

    + Tatsuhiko MiyagawaTatsuhiko Miyagawa, 3 years ago

    custom

    3224 views, 1 favs, 1 embeds more stats

    at XML developers' day 2006

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 3224
      • 3223 on SlideShare
      • 1 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 47
    Most viewed embeds
    • 1 views on http://192.168.10.100

    more

    All embeds
    • 1 views on http://192.168.10.100

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events