Ответ на комментарий от Roman Yakovlev
>Чего-то я покрутил фетчер - кое-как добился, чтобы оно в правильном порядке выдавало сообщения, пока нашёл, куда реверсить :) но всё равно в коде не разобрался. Что за загадочное число 48?В общем, вот фетчер на python2, который просто работает:
import urllib2, sys, base64, os
NODE='gk11.ru'
ECHO='obsd besedka humor gk11'
LIMIT=200
def b64d(s):
return base64.b64decode(s.replace('-', '+').replace('_', '/'))
def getf(l):
print 'fetch %s' % l
from StringIO import StringIO
import gzip
request = urllib2.Request(l)
request.add_header('Accept-encoding', 'gzip')
response = urllib2.urlopen(request)
if response.info().get('Content-Encoding') == 'gzip':
f = gzip.GzipFile(fileobj=StringIO(response.read()))
else:
f = response
return f.read()
def sep(l, step=20):
for x in range(0, len(l), step):
yield l[x:x+step]
def debundle(ea, s):
for n in s.splitlines():
mid, kod = n.split(':', 1)
msgbody = b64d(kod)
open('msg/%s' % mid,'w').write(msgbody)
open('echo/%s' % ea,'a').write(mid + '\n')
def fetch(ea, url, lim):
out = getf('%sbb/echo/%s/lim/%s' % (url, ea, lim))
if os.path.exists('echo/%s' % ea):
prev = open('echo/%s' % ea).read().splitlines()
else:
prev = []
dllist = [x for x in reversed( out.splitlines()) if x not in prev]
for dl in sep(dllist, 80):
if ''.join(dl):
s = getf('%sbb/msgs/%s' % (url, ':'.join(dl)))
debundle(ea, s)
url = 'http://%s/' % NODE
for en in ECHO.split():
fetch(en, url, LIMIT)
Roman Yakovlev (2016-04-25 13:09:12)
[Ответить]