Re: Caesium

Ответ на комментарий от 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) [Ответить]
Предыдущее сообщение Следующее сообщение