# темы сайта
51t(lenina,1) — All
2014-08-06 11:33:25


а нам, девчи, надо, наверное, всё таки двигаться в агрегирования, собирая rss-ленты и почтовые рассылки. собирать большую-большую базу, с отдельным веб-интерфейсом (хотя, конечно, всё будет доступно по подписке с одного адреса), это будет отдельный от офлайнизатора сервис, предоставляющий именно актуальную информацию.

Сейчас я (пока из веб интерфейса), скрою некоторые эхи (так они будут доступны, если знаешь название)

Андрей, у тебя где-то был сборщик rss - покажи ещё раз, где?

# Re: темы сайта
51t(lenina,1) — 51t
2014-08-06 11:41:52


и с новостями надо что-то делать. фигачить их большой темой - не подходит, загораживают вечно...

кто-нибудь умеет делать бегущую строку или что-то типа того?

# Re: темы сайта
spline(station13, 1) — 51t
2014-08-06 14:54:02


>Андрей, у тебя где-то был сборщик rss - покажи ещё раз, где?

https://github.com/spline1986/rss2ii

Он кривоватый. Но в своё дурацкое оправдание могу сказать что я не знаю python =)

Результат его работы можно посмотреть, например, тут ii://spline.lor.rss.14 или ii://ifprint.14. У меня в читалке можно посмотреть http://spline.rooker.ru/ii/

# Re: темы сайта
vit01(mira, 1) — spline
2014-08-06 15:05:41


> Результат его работы можно посмотреть, например, тут spline.lor.rss.14 или ifprint.14.
Ещё ii://lenta.dark.14 , там же тоже твой скрипт работает. Правда, я его чуть-чуть подправил, для того чтобы он ссылку добавлял.

# Re: темы сайта
spline(station13, 1) — vit01
2014-08-06 15:28:51


>Ещё ii://lenta.dark.14 , там же тоже твой скрипт работает.

Не знал =)

# Re: темы сайта
51t(lenina,1) — spline
2014-08-06 15:44:01


да, страшноватенько :)

по-моему, всё таки будет проще добавить rss к моему фетчеру :) [у меня там тоже на фидпарсер заточено], а преобразовывать с помощью того же html2text. но твой код тоже разберу, чтобы понять, что там и как...

# Re: темы сайта
spline(station13, 1) — 51t
2014-08-06 16:09:27


>да, страшноватенько :)

Ну я хорошо знаю только паскаль. А пайтон только гуглением знаю. Надо бы книжку умную почитать какую, но у меня в очереди sicp и добить уже pcl. А там уже и не знаю так ли мне пайтон нужен будет =)

# Re: темы сайта
51t(lenina,1) — spline
2014-08-06 16:28:20


я про метод замены...

не знаю, ни книжек не читал про python, да и поисковики не очень жалую... просто когда-то начал писать, даже не зная, как правильно hello_world, и он в процессе сам изучился.

# Re: темы сайта
spline(station13, 1) — 51t
2014-08-06 16:47:50


>я про метод замены...

Это не просто страшноватенько. Это отвратительно =) Но пока просто лень до ума довести это безобразие.

>не знаю, ни книжек не читал про python, да и поисковики не очень жалую... просто когда-то начал писать, даже не зная, как правильно hello_world, и он в процессе сам изучился.

Просто вопрос потраченного времени. У меня на пайтоне был недописанный движок для раголиков на libtcod и вот этот ретранслятор. На лиспе уже больше проектов =)

# Re: темы сайта
51t(lenina,1) — spline
2014-08-06 16:53:15


вот, насобирал. требуется html2text.py и feedparser.py

# -*- coding: utf-8 -*-

import urllib, os, base64, hashlib, time, html2text, feedparser as feed

RSSURL='http://www.linux.org.ru/news/linux-general/10737394?output=rss'
ECHO='re.14'

