вторник, 13 сентября 2011 г.

Чтение стен ВКонтакте через RSS

Недавно возникло желание читать пару групп ВКонтакте. Регулярно заходить туда и проверять, не появилось ли чего нового - это не наш путь. Поэтому, узрев в этом желании отличную возможность поиграться с Google App Engine и Python'овским HTMLParser'ом, написал себе небольшой "велосипед" - vkontakte-feed.appspot.com. :)

Отдает посты с публичных стен в RSS. Пользуйтесь, если кому надо.

49 комментариев:

VGusev комментирует...

Спасибо Дмитрий, как всегда то что надо!

Yurij комментирует...

Отлично.

Dmitry комментирует...

Круто! Спасибо!!!

Анонимный комментирует...

Спасибо - вполне удобно.

Может еще распишете весь процесс создания подобного. Просто пользуюсь для некоторых целей сайтом feed43.com - думаю идея с разбором сайт на куски текста похожа.

Конищев Дмитрий комментирует...

Анонимный, а что именно вас интересует?

Вообще, когда парсишь HTML, к каждому сайту приходится подходить индивидуально. Тут счастья никогда не будет. Да, в vkontakte-feed.appspot.com я расширил Python'овский HTMLParser, чтобы с ним можно было удобно работать, но все равно большая часть кода - это именно подстройка под HTML-код vkontakte.ru.

Можно парсить как я, HTML-парсером (сложнее, но более устойчиво к изменениям дизайна), можно регулярными выражениями, но, в любом случае, если хотите, чтобы за генерируемый RSS не было стыдно, придется повозиться... Ничего особо сложного - просто кропотливая работа, требующая некоторого времени.

А так, на сайте есть ссылка на исходный код - https://github.com/KonishchevDmitry/vkfeed. Смотрите, заимствуйте - я будут только за.

Анонимный комментирует...

Если можно, один багрепорт:

не работает использование id'шников, т.е. http://vkontakte.ru/durov работает, а http://vkontakte.ru/id1 - нет.

Конищев Дмитрий комментирует...

Не знал, что существуют такие маленькие id'шники. :) У меня там просто проверка стоит, чтобы народ не вводил всякую фигню. Спасибо, поправил.

my_funky комментирует...

У меня выдаёт страницу с кодом каким-то почему-то

Конищев Дмитрий комментирует...

Ну вы хотя бы покажите, что за код-то - мне так сложно понять, что именно вы имеете в виду.

P.S.: На всякий случай спрошу: а вы вообще в курсе, что такое RSS? А то, может быть, этот код и есть RSS? :)

Анонимный комментирует...

Хорошая идея, респект. Буду вашим бета-тестером :) а с какой переодичностью обновляется лента?

Конищев Дмитрий комментирует...

На данный момент в реальном времени: при обращении к http://vkontakte-feed.appspot.com/feed/.../wall отправляется запрос на http://vkontakte.ru/, парсится ответ, и генерируется RSS-лента. Впоследствии, возможно, добавлю какое-нибудь кэширование.

Анонимный комментирует...

Спасибо, отлично подошло для http://www.wordle.net/create.

Юрий комментирует...

супер, то что я так давно хотел

boogiebomzh комментирует...

Можно ли добавить авторизацию, чтобы можно было получать стены закрытых групп?

Dmitry Konishchev комментирует...

Тут есть ряд проблем:
1) Если пользоваться ВКонтакте API, то авторизацию придется время от времени подтверждать, т. к. токены, которые выдает API, имеют expiration time. Для RSS-ленты это неприемлемо.
2) Если не использовать API, то пользователь должен будет передать свой логин и пароль моему сервису - не многие согласятся это сделать.
3) Авторизацию в RSS поддерживают далеко не все клиенты. К примеру, самый популярный клиент (Google Reader) не поддерживает. К тому же, он считает все ленты полностью публичными, и может предложить RSS-ленту одного пользователя другому. Поэтому во всех RSS-лентах должна быть исключительно публичная информация.

