
Будь мой блог не delphi блог и будь его адрес не parsers.info, я бы никогда не стал массово получать адреса rss лент со списка сайтов.
Программа консольная, использует модуль httpsend из библиотек synapse (Vlad рекомендует этот модуль, проверим?). Также пришлось подключать Classes, так как его использует httpsend, а так как мы его подключили, то и с записью в файл мудрить не будем – не такие у нас большие списки. Еще я подключил StrUtils, общий вес получился 136Kb, в общем, терпимо.
Немного о задачах программы. Вот у нас есть список очень интересных, к примеру, блогов. И у нас есть примитивный rss-ридер, который понимает только адреса на rss-ленту. Мы список блогов помещаем в sites.txt и запускаем программу. Всё! Немного ждём (с потоками я тоже не стал заморачиваться), и у нас есть заветный rss.txt – список лент. Ну и error.txt – там сайты, к которым не удалось подключиться и у которых не оказалось rss-лент.
Стоп. А как Feed link parser узнаёт адрес ленты? Всё просто, обычно лента прописывается в одном из тегов link раздела head страницы. Посмотри исходник сайта, если интересно, не будем вдаваться в подробности. (да, программа берет только первый адрес, это в случае нескольких таких тегов)
скачать feed link parser
скачать исходник feed link parser
(c) crystalbit, http://parsers.info
Постовой: Интереснейшие статьи о блогосфере читай на dofollow блоге ульяновского чувака.
Прикольная программа правда жутко нахватает многопоточности, срочно прикрутить.
В следующей версии обещаю :)
А сейчас
пора спатьсессияИ как прошла проверка? :) Я пока глюков не встретил в библиоеке. Непривычно конечно немного после Indy использовать Synapse, но мне нравиЦЦО
Единственное, что напрягло, так это то, что HttpGetText в параметре требует TStrings, да и сама библиотека использует Classes и SysUtils, что не очень выгодно в консольных приложениях, 136Кб многовато. Хотя тому же indy до этого ой как далеко. Я к тому, что если библиотека основана на сокетах, могло бы быть и на чистом api^^
В общем, это единственное, к чему я на данный момент смог придраться :)
она ж заточена под многопоточность. WinAPI, WinInet и пр. автоматически отметаются
МлО, ступил. не Многопоточность, а кроссплатформенность :)
а я уже понадеялся, что напишу две строчки, и программа станет многопоточной :)
на моей памяти winapi 1.1 совместимо с linux, разве нет?
А вот фиг знает – совместимо или нет. в Wiki Lazarus чётко было сказано, что WinAPI никаким макаром не применим в Лазаре под Линуксом. Надо проверить как-нибудь самому
По идеи он не может быть совместим хотя бы по тому, что win-api это виндовый прибомбас. В линуксе его нет, ну разве что wini.
Не, тут речь немного не о том. Не в том дело, что в Линухе вдрук бац и выполз целый модуль прям как в винде и с под винду заточеный. Нет. Просто могут быть аналогичные функции, например схожие по названию, параметрам и т.д. Как например модули Windows и Unix – применяются в разных ОС, а имена и параметры функций 1 в 1. Просто я таих не встречал – сразу полез в синапс да там и остался
хм… как вам такое?
$ cat feed_parser.sh #!/bin/sh URI_LIST=sites_list.txt FEED_LIST=feed_list.txt cat ${URI_LIST} | while read URI do echo "GET " ${URI} curl ${URI} | grep rss+xml | awk -F'"' '{print $8}' >> ${FEED_LIST} done exit 0Внушает уважение, спасибо :) Сам никогда не работал с регулярками, привык всё вручную
да фигня. это я сейчас на коленке написал. на perl можно и многопоточное написать с регэкспами и прочей фигней.
RegExp – сила, согласен. Многопоточность? На delphi это тоже не так уж и сложно. Прикручу потом.
Для меня написание всегда было на втором плане, вот идея хорошей и нужной программы, хорошего и нужного поста – вот в этом часто проблема.
А почему на C++ не переходишь? Или Python?
Как-то исторически сложилось :)
Думаешь, стоит?
Забавно. Получился агрегатор RSS, подшлифуйте и можно будет коммерческую версию делать для КПК. А что, хороший агрегатор я бы купил.
Все работает, на 7 дельфе!
Отличная софтина!