 | Демонстрационный пример 3: Фид агента Craigslist
В третьем демонстрационном примере описывается наложение каналов данных - по существу, процесс создания нового компонента Source, аналогичного тому, который приведен в демонстрационном примере #1 с компонентом Google Base. Этот пример использует два отдельных канала данных, каждый из которых можно выполнять независимо, но здесь они будут использоваться совместно.
Целью комбинирования этих каналов является поиск соответствий товаров, продаваемых на Craigslist.org, требуемым позициям, указываемым пользователями. Сначала с сайта передается список требуемых позиций. Затем для каждой позиции выполняется второй запрос для поиска продажи этого товара. Все элементы, найденные для продажи, добавляются как дочерний узел к элементу wanted record.
Этот демонстрационный пример создан из двух каналов данных (один встроен в другой). Первый поток выполняет простой поиск на Craigslist, используя определенное поисковое выражение, и генерирует RSS-фид продаваемых товаров. Это - вложенный канал данных.
Второй канал данных направляет все требуемые позиции с Craigslist.org. Затем он определяет действительные желаемые позиции при помощи специального компонента Content Analysis. Это важно для извлечения коротких терминов из потенциально длинных описаний. Термин "желаемой позиции" сохраняется в виде атрибута и передается в первый канал "товары на продажу" как динамическая входная информация. Это приводит к формированию списка "товаров на продажу", основанного на предоставленной "желаемой позиции", и записи этого списка с желаемой позицией.
Результатом является список позиций, желаемых пользователями Craigslist, хранящий ссылки на сообщения об этих позициях или аналогичных товарах на продажу. Обратите внимание на то, что если вы пропустите этот канал данных через Yahoo Pipes, соответствующие товары "на продажу" не отображаются, даже несмотря на то, что они содержатся в RSS-фиде. Причина этого заключается в ограничении на отображаемую информацию, что не дает вам выбирать, какие части элементов в фиде отображать (потолкайтесь на форумах Pipes и увидите пользователей, просящих большей гибкости в данной области). Однако, если вы разработчик фида и передаете потоки в ваши собственные приложения, можете выполнять навигацию и отображать любые желаемые части фида. Следовательно, этот пример может быть использован в очень специализированных приложениях.
- Перейдите по URL http://pipes.yahoo.com/pipes/pipe.info?_id=5ldWJJHY2xGrYNryqGIyXQ и введите
table в поле Query, как показано на рисунке 32.
Рисунок 32. Мой канал данных, запрашивающий Craigslist
- Получаемый список будет отображать все столы, выставленные на продажу на Craigslist.
- Теперь перейдите по URL http://pipes.yahoo.com/pipes/pipe.info?_id=hk7ADojO2xGdmQTulPXiAA. Отобразятся только товары, желаемые на Craigslist. Вы можете перейти отсюда в оба канала данных в редакторе, чтобы посмотреть, как они были созданы.
Ключевые моменты
Главное в этом примере - использование еще одного канала данных, встроенного в структурную схему процесса. На рисунке 33 можно увидеть основной поисковый канал данных Craigslist, использующийся для передачи фида для каждого элемента в первом канале. Хранящийся с оригинальным элементом атрибут используется для передачи во второй поисковый канал данных. Получаемый вторичный список сохраняется в качестве атрибута supplies в данном случае. Теперь приложение, использующее окончательный поток, может отобразить родительский список RSS-элементов с дополнительными ссылками, найденными в узле supplies каждого элемента. Стандартный RSS-вид не увидит этот дополнительный список ссылок, но специализированное приложение не будет иметь проблем с использованием этого фида.
Рисунок 33. Мой канал данных, запрашивающий Craigslist
|  |