2011-12-26 11 views
5

estoy usando YQL para obtener una lista de los alimentos, así:Incluir campo adicional de entrada consulta de selección

SELECT title, link, pubDate FROM rss 
    WHERE url IN ('.implode("','", array_values($urls)).') 

$urls contiene las direcciones URL de alimentación:

$urls = array(
    'delicious' => 'http://feeds.delicious.com/v2/rss/foo', 
    'delicious' => 'http://feeds.delicious.com/v2/rss/anotherfoo', 
    'lastfm' => 'http://ws.audioscrobbler.com/1.0/user/foo/recenttracks.rss', 
    ... 
); 

y me da una gran variedad de elementos con campos title/link/pubdate. Además del campo "enlace", no recibo ninguna información que pueda decirme de dónde proviene el artículo.

¿Cómo puedo incluir un campo adicional de array_keys($urls) que corresponde a la URL (valor)? Necesito básicamente un campo que me dice de qué sitio viene el elemento desde, al igual que delicious, etc. lastfm

Para lastfm pude comprobar con strpos si la cadena "last.fm" está presente en $item['url'], pero con deliciosa vínculos esto no es posible :(


+0

Creo que necesita cambiar la consulta YQL para eso, por lo que la fila de resultados tiene un campo que muestra por qué URL se solicitó. ¿Has intentado agregar URL a los campos SELECCIONAR? No muy conocido en YQL, pero probablemente haya una manera. – hakre

Respuesta

1

Y obtengo una variedad de elementos con los campos title/link/pubdate. Además del campo "enlace", no recibo ninguna información que pueda decirme de dónde proviene el artículo.

para obtener la información de la que cada artículo viene de, agregar el campo source:

SELECT title, link, pubDate, source FROM rss 
    ... 

El resultado contendrá entonces un elemento source en cada entrada, que tiene un atributo url que contiene la url el artículo ha sido obtenido de:

<results> 
    <item> 
     <title>Git Immersion - Brought to you by EdgeCase</title> 
     <pubDate>Wed, 21 Dec 2011 22:15:44 +0000</pubDate> 
     <link>http://gitimmersion.com/</link> 
     <source url="http://feeds.delicious.com/v2/rss/geek">geek's links</source> 
    </item> 

El YQL Demo.

Usted puede buscar todos los campos mediante el uso de *, así es como me enteré del campo source:

SELECT * FROM rss 
    WHERE url IN ('http://feeds.delicious.com/v2/rss/geek', 'http://feeds.delicious.com/v2/rss/foo') 

YQL Query Demo

creo que esto debería responder a su pregunta. Para reducir la cantidad de datos transferidos, también sólo puede seleccionar el atributo url de la fuente de este modo:

SELECT title, link, pubDate, source.url FROM rss 
    ... 

ver tan bien Using YQL to load and convert RSS feeds really, really fast y How to use YQL to merge 2 RSS feeds sorted by pubDate?.


El siguiente es un comentario más antiguo en YQL sintaxis:

Por favor, tome en cuenta que implode("','", array_values($urls)) dejará su YQL en una sintaxis no válida:

... EN (URLA '' urlB ',' urlC)

¿Ves las comillas simples que faltan al principio y al final? Añadirlos:

"'".implode("','", $urls)."'" 

y que debe estar bien. Al menos deberías tener un error menos.

+0

bien, eso fue solo un error en mi pregunta :) Aún necesito averiguar cómo agregar mi campo ... – Alex

+0

@Alex: He agregado cómo puedes hacer que tu campo vuelva, pero no estoy seguro si eso es lo que pediste, házmelo saber. – hakre

1

no se puede simplemente añadir URL a su lista de campos o estás en busca de una función para analizar la URL?

SELECT título, enlace, fecha de publicación, URL DESDE rss

¿Me estoy perdiendo por qué lo anterior no funcionará?

+0

Simplemente no funciona, las fuentes de RSS no tienen un campo de URL, por lo que no se devuelve. – hakre

1

Desde YQL no es SQL, y sólo utiliza la sintaxis de SQL para sus consultas, no hay ninguna posibilidad de SELECT la palabra clave (en su caso url) que se utiliza en la cláusula WHERE. SELECT solo puede acceder a los campos del archivo xml, proporcionado con la palabra clave url. YQL lo analizará por ti y devolverá los campos deseados. Y porque hay muchos estándares de rss diferentes, y no todos los estándares obligan al feed a contener su propia URL, no es posible seleccionar un campo en el feed que devolverá la url en todos los casos.

Creo que tu única posibilidad será recorrer el conjunto $urls y hacer una consulta por feed. Solo así puede mantener la relación entre feed-url y los elementos de este feed.

+0

, pero ¿cómo agrego el campo en mi consulta de selección? eso es lo que no sé hacer ... – Alex

+0

SELECT title, link, pubDate, url FROM [...] Corubba

+0

no funciona, sigo recibiendo solo los 3 campos que mencioné – Alex

Cuestiones relacionadas