Мастерстоп комментирует...
Этот комментарий был удален автором.
Мастерстоп комментирует...

Спасибо, работает. Но есть один баг. Как только пользователь добавляет аудиозапись, в течение двух недель будет висеть непрочитанная новость (браузер opera mini от 6.0).
Мелочь, но иногда раздражает.

Но всё равно огромное спасибо за продукт!)

gaRex комментирует...

Дмитрий, а если пользоваться API но к примеру от какого-нить спец. логина во вконтакте, чтобы не парсить HTML?

Dmitry Konishchev комментирует...

gaRex, во-первых, боюсь, что слишком быстро упрусь в лимит на количество просмотренных однотипных страниц в секунду от одного пользователя, а во-вторых - в таком случае я буду отдавать по RSS страницы, которые пользователи пометили как "только для зарегистрированных пользователей", что будет нарушать их privacy.

Данила "Дач" Клюкин комментирует...

Огромнейшее спасибо!

Илия комментирует...

Спасибо огромное, теперь читаю контакт на Флипборде, сортированный по темам, очень удобно и красиво!)

Анонимный комментирует...

Дмитрий !
Спасибо !
Просто супер!
Женя.

Анонимный комментирует...

Дмитрий, ваш сайт превысил какую-то квоту и больше не работает.
Включите, пожалуйста, снова :)

Dmitry Konishchev комментирует...

Анонимный, ВКонтакте RSS - полностью некоммерческий проект, поэтому он бежит на бесплатном аккаунте Google App Engine и, в связи с возросшей популярностью сервиса, под конец каждого дня упирается в лимиты. На данный момент у меня нет времени и желания выносить его на выделенный сервер, поэтому могу разве что порекомендовать либо запустить для себя свой персональный инстанс на Google App Engine, либо воспользоваться social-rss, которым я теперь пользуюсь вместо ВКонтакте RSS.

doreonline комментирует...

Хочу вот Yahoo.Pipes попробовать на предмет формирования ленты с публичных стен. Странно, думал, что уже кто-то такое сделал...
Кстати, зачем вам в блоге капча? Так тяжко разбирать эти каракули... Отпугивать назойливых посетителей?

Vlad комментирует...

Давно пользуюсь вашим сервисом, очень классная штука, но есть одна проблемка.. Я хоть и выбираю отображение "полноразмерного фото", но все равно изображение в RSS намного меньше того, что в самом посте в группе! Не могли бы исправить, если это возможно? Буду очень благодарен! :)

Dmitry Konishchev комментирует...

Vlad, к сожалению, это все, что мне доступно через VK API. Действительно полноразмерную картинку наверняка можно было бы получить, оправляя дополнительные API-запросы для каждой из картинок, но этого я себе не могу позволить, т. к. это сильно увеличит нагрузку на сервис, который итак уже не укладывается в бесплатную квоту Google App Engine.

Семенов Александр комментирует...
Этот комментарий был удален автором.
Dmitry Konishchev комментирует...