def hsh(s):
    return base64.urlsafe_b64encode( hashlib.sha256(s).digest() ).replace('-','A').replace('_','z')[:20]

def ru(fn):
    try: return open(fn).read().decode('utf-8')
    except: return ''

def gts():
    return int(time.time())

def newmsg(ea,msgfrom,addr,msgto,subj,txt):
    s = 'ii/ok\n%s\n%s\n%s\n%s\n%s\n%s\n\n%s' % (ea,gts(),msgfrom,addr,msgto,subj,txt)
    h = hsh(s)
    if len(s) < 65536:
        open('msg/%s' % h,'wb').write(s)
        open('echo/%s' % ea,'ab').write(h + '\n')
        return h

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 parse_news_msgs(rurl,ea):
    o = feed.parse(rurl)
    prev = ru('rssdb/%s' % ea).splitlines()
    for q in reversed(o.entries):
        if not q.guid in prev:
            h = html2text.HTML2Text()
            h.body_width=0
            h.ignore_links = False
            h.ignore_images = True
            txt = h.handle(q.description).encode('utf-8')
            newmsg(ea,q.author.encode('utf-8') or 'rss','rssarea,1','All',q.title.encode('utf-8'),txt)
            open('rssdb/%s' % ea,'a').write('%s\n' % q.guid)

parse_news_msgs(RSSURL,ECHO)

ещё для работы требуются пустые каталоги rssdb, msg и echo

# улучшеный rss gate
51t(lenina,1) — 51t
2014-08-07 04:30:52


# -*- coding: utf-8 -*-

import base64, hashlib, time, html2text, feedparser

RSSURL='http://51t.ru/rss/pipe.2032'
ECHO='pipe.2032'
ADDR='rssarea,2032'

def hsh(s):
    return base64.urlsafe_b64encode( hashlib.sha256(s).digest() ).replace('-','A').replace('_','z')[:20]

def ru(fn):
    try: return open(fn).read().decode('utf-8')
    except: return ''

def gts():
    return int(time.time())

def newmsg(ea,msgfrom,addr,msgto,subj,txt):
    s = 'ii/ok\n%s\n%s\n%s\n%s\n%s\n%s\n\n%s' % (ea,gts(),msgfrom,addr,msgto,subj,txt)
    h = hsh(s)
    if len(s) < 65536:
        open('msg/%s' % h,'wb').write(s)
        open('echo/%s' % ea,'ab').write(h + '\n')

def parse_news_msgs(rurl,ea):
    o = feedparser.parse(rurl)
    prev = ru('rssdb/%s' % ea).splitlines()
    for q in reversed(o.entries):
        if not q.guid in prev:
            h = html2text.HTML2Text()
            h.body_width=0; h.ignore_links = False; h.ignore_images = True
            txt = h.handle(q.description).encode('utf-8')
            newmsg(ea,q.author.encode('utf-8') or 'rss',ADDR,'All',q.title.encode('utf-8'),txt)
            open('rssdb/%s' % ea,'a').write('%s\n' % q.guid)

parse_news_msgs(RSSURL,ECHO)

# Re: улучшеный rss gate
spline(station13, 1) — 51t
2014-08-07 05:49:09


Блин. Красотень то какая. Надо этот html2txt в свой впендюрить. Но я как всегда своей путёй иду и заточку под свой автотоссер оставить хочу.

# Re: улучшеный rss gate
spline(station13, 1) — 51t
2014-08-07 11:14:56


Хы. Твоё сообщение роняет мой клиент. Интересно почему это. Роняет со строки

def newmsg(ea,msgfrom,addr,msgto,subj,txt):

но что с этим делать пока не знаю. Не могу вычислить что не так происходит.

# Re: улучшеный rss gate
spline(station13, 1) — spline
2014-08-07 11:41:00


>Не могу вычислить что не так происходит

А происходит вот что. Если printw из ncurses скормить %s, то оно падает.