Rss
-
Upload
codebits -
Category
Technology
-
view
2.152 -
download
0
description
Transcript of Rss
BIO
Eduardo PintoDeveloper SAPO desde 2000DTP: Direcção de Tecnologia de Produto - Devel
45m Parte 1 (10 min)
O Bus e outros brinquedosIntro
RSS no SAPO. O que há?Parte 2 (10 min)
RSSGeoRSSFerramentas úteis
Parte 3 (25 min)
Do jornal ao CoverflowSugestões para o concurso
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.
Porque é que o utilizador comum ainda não sabe o que é o RSS?
1995 1997 1999 2001 2003 2005
1996 1998 2000 2002 2004 2006
2007
O SAPO mudouBus de Serviços SAPO
goes Public!
BUS deServiços
serviços serviços serviços
mashups de novos serviços
Service centricAPIS abertasOpenSource JSLib e BrokerDistribuir e transformar conteúdo
BUS
Fast
Broker
JSLibRSS
E no SAPO? Fazem alguma coisa nesse sentido?
RSS no SAPO
Exemplos em produção
Homepage Mail, Messenger, AstrologiaTrânsito, Tempo, Fotos, Blogs, Tags
Tempo FlashAccuweather
Farmácias SAPO Mapas
Local e NotíciasBlogs, Video, Pesquisa, FotosAccuweather, Mapas, Lusa, SICPodcasts, TeK, Jornais Regionaisetc...
Spot Blogs, Fotos, Videos, MessengerFlickR, etcFotos Desktop App: Uploader
SOAP / RestR
SS / XM
L / JSON
php, perl, python, c#, delphi, erlang, c++
developer.sapo.pttrac.softwarelivre.sapo.pt
P2
RSS, GeoRSS e Tools
RSS: real simple syndication?
0.900.91
0.920.930.94
1.0
2.0Rich Site Summary
RDF
RDF Site Summary
Real Simple Syndication
Spin-off da Userland
Geo RSS
<geo:lat>38.7376</geo:lat><geo:long>-9.12403</geo:long>
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 RSS
W3C Geo
Existem pelo menos 3 standards, alguns com variações.
<geo:Point> <geo:lat>55.701</geo:lat> <geo:long>12.552</geo:long></geo:Point>
<geo:lat>26.58</geo:lat> <geo:long>-97.83</geo:long>
GMLSimple<georss:where> <gml:Point> <gml:pos>45.256 -71.92</gml:pos> </gml:Point>
</georss:where>
<georss:point>45.256 -71.92</georss:point>
RSS ToolsHá dezenas de classes e toolkits para fazer parsing de RSSNinguém precisa de mais uma!
<?php require 'magpie/rss_fetch.inc';
$bancaRSS = ‘http://umUrlqualquer’;$banca = fetch_rss($bancaRSS);$bancaItems = $banca->items;
foreach($bancaItems as $b => $i) {$titulo = $i[‘title’]bla bla...
#!/usr/bin/env python
import feedparserd = feedparser.parse("http://Url")d['feed']['title']
http://feedparser.org/index.html
http://magpierss.sourceforge.net/
Assegurem-se que tem suporte para RSS 2.0 e 0.92.
e talvez mesmo Atom
#!/usr/bin/perluse XML::RSS::Parser::Lite;use LWP::Simple; my $xml = get("http://url.to.rss");my $rp = new XML::RSS::Parser::Lite;$rp->parse($xml); print $rp->get('title');
http://search.cpan.org/~ebosrup/RSS-Parser-Lite-0.10/
using System; using System.Runtime.InteropServices; using Microsoft.Feeds.Interop; namespace RSSClient { class Program { static void Main(string[] args) { IFeedsManager manager = new FeedsManagerClass(); IFeed feed = (IFeed)manager.GetFeedByUrl("http://services.sapo.pt/Metadata/RSS/"); foreach (IFeedItem item in (IFeedsEnum)feed.Items) { Console.WriteLine(item.Title); } Console.ReadLine(); } } }
Ferramentas para MashupsHá imensas ferramentas de mashups na webfeedity.com - criar RSS a partir de páginas Webplagger.org - criar RSS a partir de outros RSS
...
DemoDo jornal ao Coverflow
Objectivo:
Tools
XML
Banca de Jornais(sem feed, dumb page)
hack it:Scrape para RSS
Página de Jornal(tem imagem e link do jornal)
Sacar imagem da primeira página
Aceder ao link do jornal
RSS auto discovery
.pt | .br
AIFF
MP3
Tag + Embed APIC
XML Flash
XML Podcast
TEXTTEXT-TO-SPEECH
iTunes
iTouch Coverflow
Flash Web Coverflow
KISS mode. Um script e dois outputs
Banca de Jornais(sem feed, dumb page)
hack it:Scrape para RSS
Página de Jornal(tem imagem e link do jornal)
Sacar imagem da primeira página
Aceder ao link do jornal
RSS auto discovery
.pt | .br
AIFF
MP3
Tag + Embed APIC
XML Flash
XML Podcast
TEXTTEXT-TO-SPEECH
iTunes
iTouch Coverflow
Flash Web Coverflow
http://www.feedity.com/?http://noticias.sapo.pt/banca2
1. Se não tens RSS, “arranja-o”
Gerador de RSS para páginas web sem feedsEncontra padrões nas páginas e produz items de RSS.Actualização em tempo realAjuste manual dos resultados produzidos.
<?xml version="1.0" encoding="utf-8"?><rss version="2.0"> <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>
Output: RSS 2.0 Feed
<link>http://noticias.sapo.pt/banca2/jornal/?jornal=Jornal+de+Not%C3%ADcias++++</link>
URL do Jornal
JPEG da imagem
2. Obter imagem da capa e URL do jornal
// Extract newspaper URL and cover
preg_match('/href="(\S+)" target="_new">\s+<img src="(.+)"/',$s,$matches);
$url = $matches[1];$coverUrl = $matches[2];
Expressão regular para encontrar
3. Obter feed de RSS do jornal.
if(stristr($o, 'alternate') && stristr($o,'rss')) {preg_match('/href="(\S+)"/i',$o,$matches);$rssFeed = $matches[1];
Os feeds são declarados na secção HEAD das páginasO formato da declaração é simples:
<link rel="alternate" type="application/rss+xml" title="RSS" href=”http://umURL”>
Obtemos as primeiras linhas (<20 deve ser suficiente) e procuramos porocorrências de alternate e rss.Depois, usamos uma expressão regular para obter o URL do feed
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="date" content="2007-11-11 01:00:00"><title>Jornal de Notícias - Capa JN Domingo, 11 de Novembro de 2007</title><link rel="alternate" type="application/rss+xml" title="JN: Última Hora em RSS" href="http://services.sapo.pt/RSS/Feed/noticias/sapo_noticias/jornal_de_noticias" /><link href="http://jn.sapo.pt/css/lusomundo/jn/jn.css" rel="stylesheet" type="text/css"><base href="http://jn.sapo.pt/"><link rel="stylesheet" type="text/css" href="http://imgs.sapo.pt/css/lusomundo/jn/sp_menu.css"></head>
4. Parse do feed de RSS do jornalQueremos 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.
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 seriamuito bom :)
$tts = html_entity_decode($tts,ENT_QUOTES);$tts = strip_tags($tts);
// Paranoid$tts = utf8_encode($tts);
preg_match('/\.pt|blogspot\.com|\.com\.br|cabra|uniao|alentejo/',$url)
5. Text-To-Speech (TTS)Utilizadores de Mac OSX
InfoVox iVoxhttp://assistiveware.com/infovox_ivox.php
Boa implementação do português de Portugal.A versão de trial dura bastante tempo e integra muito bemcom 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
5. Text-To-Speech (TTS)Utilizadores de Mac OSX
InfoVox iVoxhttp://assistiveware.com/infovox_ivox.php
Boa implementação do português de Portugal.A versão de trial dura bastante tempo e integra muito bemcom 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
6. Converter em MP3No brainer.
LAME MP3 encoder
$cmdline = "/opt/local/bin/lame --add-id3v2 --tt \"$title\" --ta \"SAPO\" --ignore-tag-errors --silent $audioStore/$audio $audioStore/$audio.mp3";
7. Embedded tag: APIC
O XML de definição do podcast apenas permite uma imagempor 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 = "/usr/local/bin/eyeD3 --no-color --add-image=$coverStore/$cover:FRONT_COVER $audioStore/$audio.mp3";
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="1.0" encoding="UTF-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> <channel><title>All About Everything</title><link>http://www.example.com/podcasts/everything/index.html</link><language>en-us</language><copyright>℗ & © 2005 John Doe & 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>[email protected]</itunes:email></itunes:owner><itunes:image href="http://example.com/podcasts/everything/AllAboutEverything.jpg" /><itunes:category text="Technology"><itunes:category text="Gadgets"/></itunes:category><itunes:category text="TV & Film"/> <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="http://example.com/podcasts/everything/AllAboutEverythingEpisode3.m4a" length="8727310" type="audio/x-m4a" /><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>
Usámos RSS certo?Ao gerar um feed de uma página que não tinhaPara informar o iTunes que havia novos podcasts
e no entanto...
Em nenhum momento o utilizador leu a palavra RSS ou tevede lidar com o conceito.
9. Subscribe, Sync, Play!
Live Demo
...
10. XML Flash Coverflow
Live Demo
Sugestõespara projectos no codebits
microformats(Operator toolbar Firefox)
Extracção de informação geográficaa partir de um texto
customer careouvir os utilizadorese interagir com eles
passionate users
mapastags
cam APIum jogo ?
exit()
codebits ‘07
Samples e referências online na intra