Rss
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Rss

  • 3,368 views
Uploaded on

O RSS é o XML democrata e grande responsável pela revolução dos conteúdos. Está em todo o lado. O SAPO serve já dezenas de feeds de conteúdos e serviços com suporte Opensearch....

O RSS é o XML democrata e grande responsável pela revolução dos conteúdos. Está em todo o lado. O SAPO serve já dezenas de feeds de conteúdos e serviços com suporte Opensearch.

Neste workshop iremos partir de uma página web estática, chata e sem côr para criar uma aplicação multimedia e um serviço.

Pelo caminho estará muito RSS e muita transformação de conteúdo.

Para o final guardam-se algumas sugestões para os concorrentes ao Codebits '07.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,368
On Slideshare
3,224
From Embeds
144
Number of Embeds
6

Actions

Shares
Downloads
49
Comments
0
Likes
0

Embeds 144

http://softwarelivre.sapo.pt 52
http://developers.sapo.pt 41
http://intra.codebits.sapo.pt 32
http://codebits.eu 10
https://codebits.eu 7
http://www.slideshare.net 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. codebits ‘07 RSS
  • 2. BIO eep@co.sapo.pt Eduardo Pinto Developer SAPO desde 2000 DTP: Direcção de Tecnologia de Produto - Devel
  • 3. 45m Parte 1 (10 min) Intro O Bus e outros brinquedos RSS no SAPO. O que há? Parte 2 (10 min) RSS GeoRSS Ferramentas úteis Parte 3 (25 min) Do jornal ao Coverflow Sugestões para o concurso
  • 4. Porque é que o utilizador comum ainda não sabe o que é o RSS? Pela mesma razão que não sabe o que é HTML. É irrelevante enquanto não for “renderizado” de forma prática. RSS é um instrumento. Uma ferramenta. Não é um serviço. O RSS por si só não significa nada. Ser informado sobre novos posts num blog, já tem significado palpável Desistam de tentar evangelizar os utilizadores para o RSS. Insistam em evangelizar os programadores para o uso do RSS como forma simples de manipular dados ubíquos. Insistam em convencer os arquitectos a esconder o RSS e transformá-lo um instrumento de magia. Os browsers recentes parecem ter aprendido essa lição.
  • 5. E no SAPO? Fazem alguma coisa nesse sentido? 1996 1998 2000 2002 2004 2006 2007 2005 1995 1997 1999 2001 2003 O SAPO mudou Bus de Serviços SAPO Service centric goes Public! APIS abertas mashups de OpenSource JSLib e Broker novos serviços Distribuir e transformar conteúdo BUS de BUS Broker Serviços RSS JSLib Fast serviços serviços serviços
  • 6. RSS no SAPO
  • 7. Exemplos em produção RSS / XML / JSON Local e Notícias Blogs,Video, Pesquisa, Fotos Accuweather, Mapas, Lusa, SIC Spot Podcasts, TeK, Jornais Regionais Blogs, Fotos,Videos, Messenger Fotos Desktop App: Uploader etc... FlickR, etc SOAP / Rest php, perl, python, c#, delphi, erlang, c++ Flash Tempo Accuweather Mail, Messenger, Astrologia Homepage Farmácias SAPO Mapas Trânsito, Tempo, Fotos, Blogs, Tags
  • 8. developer.sapo.pt trac.softwarelivre.sapo.pt
  • 9. P2 RSS, GeoRSS e Tools
  • 10. RSS: real simple syndication? 0.92 0.91 0.93 2.0 RDF 0.90 0.94 Real Simple Syndication Rich Site Summary 1.0 RDF Site Summary Spin-off da Userland
  • 11. Geo RSS Permite detalhar um ponto, linha, polígono, rectângulo, elevação, raio, etc. As aplicações de Mapas já são capazes de interpretar o formato via RSS e apresentar graficamente a informação. <geo:lat>38.7376</geo:lat> <geo:long>-9.12403</geo:long>
  • 12. Geo RSS Existem pelo menos 3 standards, alguns com variações. Simple GML W3C Geo <georss:where> <geo:Point> <georss:point>45.256 -71.92</georss:point> <gml:Point> <geo:lat>55.701</geo:lat> <gml:pos>45.256 -71.92</gml:pos> <geo:long>12.552</geo:long> </gml:Point> </geo:Point> </georss:where> <geo:lat>26.58</geo:lat> <geo:long>-97.83</geo:long>
  • 13. RSS Tools Há dezenas de classes e toolkits para fazer parsing de RSS Ninguém precisa de mais uma! Assegurem-se que tem suporte para RSS 2.0 e 0.92. e talvez mesmo Atom <?php require 'magpie/rss_fetch.inc'; #!/usr/bin/env python $bancaRSS = ‘http://umUrlqualquer’; $banca = fetch_rss($bancaRSS); import feedparser $bancaItems = $banca->items; d = feedparser.parse(quot;http://Urlquot;) d['feed']['title'] foreach($bancaItems as $b => $i) { http://feedparser.org/index.html $titulo = $i[‘title’] bla bla... using System; http://magpierss.sourceforge.net/ using System.Runtime.InteropServices; using Microsoft.Feeds.Interop;   namespace RSSClient {     class Program   {         static void Main(string[] args) #!/usr/bin/perl     { use XML::RSS::Parser::Lite;             IFeedsManager manager = new use LWP::Simple; FeedsManagerClass();             IFeed feed = (IFeed) manager.GetFeedByUrl(quot;http://services.sapo.pt/ my $xml = get(quot;http://url.to.rssquot;); Metadata/RSS/quot;);   my $rp = new             foreach (IFeedItem item in XML::RSS::Parser::Lite; (IFeedsEnum)feed.Items) $rp->parse($xml);       {                 Console.WriteLine(item.Title);       } print $rp->get('title');             Console.ReadLine();     }   } } http://search.cpan.org/~ebosrup/RSS-Parser-Lite-0.10/
  • 14. Ferramentas para Mashups Há imensas ferramentas de mashups na web feedity.com - criar RSS a partir de páginas Web plagger.org - criar RSS a partir de outros RSS
  • 15. ...
  • 16. Demo Do jornal ao Coverflow
  • 17. Objectivo:
  • 18. Tools XML
  • 19. KISS mode. Um script e dois outputs Aceder ao link do jornal hack it: Banca de Jornais RSS auto Scrape para RSS (sem feed, dumb page) discovery Página de Jornal .pt | .br (tem imagem e link do jornal) Sacar imagem da primeira TEXT-TO- TEXT página SPEECH XML Flash AIFF XML Podcast MP3 iTunes Tag + Embed APIC Flash Web iTouch Coverflow Coverflow
  • 20. 1. Se não tens RSS, “arranja-o” http://www.feedity.com/?http://noticias.sapo.pt/banca2 hack it: Banca de Jornais Scrape para RSS (sem feed, dumb page) Página de Jornal Gerador de link do para (tem imagem e RSS jornal)páginas web sem feeds Encontra padrões nas páginas e produz items de RSS. Actualização em tempo real Ajuste imagem da primeira Sacar manual dos resultados produzidos. TEXT página XML Flash XML Podcast iTunes Flash Web iTouch Coverflow Coverflow
  • 21. Output: RSS 2.0 Feed <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <rss version=quot;2.0quot;> <channel> <title>SAPO Notícias - Banca de Jornais</title> <link>http://noticias.sapo.pt/banca2</link> <description>RSS Web Feed for SAPO Notícias - Banca de Jornais (Generated by Feedity.com) </description> <generator>Feedity/1.6 (+http://www.feedity.com)</generator> <pubDate>Sun, 11 Nov 2007 18:39:25 GMT</pubDate> <lastBuildDate>Sun, 11 Nov 2007 18:39:25 GMT</lastBuildDate> <image> <title>Generated by Feedity.com</title> <url>http://www.feedity.com/images/feedity_feed_logo-small.gif</url> <link>http://noticias.sapo.pt/banca2</link> </image> <ttl>30</ttl> <item> <title>Jornal de Notícias</title> <link>http://noticias.sapo.pt/banca2/jornal/?jornal=Jornal+de+Not%C3%ADcias++++</link> <guid>http://noticias.sapo.pt/banca2/jornal/?jornal=Jornal+de+Not%C3%ADcias++++</guid> <description>Jornal de Notícias</description> </item> <item> <title>24 Horas</title> <link>http://noticias.sapo.pt/banca2/jornal/?jornal=24+Horas</link> <guid>http://noticias.sapo.pt/banca2/jornal/?jornal=24+Horas</guid> <description>24 Horas</description> </item>
  • 22. 2. Obter imagem da capa e URL do jornal <link>http://noticias.sapo.pt/banca2/jornal/?jornal=Jornal+de+Not%C3%ADcias++++</link> JPEG da imagem Expressão regular para encontrar // Extract newspaper URL and cover preg_match('/href=quot;(S+)quot; target=quot;_newquot;>s+<img src=quot;(.+)quot;/', $s,$matches); $url = $matches[1]; $coverUrl = $matches[2]; URL do Jornal
  • 23. 3. Obter feed de RSS do jornal. Os feeds são declarados na secção HEAD das páginas O formato da declaração é simples: <link rel=quot;alternatequot; type=quot;application/rss+xmlquot; title=quot;RSSquot; href=”http://umURL”> Obtemos as primeiras linhas (<20 deve ser suficiente) e procuramos por ocorrências de alternate e rss. Depois, usamos uma expressão regular para obter o URL do feed if(stristr($o, 'alternate') && stristr($o,'rss')) { preg_match('/href=quot;(S+)quot;/i',$o,$matches); $rssFeed = $matches[1]; <head> <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=utf-8quot;> <meta name=quot;datequot; content=quot;2007-11-11 01:00:00quot;> <title>Jornal de Not&iacute;cias - Capa JN Domingo, 11 de Novembro de 2007</title> <link rel=quot;alternatequot; type=quot;application/rss+xmlquot; title=quot;JN: &Uacute;ltima Hora em RSSquot; href=quot;http://services.sapo.pt/RSS/Feed/ noticias/sapo_noticias/jornal_de_noticiasquot; /> <link href=quot;http://jn.sapo.pt/css/lusomundo/jn/jn.cssquot; rel=quot;stylesheetquot; type=quot;text/cssquot;> <base href=quot;http://jn.sapo.pt/quot;> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;http://imgs.sapo.pt/ css/lusomundo/jn/sp_menu.cssquot;> </head>
  • 24. 4. Parse do feed de RSS do jornal Queremos o <description> dos items de notícias. 3 items chegam para o exemplo. Atenção ao encoding. Nem todos seguem as boas práticas. Há feeds declarados como UTF-8 que na realidade chegam em Latin-1 e cheios de HTML entities. $tts = html_entity_decode($tts,ENT_QUOTES); $tts = strip_tags($tts); // Paranoid $tts = utf8_encode($tts); O Text-to-Speech que vamos usar usa a língua portuguesa. Verificar o TLD (.pt | .br). Um serviço de detecção com base no conteúdo seria muito bom :) preg_match('/.pt|blogspot.com|.com.br|cabra|uniao|alentejo/',$url)
  • 25. 5. Text-To-Speech (TTS) Utilizadores de Mac OSX InfoVox iVox http://assistiveware.com/infovox_ivox.php Boa implementação do português de Portugal. A versão de trial dura bastante tempo e integra muito bem com o sistema operativo. $cmdline = '/usr/bin/say -o '.$audioStore. '/' . $audio .' -f '. $textStore . '/' . $text; “Este conversor de texto para voz, funciona bastante bem. É mesmo catita!” Gera um ficheiro no formato AIFF
  • 26. 5. Text-To-Speech (TTS) Utilizadores de Mac OSX InfoVox iVox http://assistiveware.com/infovox_ivox.php Boa implementação do português de Portugal. A versão de trial dura bastante tempo e integra muito bem com o sistema operativo. $cmdline = '/usr/bin/say -o '.$audioStore. '/' . $audio .' -f '. $textStore . '/' . $text; “Este conversor de texto para voz, funciona bastante bem. É mesmo catita!” Gera um ficheiro no formato AIFF
  • 27. 6. Converter em MP3 No brainer. LAME MP3 encoder $cmdline = quot;/opt/local/bin/lame --add-id3v2 --tt quot;$titlequot; --ta quot;SAPOquot; --ignore-tag-errors --silent $audioStore/$audio $audioStore/ $audio.mp3quot;;
  • 28. 7. Embedded tag: APIC O XML de definição do podcast apenas permite uma imagem por feed. O iTunes, no entanto, reconhece a tag APIC aplicada individualmente a cada MP3 do podcast. É o que habitualmente identificamos como artwork de uma música. APIC (attached picture): faz parte da norma ID3v2. A imagem é embebida no ficheiro de áudio. http://www.id3.org/id3v2.4.0-frames $cmdline = quot;/usr/local/bin/eyeD3 --no-color --add-image= $coverStore/$cover:FRONT_COVER $audioStore/$audio.mp3quot;;
  • 29. 8. Formato de Podcast do iTunes É simplesmente um formato RSS 2.0 com extensões próprias do iTunes (categoria, imagens, subtítulo, etc) <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <rss xmlns:itunes=quot;http://www.itunes.com/dtds/podcast-1.0.dtdquot; version=quot;2.0quot;>   <channel> <title>All About Everything</title> <link>http://www.example.com/podcasts/everything/index.html</link> <language>en-us</language> <copyright>&#x2117; &amp; &#xA9; 2005 John Doe &amp; Family</copyright> <itunes:subtitle>A show about everything</itunes:subtitle> <itunes:author>John Doe</itunes:author> <itunes:summary>All About Everything is blabla</itunes:summary> <description>All About Everything is blabla</description> <itunes:owner> <itunes:name>John Doe</itunes:name> <itunes:email>john.doe@example.com</itunes:email> </itunes:owner> <itunes:image href=quot;http://example.com/podcasts/everything/AllAboutEverything.jpgquot; /> <itunes:category text=quot;Technologyquot;> <itunes:category text=quot;Gadgetsquot;/> </itunes:category> <itunes:category text=quot;TV &amp; Filmquot;/>   <item> <title>Shake Shake Shake Your Spices</title> <itunes:author>John Doe</itunes:author> <itunes:subtitle>A short primer on table spices</itunes:subtitle> <itunes:summary>This week we talk about bla bla</itunes:summary> <enclosure url=quot;http://example.com/podcasts/everything/AllAboutEverythingEpisode3.m4aquot; length=quot;8727310quot; type=quot;audio/x-m4aquot; /> <guid>http://example.com/podcasts/archive/aae20050615.m4a</guid> <pubDate>Wed, 15 Jun 2005 19:00:00 GMT</pubDate> <itunes:duration>7:04</itunes:duration> <itunes:keywords>salt, pepper, shaker, exciting</itunes:keywords> </item>
  • 30. Usámos RSS certo? Ao gerar um feed de uma página que não tinha Para informar o iTunes que havia novos podcasts e no entanto... Em nenhum momento o utilizador leu a palavra RSS ou teve de lidar com o conceito.
  • 31. 9. Subscribe, Sync, Play! Live Demo
  • 32. ...
  • 33. 10. XML Flash Coverflow Live Demo
  • 34. Sugestões para projectos no codebits
  • 35. microformats (Operator toolbar Firefox) customer care ouvir os utilizadores e interagir com eles mapas tags Extracção de informação geográfica passionate users a partir de um texto cam API um jogo ?
  • 36. codebits ‘07 exit() Samples e referências online na intra