FeedEx: расширяем фиды в один клик

    Однажды меня достало получать урезанные версии статей по RSS, а за полными ходить на сайты. Предпочитаю на сайты ходить только ради комментариев.
    Я осмотрелся. Нашел Dapper, Feed43 и множество им подобных. Они мне не понравились. Мне в полную версию надо было преобразовать по крайней мере с десяток лент, да и новые кандидаты появлялись регулярно. А вышеупомянутые генераторы лент для сайтов, в общем, достаточно сложны, а dapper ещё и глючил на моём FireFox`е.

    Что же было делать? А делать оставалось только свой собственный сервис, благо тема Information Retrieval мне близка и интересна. Я и сделал. Потратив на реализацию сайта примерно с неделю свободного времени (откуда свободное время? да просто ЖЖ читать на эту неделю перестал), получил вполне себе работоспособный feedex.net.

    Простой, как мне и хотелось. Одно поле для адреса. Потом несколько минут размышлений (я IR-логику писал на python, плюс вопросом оптимизации покамест не задавался) и вот она — полная лента. Для всех интересных мне сайтов оно вполне неплохо работает. Не без мелких огрехов (а на нетипичных сайтах и не без крупных), но работает.

    PS: особо весело получилось с лентой lleo.aha.ru/dnevnik/rss.xml, автор у которой — известный приколист ;o)
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 49

      +1
      Молодец! :)
        0
        сбоит на движке dle — пробовал на сайте _fledur.org.ua/rss.xml
        надо бы подправить имхо
        а вообще хороший скрипт
          0
          Забей свой _fledur.org.ua/rss.xml в feeds.feedburner.com/ а уже его в feedex.net/. Но вот картинки не кажет…
        • UFO just landed and posted this here
            +1
            Где-то пол года назад делал что то подобное для своих саттелитов. Алгоритм использовался достаточно простой и вместе с тем эффективный. В двух словах:
            1. Чистим документ от всего лишнего, комментарии, скрипты, атрибуты, вообщем все кроме абзацев, tr (либо td) и дивов.
            2. Дальше разбиваем все это дело в массив используя разделитель либо див либо td (или tr). (В этом месте автоматизации добиться не удалось, поэтому для каждой ленты я указывал какая это верстка)
            3. Подсчитывалось количество русских букв в каждом элементе. В каком элементе массива букв оказалось больше тот и победил )).
            А дальше мы его прогоняем через tidy и вуаля, наш контент готов.
              0
              Хотя здесь возможно и другой алгоритм.
                0
                Определенно здесь другой ;o) Но первая его версия была похожа на описанный, да.
                  0
                  Ну, вкратце озвучьте хоть на чём основывается — интересно ведь 8-)
                    0
                    На самом деле тут последовательно используются три не связанных друг с другом алгоритма. Два из которых довольно очевидны, а третий создан по мотивам похожего по назначению перлового модуля.
                      0
                      Эм, а название модуля не подскажите, чтобы глянуть хоть для примера?
            +1
            пошёл тестить
              +1
              А почему бы не использовать стабильно работающий Yahoo Pipes?
                +2
                Кривят эти трубы зачастую. Да и этот сервис тоже через раз работает :(
                  0
                  Они уже умеют восстанавливать полные ленты по обрезкам? А как?
                    0
                    Вот неплохой пример: www.daybarr.com/blog/2007/12/11/yahoo-pipes-tutorial-an-example-using-the-fetch-page-module-to-make-a-web-scraper

                    Там на примере обдирания форума в rss, с фидами еще проще.
                      0
                      Правильно ли я понял, что алгоритм действий таков: для каждого движка сайта надо создать свой алгоритм извлечения информации, свой Yahoo! Pipe, после чего для каждого нового сайта перебирать пайпы, пока не попадётся подходящий, либо создать новый.

                      Да, это будет стабильно, ибо предполагает ручную работу для каждого сайта. Но вы действительно полагаете, что это проще заявленных в посте даппера с 43feeds (тоже предполагающих ручную работу)? Не говоря уж про мой сервис с единственным полем ввода.
                        0
                        Любую такую систему надо подпиливать, чтоб получить хороший результат. Если устраивают фиды с косяками — то можно и тут всё сделать на автомате.

                        Я попоробовал, скормил вашей системе первый попавшийся блог (www.maxss.info/feeds/posts/default):
                        1) она завалилась на RSS-е, смогла обработать только Atom. RSS — с фидбурнера.
                        2) поломались картинки.
                        3) криво вырезаются теги. Пример — «Чайна Мьевилл „Вокзал потерянных снов“» вот тут: feedex.net/feed/www.maxss.info/feeds/posts/default

                        Вот пример для этого блога на яху пайпс: pipes.yahoo.com/pipes/pipe.info?_id=8ff752442f0d1b9991e2b6a8bb4f9dbe
                        Времени ушло — минут 10, максимум. Картинки есть, режется всё чисто. Что еще надо?

                        Мало того, sub pipe, который выкачивает записи, он подходит к практически любому вордпресс-бейзд блогу. Добавить новый блог — нажать clone, edit и указать новый url. Feed discovery кстати тоже работает.
                          0
                          > Любую такую систему надо подпиливать, чтоб получить хороший результат. Если устраивают фиды с
                          > косяками — то можно и тут всё сделать на автомате.

                          Так и я о том же. Нужна абсолютная точность — только ручная работа. Допустимы небольшие огрехи — можно доверить дело автомату.

                          > 1) она завалилась на RSS-е, смогла обработать только Atom. RSS — с фидбурнера.

                          По адресу www.maxss.info/feeds/posts/default?alt=rss мне отдали следующее:
                          [19:14 /home/nik]$ dog www.maxss.info/feeds/posts/default\?alt\=rss
                          HTTP/1.0 404 Not Found

                          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" «www.w3.org/TR/html4/strict.dtd»>


                          Это не очень похоже на валидный RSS.

                          > 2) поломались картинки.

                          Ага. Оформленные подобным образом картинки с точки зрения моего скрипта подозрительно напоминают элементы интерфейса.

                          > 3) криво вырезаются теги. Пример — «Чайна Мьевилл „Вокзал потерянных снов“» вот тут: feedex.net/feed/www.maxss.info/feeds/posts/default

                          Ага, так как не пользуюсь подкастами, то на оных свою систему до сих пор не тестировал.

                          > Времени ушло — минут 10, максимум. Картинки есть, режется всё чисто. Что еще надо?

                          Согласен, а в даппере каком это было бы не менее просто, но ещё и визуально.

                          > Мало того, sub pipe, который выкачивает записи, он подходит к практически любому вордпресс-бейзд
                          > блогу.

                          Это вряд ли. Я занимался анализом типичного HTML кода у разных движков. С WP используется несколько сильно различных по коду тем.

                          В принципе, вы меня навели на мысль о том, как можно улучшить качество извлечения данных. Спасибо.
                            0
                            По пункту 3 — там редирект.

                            C:\Photo\2008 — Greece>wget «www.maxss.info/feeds/posts/default?alt=rss»
                            --20:40:40-- www.maxss.info/feeds/posts/default?alt=rss
                            => `default@alt=rss'
                            Resolving www.maxss.info... 66.249.91.121
                            Connecting to www.maxss.info|66.249.91.121|:80… connected.
                            HTTP request sent, awaiting response… 302 Moved Temporarily
                            Location: feeds.feedburner.com/maxss/rOBX [following]
                            --20:40:40-- feeds.feedburner.com/maxss/rOBX
                            => `rOBX'
                            Resolving feeds.feedburner.com… 66.150.96.119
                            Connecting to feeds.feedburner.com|66.150.96.119|:80… connected.
                            HTTP request sent, awaiting response… 200 OK
                            0
                            > Что еще надо?

                            А ответ на вопрос почему я таки сам пользуюсь своим сервисом а не дапперами или яхами — всё тот же. Лениво писать (пусть и по 10 минут на каждый) экстракторы под каждый фид. Плюс обновлять оные в случае смены дизайна сайта-донора.
                            А главное — на тех фидах, которые нужны мне, мой сервис работает практически без замечаний ;o)

                            По части же точного (ручного) указания сервису, какой блок данных следует извлекать, у меня есть следующая идейка. Я набросал сайтик pagemon.net (в настоящее время работает только под Firefox и, полагаю, Opera), где подобный выбор осуществляется визуальным образом (а не поиском в html-коде уникальной последовательности символов). Думаю, со временем можно будет прикрутить тамошнюю блоко-выбиралку к feedex`у, благодаря чему появится (опциональная!) возможность легко и просто объяснить сервису где он не прав.
                    0
                    не совсем корректно определяет, футеры сайтов добавляет, порой целые колонки, а вообще респект, буду следить за развитием
                      0
                      Немного поправил алгоритм обработки свеже-добавленных фидов. Теперь должен определять футеры немного лучше.
                      +1
                      Интересно, что сказали бы по поводу названия сервиса в FedEx. ;-)
                        0
                        Мне тоже любопытно. Впрочем мой домен вполне неплохо замотивирован, да и является .net`ом (ибо сетевой сервис), а не .com (как их сайт).
                      • UFO just landed and posted this here
                          0
                          Движков и темизаций слишком много. Затачиваться специально на каждый мне показалось лениво. Поэтому покамест используется именно, что общий алгоритм. Который может извлекать как посты с блога на друпале, так и, скажем, комиксы с www.phdcomics.com ;o)
                          0
                          Сейчас использую Google Reader с greasemohkey-дополнением Preview — мне удобно.

                          А вот Ведомости (http://www.vedomosti.ru/) забрать не удалось. Пробовал также через Yahoo Pipes совместить хотя 3 ленты в одну —не вышло из-за нестандартной кодировки (win-1251 Яху понимать отказался)
                            0
                            Ага, я тоже пользовался preview до того, как сделал этот сервис.
                            0
                            Спасибо.
                            Было бы очень хорошо, если бы для сложившихся сайтов (ЖЖ, например) скрипт знал местоположение потока, т. е. например smths.livejournal.com автоматом превращалось в smths.livejournal.com/data/rss
                              0
                              Можно сделать автодетект лент на сайтах. Я подумаю, может такую функциональность и добавлю.
                              0
                              Спасибо! Полезная штучка получилась!
                                0
                                Спасибо, вот только с картинками беда. Например вот здесь:
                                www.film.ru/export/articles.rss.asp
                                  0
                                  Я посмотрю, что можно с ними сделать.
                                  0
                                  Полезная игрушка. А вот у меня два вопроса:
                                  1) в случае, если по ссылке контента нет — останется ли тизер в фиде?
                                  2) можно исходники посмотреть?
                                    0
                                    > Полезная игрушка.

                                    Я знаю. У меня около 10% всех фидов в гугл-ридере через этот сервис качаются.

                                    > А вот у меня два вопроса:
                                    > 1) в случае, если по ссылке контента нет — останется ли тизер в фиде?

                                    Да, если контента по ссылке меньше некоторого количества символов, а в тизере больше — в фид включается именно тизер.

                                    > 2) можно исходники посмотреть?

                                    Нет :o)
                                      0
                                      2) из соображений «жадности» или для усложнения борьбы с сервисом тем, кто фиды полные отдавать не хочет? :-)
                                        0
                                        Ага (скажем, с lleo мы три итерации броня-снаряд уже прошли), плюс ещё несколько причин.
                                          0
                                          Гм… как минимум используя firefox+mozrepl можно сделать принципиально непобедимый снаряд с сумасшедшим оверхэдом, думаю, запуск такого снаряда можно будет сравнить с ядерной атакой :-D
                                            0
                                            > Гм… как минимум используя firefox+mozrepl можно сделать принципиально непобедимый снаряд с
                                            > сумасшедшим оверхэдом, думаю, запуск такого снаряда можно будет сравнить с ядерной атакой :-D

                                            Почти непобедимый, да. Но тяжелый и не очень удобный в обращении. Я успешно использовал подобный метод против сайтов, практикующих Javascript шифрование текстов. Думал даже сделать javascript-enabled-proxy (http-proxy, которая выдаёт страницы с уже отработавшими onLoad и им подобным javascript`ами), но поленился.

                                            И против подобного, разумеется, тоже можно бункер построить. Как, впрочем, и разработать ещё более хитрый снаряд.
                                              0
                                              Я, если честно, очень плохо себе представляю, как без активного взаимодействия с пользователем построить бункер супротив такого снаряда. А просить вводить капчу для того, чтоб прочитать текст — форменный фашизм.
                                                0
                                                > Я, если честно, очень плохо себе представляю, как без активного взаимодействия с пользователем
                                                > построить бункер супротив такого снаряда.

                                                Ну, lleo, скажем, использует клоакинг супротив IP-адреса моего (и ещё многих) сервера. Это, конечно, легко обходится.
                                                Можно придумать ещё много характеризующих признаков, по которых и баннить. Да, тогда легко могут пострадать невиновные люди (скажем, я теперь не могу использовать этот свой сервер в качестве прокси при просмотре дневника lleo, получилась забавная ситуация — я могу его читать в гугл-ридере, но не могу читать его на его же собственном сайте).

                                                > А просить вводить капчу для того, чтоб прочитать текст — форменный фашизм.

                                                Да, разумеется. Но это бы сработало на некоторое время.
                                            0
                                            P.S. английское соглашение о конфиденциальности на русскоязычном сайте — это, по-моему, ужасно.
                                              0
                                              Это не русскоязычный сайт. Он мультиязычный. Не будь вы русским, сайт бы разговаривал с вами на английском. Я посчитал, что никому кроме англоговорящих всяческие соглашения тосы и тому подобные бумажки в принципе не интересны.
                                      0
                                      А нет ли у разработчика мысли, что было бы неплохо вести каталог обработанных лент?
                                        0
                                        А зачем?
                                          0
                                          Я бы даже уточнил — успешно обработанных лент. С результатом, удовлетворившего пользователя.
                                          Тех лент, в которых отсутствуют лишнее и ненужное, не относящееся к новости.
                                          Таким образом, проще было бы забирать полные и качественные фиды.

                                            0
                                            Очень странный use case. Вы правда думаете, что пользователи, получив ленту будут ещё где-то отмечать степень своей удовлетворенности?
                                              0
                                              Признаться, я бы отметил.
                                              Я уже второй раз пользовался этим сервисом. И во второй раз, скопом переводя все свои подписки, выявил, что половину лучше оставить такими, как и раздает их «официальный» источник. Так, например, неоднозначно были обработаны rss Коммерсанта, Автокадабры, Главбуха… да и Хабрхабр, увы, не идеален. Допускаю, что в этом может быть и вина ридера (в основном я в последнее время читаю rss на коммуникаторе под WM).
                                                0
                                                > Признаться, я бы отметил.

                                                тогда не лучше ли воспользоваться любым из упонянутых на сайте средств обратной связи и сообщить мне о каждой конкретной проблеме? Возможно, я как-нибудь в очередной раз перепишу алгоритм извлечения, учтя выявленные недостатки текущего.

                                                По «списку удачных фидов» я всё ещё не понял. Вы бы свои подписки действительно бы стали искать в подобном списке, вместо того что бы просто ввести адрес в форму и посмотреть, что получится? А что стали бы делать с теми фидами, которые в списке не нашли (скажу по секрету, редкий фид у меня запрашивается более, чем одним пользователем)?

                                      Only users with full accounts can post comments. Log in, please.