Клонируете себе git-репозиторий, меняете все копирайты с "Дмитрий Конищев" и "Dmitry Konishchev" на свои, меняете под себя app.yaml (https://developers.google.com/appengine/docs/python/config/appconfig), и заливаете на свой аккаунт (https://developers.google.com/appengine/docs/python/gettingstartedpython27/uploading).

Читающий комментирует...

А есть ли возможность залить код на свой сайт (хостинг с Pythonом), или обязательно на аккаунт в Google?

Сейчас с удовольствием использую ваш сервис, но вечером утыкаюсь в лимит а хочется независимости.
Скопировал git-репозиторий на хостинг, но как запустить без index.php не разбираюсь.
Нашёл нечто похожее (http://lifeexample.ru/razrabotka-i-optimizacia-saita/format-yaml-i-ego-parser-na-php.html), но применить аналогично - знаний не хватает.
Долгое время успешно работает код Full text RSS (fivefilters.org) на моём сайте - у них доступная инструкция по установке.
Надеюсь на похожий вариант вашего RSS для ВКонтакте.

Newman комментирует...

Есть код для получения RSS Вконтакте со своего хостинга http://code.google.com/p/vk-rss/ , но он не различает многие ссылки на странице и не верно выдаёт главную ссылку в конце - на саму страницу. Хотя основной текст и фото выдаёт отлично

Artem комментирует...

Добрый день.
на сегодня сервис не работает. Когда можно ждать восстановления?

Dmitry Konishchev комментирует...

Artem, сервис хостится на бесплатном аккаунте Google App Engine и каждый день ближе к ночи выбирает свою дневную квоту. На следующий день часов в 11:00-12:00 снова становится доступным. Сервис некоммерческий, делался "на поиграться" и я, честно говоря, не ждал такой популярности. У меня нет возможности выделять время на его развитие, поэтому могу разве что только предложить вам поднять его для себя на собственном аккаунте Google App Engine. На небольшую группу людей дневного лимита Google App Engine хватит за глаза.

Никита комментирует...

Дмитрий,можете ли вы мне скинуть этот сервис,для личного использования?

Alexander комментирует...

Отличная идея! Вы молодец. Может я что то пропустил и не видел, может вы уже описывали процесс, как поставить к себе ваше приложение. А то я в США и когда у вас 11:00 у нас тут глубокая ночь. очень бы пригодилось ваше приложение!

Alexander комментирует...

Отличная идея! Вы молодец. Может я что то пропустил и не видел, может вы уже описывали процесс, как поставить к себе ваше приложение. А то я в США и когда у вас 11:00 у нас тут глубокая ночь. очень бы пригодилось ваше приложение!

Dmitry Konishchev комментирует...

Да, на сайте есть ссылка - https://github.com/KonishchevDmitry/vkfeed

Никита комментирует...

Спасибо!

Анонимный комментирует...

Дмитрий, а для твиттера такая штука возможна? Я нигде не нашёл как ленту в твиттере преобразовать в RSS

Dmitry Konishchev комментирует...

У меня для этого есть еще одно наколеночное поделие, которым я как раз и читаю ВКонтакте и Twitter - social-rss. :) Выдает ленту VK/Twitter через RSS. Но его нужно ставить на своем сервере.

Александр Кострюков комментирует...

Дмитрий, большое Вам спасибо за сервис. Единственное - как можно увеличить длину рсс ленты? А то она выдает только 4-10 последних сообщений?

Александр Кострюков комментирует...

Я установил себе на бесплатный аккаунт тоже, но не могу понять где изменить объем забираемой информации

Александр Кострюков комментирует...

И второй вопрос, за финансовое вознаграждение возможно ли добавить функцию превращения в RSS отдельных обсуждений в группах?

Dmitry Konishchev комментирует...

Количество отдаваемых постов определяется здесь. На публичном сервисе увеличить не могу, т. к. это скажется на исходящем трафике, и бесплатная квота Google App Engine будет выбираться еще быстрее.

Станислав Путешественник комментирует...

Дмитрий, подскажите пожалуйста, как поменять последовательность записи в RSS ленту?
Сейчас это - фото потом текст, а нужно сначала текст, потом фото

Dmitry Konishchev комментирует...

Вот тут https://github.com/KonishchevDmitry/vkfeed/blob/master/vkfeed/tools/wall_reader.py#L187 можно задать нужный вам порядок.

Александр Котович комментирует...

Добрый день! Возможно ли установить на свой сервер?
напишите если не сложно инструкцию по установке на свой сервер. Спасибо!

Dmitry Konishchev комментирует...

На свой сервер нельзя - приложение писалось под Google App Engine и довольно сильно на него завязано (хотя, если у кого будет желание - отвязать его совсем не сложно, особенно если отказаться от кэширования). Но поднять свою версию на GAE - проще простого и к тому же совершенно бесплатно.

Анонимный комментирует...

Дмитрий, спасибо за ваш сервис, в свое время им было очень удобно пользоваться. Сейчас нашел сайт, который не работает через GAE и генерирует довольно симпатичные RSS - https://vkrss.com