То, о чём так долго говорили большевики, свершилось!
Я написал преобразовывалку вконтактовских новостей в 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/ Слеш на конце обязателен!