Ответ на комментарий от 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)
[Ответить]