Emacs
|
Carpal Tunnel
|
|
|
|
Рег.: 19.06.2008
|
Сообщений: 4873
|
|
Рейтинг: 1683
|
|
Троллье
25.07.2009 12:18
|
|
|
По аналогии с этим написал утилитку построения графа вопрос-ответов. Например, для треда http://forumlocal.ru/showflat.php?Cat=&Board=society&... он показывает, какой срач развела ерсупь - ей в основном отвечают. http://img-fotki.yandex.ru/get/3614/denis-cheremisov.9/0_2c3... code: #!/usr/bin/env python
# -*- coding: utf-8 -*-
# призываю лучи поноса
import re
import sys
import gzip
import pydot
import sgmllib
import urllib2
from operator import truth
from cStringIO import StringIO
output_file = 'out.gif'
cookies = dict(
w3t_w3t_myid='',
w3t_w3t_key='',
)
headers = {
'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11',
'Accept': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'Accept-Language': 'en-us,en;q=0.5',
'Accept-Encoding': 'gzip,deflate',
'Accept-Charset': 'UTF-8,*',
'Keep-Alive': '300',
'Connection': 'keep-alive',
'Cookie': 'w3t_w3t_myid={w3t_w3t_myid}; w3t_w3t_key={w3t_w3t_key}; w3t_w3t_language=english; w3t_w3t_favicon=shaller1;'.format(**cookies),
'Cache-Control': 'max-age=0',
}
class Enumerate(object):
def __init__(self, names):
for number, name in enumerate(names.split()):
setattr(self, name, number)
state = Enumerate('WAIT_TR WAIT_SUBJECTTABLE_TD WAIT_FIRST_B READ_NAME WAIT_FONT_CLASS WAIT_FOR_RE')
class ShitParser(sgmllib.SGMLParser):
"""
Выявляет направления полета какашек
"""
replyto = re.compile(r'\[re:(.*?)\]')
shit_in_brackets = re.compile(r'(?:\(.*?\))?(.*)')
def __init__(self, verbose = 0):
sgmllib.SGMLParser.__init__(self, verbose)
self.state = state.WAIT_TR
self.name = ''
self.pairs = []
def start_tr(self, attrs):
if self.state == state.WAIT_TR:
self.state = state.WAIT_SUBJECTTABLE_TD
def end_tr(self):
self.state = state.WAIT_TR
def start_td(self, attrs):
if not attrs:
return
key, value = attrs[0]
if self.state == state.WAIT_SUBJECTTABLE_TD and (key,value) == ('class', 'subjecttable'):
self.state = state.WAIT_FIRST_B
def end_td(self):
self.state = state.WAIT_TR
def start_b(self, attrs):
if self.state == state.WAIT_FIRST_B:
self.state = state.READ_NAME
def end_b(self):
if self.state == state.READ_NAME:
self.state = self.WAIT_FONT_CLASS
def start_font(self, attrs):
if self.state != state.WAIT_FONT_CLASS:
return
if not attrs:
self.state = state.WAIT_TR
else:
key, value = attrs[0]
if key == 'class' and value == 'small':
self.state = state.WAIT_FOR_RE
def handle_data (self, data):
if self.state == state.READ_NAME:
match = ShitParser.shit_in_brackets.match(data)
self.name = unicode(match.group(1), 'cp1251').encode('utf-8')
self.state = state.WAIT_FONT_CLASS
elif self.state == state.WAIT_FOR_RE:
match = ShitParser.replyto.match(data)
if truth(match):
self.pairs += [(self.name, unicode(match.group(1), 'cp1251').encode('utf-8'))]
self.state = state.WAIT_TR
def getTrolledThread(thread_id, board):
"""
Здесь можно получить только страничку с затролленым тредом, ибо других не бывает
thread_id - это какая-то хуйня, но не индекс раздела
board - тоже хуйня
"""
url = 'http://forumlocal.ru/showflat.php?Cat=&Board={board}&Number={thread_id}&fullview=2&src=&o=&tistart=all&vc=1&showlite=l&fullview=2'.format(thread_id = thread_id, board = board)
req = urllib2.Request (url, None, headers)
response = urllib2.urlopen(req)
if 'content-encoding' in response.headers.dict:
if response.headers.dict['content-encoding'] == 'gzip':
return gzip.GzipFile('','r',0,StringIO(response.read()))
return response
parser = ShitParser()
content = getTrolledThread(sys.argv[1], sys.argv[2]).read()
parser.feed(content)
parser.close()
g = pydot.Dot()
for user1, user2 in parser.pairs:
g.add_edge(pydot.Edge(user1, user2))
g.write_png(output_file)
|
Ein Gemeinschaft, Ein Platform, Ein Emacs А что за тема с белым кошаком? |
|
rebel_yv
|
львы
|
|
|
|
Рег.: 28.08.2006
|
Сообщений: 20212
|
Из: Chelyabinsk
|
Рейтинг: 12840
|
|
|
а что Пофигисту и Емаку надо от Ер_Суб?
|
|
|
Emacs
|
Carpal Tunnel
|
|
|
|
Рег.: 19.06.2008
|
Сообщений: 4873
|
|
Рейтинг: 1683
|
|
|
я повелся - думал она заблуждается, неверно трактуя представления историков о нравах русского общества XV-XVII веков.
|
Ein Gemeinschaft, Ein Platform, Ein Emacs А что за тема с белым кошаком? |
|
rebel_yv
|
львы
|
|
|
|
Рег.: 28.08.2006
|
Сообщений: 20212
|
Из: Chelyabinsk
|
Рейтинг: 12840
|
|
|
а она верно трактовала? (сожно ссылку на тред?)
|
|
|
Emacs
|
Carpal Tunnel
|
|
|
|
Рег.: 19.06.2008
|
Сообщений: 4873
|
|
Рейтинг: 1683
|
|
|
ссылка в первом посте.
нет, неверно: судя по всему, она имеет весьма приблизительные познания в русской истории того времени. В частности, исходила из посыла, что православная церковь никогда не поддерживала процессы схожие в инквизицией, хотя во всех источниках посвященных инквизиции и упоминающих наших попов всегда встречается утверждение, что "в русской православной церкви инквизиционная деятельность не приобрела такого размаха как в западной европе". Ерсупь же, для которой откровением стали отдельные факты наказаний на почве религиозного инакомыслия в русском государстве, на это возражение ответила в ключе, что "совки ноют будто у других было еще хуже".
Ну то есть на лицо низкая эрудированность в этой области + желание подкинуть говнеца в вентилятор.
|
Ein Gemeinschaft, Ein Platform, Ein Emacs А что за тема с белым кошаком? |
|
sokol
|
ясный
|
|
|
|
Рег.: 08.11.2002
|
Сообщений: 39240
|
|
Рейтинг: 12313
|
|
|
Воспринимать Ерсуб всерьез это уже признак неадеквата. Забей на нее чувак.
|
|
rebel_yv
|
львы
|
|
|
|
Рег.: 28.08.2006
|
Сообщений: 20212
|
Из: Chelyabinsk
|
Рейтинг: 12840
|
|
|
да уж лучше прислушайся, она все верно написала (по крайней мере, на первых страницах) и посыл ее понятен, в отличие от православных утрарадикальных фундаменталистов
|
|
|
Emacs
|
Carpal Tunnel
|
|
|
|
Рег.: 19.06.2008
|
Сообщений: 4873
|
|
Рейтинг: 1683
|
|
|
она неверно написала: спозиционировала себя как борца за правду с кровавыми пгмнутыми учеными-совками, приписала им слова которые они никогда не говорили (типа, ничего подобного инквизиции не было), а как раз описание их позиций (про наличие схожих процессов, но не принявших таких масштабов как в ойропе) выдает за свою победу: "у них еще хуже". Это смешно, а касательно тебя - это выдает предвзятость, тем более я уже описал официальную позицию. Для человека в теме то, что казни были, далеко не новость. Но совершенно четкий факт: таких масштабов как у еуропеишек они не принимали, а еденичные факты так и остались еденичными фактами.
|
Ein Gemeinschaft, Ein Platform, Ein Emacs А что за тема с белым кошаком? |
|
FAQ
|
|
|
|
|
Рег.: 21.01.2006
|
Сообщений: 27776
|
Из: Воронеж
|
Рейтинг: 13090
|
|
|
а есть возможность этот скрипт прикрутить в фичи форума. чтобы в треде была внизу кнопка "посмотреть графическое представление"?
|
|
Emacs
|
Carpal Tunnel
|
|
|
|
Рег.: 19.06.2008
|
Сообщений: 4873
|
|
Рейтинг: 1683
|
|
Re: Троллье
[re: FAQ]
28.07.2009 17:23
|
|
|
вряд ли, генерация графа - очень трудоемкая процедура, на моем компе занимает довольно много времени и жрет очень много памяти, порядка 1-2 гигов на больших тредах.
|
Ein Gemeinschaft, Ein Platform, Ein Emacs А что за тема с белым кошаком? |
|
Owen
|
как взрослый
|
|
|
|
Рег.: 01.05.2005
|
Сообщений: 10054
|
|
Рейтинг: 21235
|
|
|
В принципе, его можно хранить в базе и достраивать в момент добавления очередного опста. Правда, итоговая реализация обещает быть весьма заморочной. Хоть такая фишка была бы и правда весьма приятна, имхо, окажется, что овчинка не стоит выделки =(
|
|
Bubbleguy
|
Оппозицонный ватник
|
|
|
|
Рег.: 23.06.2005
|
Сообщений: 20339
|
Из: ул Ицамны 15
|
Рейтинг: 12652
|
|
|
Генерация картинки? Я думаю, куда проще переварить результат в таблицу. Строки - кому отвечали, столбцы, кто отвечал. В полях число постов. Сам сбор данных должен быть очень быстрым.
|
Не заботаешь матан, будешь добывать уран. Слава Росатому! |
|
Rad
|
delinquent guy
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 17290
|
Из: here and there
|
Рейтинг: 2232
|
|
|
нафига картинку форуму генерить? У графа есть куча более легких для построения представлений. Кстати, мне кажется нецелесообразным рисовать по отдельности каждую линию: ведь все равно они несут информацию только о количестве и направлении, а первое можно закодировать, например, цветом.
|
|
|