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

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

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

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

19 comments:

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.