Счастье всего человечества близко-близко

Nov 07, 2008 02:21

То, о чём так долго говорили большевики, свершилось!
Я написал преобразовывалку вконтактовских новостей в RSS.
Вот код vkrss.py:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
from datetime import *
from cgi import escape
import cookielib, urllib2, urllib, re, os, codecs
import sys
import string,cgi,time
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

import random

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

def transform():
data=opener.open('http://vkontakte.ru/news.php?%d'%(random.randint(1,99999))).read()

template='\
\
Новости друзей\
http://vkontakte.ru/news.php\
Новости друзей\
ru-RU%(date)s' % {'date':datetime.now()}
res=template
soup=BeautifulSoup(data)
days = soup.findAll('div',attrs={'style':'padding:10px 10px 20px 10px;'})
theday=date.today()
for day in days:
items=day.findAll('table','feedTable')
for item in items:
time = datetime.strptime(item.find('td','feedTime').string.strip(),"%H:%M").time()
story = item.find('td','feedStory')
for aTag in story.findAll('a'):
aTag['href']='http://vkontakte.ru/'+aTag['href']
name = story.first().string
text = story.first().next.next
dt=datetime.combine(theday,time)
res=res+ '%(name)s %(text)s%(story)s
%(date)s' % {'name':str(name),'text':str(text),'story':escape(str(story)),'date':dt.strftime('%a, %d %b %Y %H:%M:%S +0300')}
theday = theday-timedelta(days=1)

res=res+''
return res

class MyHandler(BaseHTTPRequestHandler):

def do_GET(self):
try:
self.send_response(200)
self.send_header('Content-type', 'application/rss+xml')
self.end_headers()
self.wfile.write(transform())
return

except IOError:
self.send_error(404,'File Not Found: %s' % self.path)

def main():
params = urllib.urlencode({'email': sys.argv[1],'pass': sys.argv[2].encode('cp1251')})
try:
auth_res=opener.open("http://vkontakte.ru/login.php?%s" %params).read()
if re.search(u'пароль неверный'.encode('cp1251'),auth_res):
print "Ошибка авторизации"
sys.exit(1)
except:
print "Ошибка соединения"
sys.exit(1)

try:
server = HTTPServer(('', 9999), MyHandler)
print 'started httpserver...'
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shutting down server'
server.socket.close()

if __name__ == '__main__':
main()

Запускаем так:
python vkrss.py "ваш email" "ваш пароль"

В результате у вас на машине по адресу http://127.0.0.1:9999/ будет работать веб-сервер, который при каждом обновлении будет скачивать новости "В Контакте" и отдавать в виде RSS.

Затем добавляем в RSS-читалку адрес http://127.0.0.1:9999/

В гуглоридере, естественно, не работает, так как преобразование происходит на локальной машине :)

Update:
Небольшие исправления в коде - теперь в теле новости правильные ссылки на картинки и заметки.

Важное дополнение - правильный адрес http://127.0.0.1:9999/ Слеш на конце обязателен!

rss, geek, vkontakte, fun, python

Previous post Next post
Up