2011-06-13 5 views
1

J'utilise YQL pour récupérer plusieurs flux RSS (canaux) à la fois, en utilisant la requête suivante:Limitation et la gestion des erreurs dans YQL RSS feednormalizer

SELECT * FROM feednormalizer 
WHERE output="rss_2.0" 
AND url in ("http://rss.cnn.com/rss/edition.rss", 
      "http://bad.url.com/nothing", 
      "http://rss.cnn.com/rss/edition_space.rss") 

j'ai donc fait 2 questions:

  1. Comment puis-je limiter chaque flux à une certaine quantité d'éléments? (par exemple, je veux obtenir les 3 premiers éléments de chaque canal)
  2. Notez que la 2ème URL n'est pas valide (pas une URL d'un vrai RSS). dans ce cas, le résultat YQL renvoie 2 canaux valides plus une erreur, mais il n'y a aucune indication sur les URL valides et celles qui ont échoué. En d'autres termes, pour chaque flux de résultats, il n'y a aucune indication de l'URL à laquelle il est arrivé.
    des idées sur la façon d'identifier chaque canal?

grâce

Répondre

1

1ère question:

la première pensée qui vient à l'esprit est: query.multi utilise

SELECT rss.channel.item FROM query.multi WHERE queries=" 
    SELECT channel.item FROM feednormalizer WHERE output='rss_2.0' AND url = 'http://rss.cnn.com/rss/edition.rss' LIMIT 3; 
    SELECT channel.item FROM feednormalizer WHERE output='rss_2.0' AND url = 'http://rss.cnn.com/rss/edition_space.rss' LIMIT 3;" 

pas la façon la plus élégante, mais ça marche.

2ème question:

Je ne pense pas que ce soit possible. Comme la syntaxe WHERE x IN()... de YQL n'est pas vraiment une jointure SQL, il n'est pas possible de sélectionner des parties de la sous-requête interne dans la projection, ce dont vous auriez besoin pour votre cas.

serais heureux si quelqu'un me proove tort sur celui-ci, comme je l'ai besoin que deux ou trois fois moi-même et avait toujours travailler autour d'elle :) programatically

+0

merci. la première réponse aide. mais le format des résultats est un peu désordonné, et vous devez demander les données du canal séparément. mais cela m'a donné une idée pour la 2ème question: vous pouvez utiliser multi query, et si un seul flux est invalide - vous pouvez savoir lequel il est par son index dans le résultat. pas aussi le plus élégant - mais au moins cela fonctionne :) de toute façon - merci encore pour votre aide! –