Ограничение и обработка ошибок в YQL RSS feednormalizer - PullRequest
1 голос
/ 13 июня 2011

Я использую YQL для получения нескольких RSS-каналов (каналов) одновременно, используя следующий запрос:

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")

так что у меня фактически есть 2 вопроса:

  1. Как я могу ограничить каждый фид определенным количеством предметов? (например, я хочу получить топ 3 позиции от каждого канала)
  2. Обратите внимание, что 2-й URL недействителен (не URL реального RSS). в этом случае результат YQL возвращает 2 действительных канала плюс ошибку, но нет указания, какие URL действительны, а какие - нет.
    другими словами - для каждого фида результатов нет указания, с какого URL он пришел.
    есть идеи, как определить каждый канал?

спасибо

1 Ответ

1 голос
/ 13 июня 2011

1-й вопрос:

первая мысль, которая приходит в голову, использует query.multi:

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;"

Не самый элегантный способ, но он работает.

2-й вопрос:

Я не думаю, что это возможно. Поскольку синтаксис YQL WHERE x IN ()... на самом деле не является соединением SQL, невозможно выбрать части внутреннего подзапроса в проекции, что вам потребуется для вашего случая.

Был бы рад, если бы кто-нибудь доказал, что я ошибаюсь в этом, так как я сам нуждался в этом пару раз, и мне всегда приходилось обходиться обходным путем:)

...