2011-04-23 12 views
5

Tengo un software llamado Rss-Aware que estoy tratando de usar. Básicamente es un comprobador de alimentación de escritorio que comprueba si los canales RSS se actualizan y envía una notificación a través del sistema Notify-OSD de Ubuntu.¿Cómo extraes las URL de feed de un archivo OPML exportado desde Google Reader?

Sin embargo, para saber qué fuentes de información desea verificar, debe enumerar las URL de entrada en un archivo de texto en ~/.rss-aware/rssfeeds.txt una detrás de la otra en una lista con salto de línea entre cada URL de fuente. Algo como:

http://example.com/feed.xml 
http://othersite.org/feed.xml 
http://othergreatsite.net/rss.xml 

... Parece bastante simple ¿no? Bueno, la lista de fuentes que me gustaría utilizar se exporta desde Google Reader como un archivo OPML (es un tipo de XML) y no tengo ni idea de cómo analizar las urls de feed. Parece que debería ser bastante sencillo pero estoy perplejo.

Me encantaría que alguien pudiera dar una implementación en Python o Ruby o algo que pudiera hacer rápidamente desde un mensaje. Un script bash sería increíble.

Muchas gracias por la ayuda, soy un programador muy débil y me encantaría aprender a hacer este análisis básico.

EDITAR: También, here is the OPML file Estoy tratando de extraer las URL de alimentación de.

Respuesta

2

Dado que es un archivo XML, puede usar una consulta XPath para extraer las direcciones URL. En el archivo XML, parece que las URL de RSS se almacenan en los atributos xmlUrl. La expresión XPath //@xmlUrl seleccionará todos los valores de ese atributo.

Si desea probar esto en su navegador web, puede usar un online XPath tester. Si desea realizar esta consulta XPath en Python, this question explains how to use XPath in Python. Además, los documentos lxml tienen a page on using XPath in lxml que pueden ser útiles.

+0

... y puede usar XPath en una tubería bash con xmlstarlet. – a3nm

4

Escribí un analizador de listas de suscripción para este propósito. Se llama listparser, y está escrito en Python. Acabo de probar su archivo OPML y parece analizar perfectamente el archivo. También hará que las etiquetas de tus feeds estén disponibles.

Si alguna vez has usado feedparser, la interfaz debe estar familiarizado:

>>> import listparser as lp 
>>> d = lp.parse('https://dl.dropbox.com/u/670189/google-reader-subscriptions.xml') 
>>> len(d.feeds) 
112 
>>> d.feeds[100].url 
u'http://longreads.com/rss' 
>>> d.feeds[100].tags 
[u'reading'] 

Es posible crear el archivo con direcciones URL de alimentación utilizando un script similar a:

import listparser as lp 
d = lp.parse('https://dl.dropbox.com/u/670189/google-reader-subscriptions.xml') 
f = open('/home/USERNAME/.rss-aware/rssfeeds.txt', 'w') 
for i in d.feeds: 
    f.write(i.url + '\n') 
f.close() 

Basta con sustituir USERNAME con tu nombre de usuario real ¡Hecho!

0

También podría usar un regex. He utilizado la siguiente búsqueda y reemplazo de expresiones regulares para convertir mi Google Reader exportación OPML a una importación en vivo-marcador Firefox HTML:

^\s+<outline.*?title="(.*?)".*?xmlUrl="(.*?)".*?htmlUrl="(.*?)".*?/> 
<DT><A FEEDURL="$2" HREF="$3">$1</A> 
2

análisis XML era tan fácil de implementar y funcionó muy bien para mí.

from xml.etree import ElementTree 
def extract_rss_urls_from_opml(filename): 
    urls = [] 
    with open(filename, 'rt') as f: 
     tree = ElementTree.parse(f) 
    for node in tree.findall('.//outline'): 
     url = node.attrib.get('xmlUrl') 
     if url: 
      urls.append(url) 
    return urls 
urls = extract_rss_urls_from_opml('your_file') 
Cuestiones relacionadas