Найти - Пользователи
Полная версия: Консольный чат-клиент к форуму
Начало » Web » Консольный чат-клиент к форуму
1
ZerG
Есть форум IPBoard
В нем (на сколько я понял) есть встроенный чат shoutbox написанный на JS
Подскажите или поделитесь мыслями, какой инструментарий использовать для того что бы реализовать консольный клиент к этому чату максимально просто?
Привязываться к HTTP и парсингу HTML файла или можно как то напрямую обращаться к тем же внутренним функциям shoutbox.js что бы получить список сообщений или отправить месадж.
В данном направлении я смело могу сказать что полный ноль.
Если кто даст хороший линк - отдельное спасибо!
На данный момент даже нагуглить толком ничего не удалось!
Единственнное что нашел - похожий проэкт
http://forum.hellroom.ru/index.php?topic=19369.0
Но там все сильно иначе
JOHN_16
если там JS чат, то там все делается get да post запросы. С помощью инструментов браузера или расширения типа FireBug можно подсмотреть за ходом работы и , наряду с исходным кодом чата на js, узнать какие запросы он шлет. В питоне понадобится http библиотека, requests думаю будет легко и просто. В качестве интерфейса можно построить что то вменяемое на ncurses.
P.S. сам глазами не смотрел, но в общих чертах такой вариант вижу.
ZerG
Ну на сколько пока удалось понять - чат этот никаких XML не возвращает! А просто выплевывает HTML .
Вот вопрос - как бы тогда фильтровать данные что бы получать только то что нужно?
Я понимаю что вопросы очень простые но для меня они очень сложные!
JOHN_16
ZerG
ответ видимо парсинг html. Для этого есть lxml, BeautifulSoup и ряд других. Я пользовался BS, достаточно туториал проглядеть на оф сайте, и применять на практике. В общем все возможно и, наверняка, не так сложно как сейчас кажется
ZerG
Да собственно к етому и пришел…
Конечно идейнее было бы как то дергать функции напрямую из JS файла - но это пока что какойто запредельный уровень
ZerG
Вобщем никак не удается справиться с элементарной задачей - распарсить файл!
Код файла:
<tr class='row1'>
			<td id='shoutbox-shouts-td' valign='top' class='altrow'>
				<div id='shoutbox-shouts' style='height:406px;overflow:auto;'>
					<table id='shoutbox-shouts-table'>
						<tbody>
							<tr class='row2' id='shout-row-19835'>
	<td style='width: 1%; white-space: nowrap;'>
			<a href="#" class="at_member" data-store="kobzar" title="Insert member's name into Shout">@</a>&nbsp;
		<a hovercard-ref="member" hovercard-id="21788" data-ipb="noparse" data-ipb="noparse" class="_hovertrigger url fn name  " href='http://lanos.com.ua/forum/user/217-kobzar/' title='Просмотр профиля'><span itemprop="name"><span style='color:#000000;font-weight:bold;'>kobzar</span></span></a>
	</td>
	<td style='width: 1%; white-space: nowrap;'>:</td>
	<td style='width: 98%;'>
		<span class='right desc' title=''>(03/03/15 - 08:18:51)</span>
			<span class='shoutbox_text'>Фтарой!</span>
	</td>
</tr><tr class='row2' id='shout-row-1734'>
	<td style='width: 1%; white-space: nowrap;'>
			<a href="#" class="at_member" data-store="lyolik" title="Insert member's name into Shout">@</a>&nbsp;
		<a hovercard-ref="member" hovercard-id="574" data-ipb="noparse" data-ipb="noparse" class="_hovertrigger url fn name  " href='http://lanos.com.ua/forum/user/574-lyolik/' title='Просмотр профиля'><span itemprop="name"><span style='color:#0000ff;font-weight:bold;'>lyolik</span></span></a>
	</td>
	<td style='width: 1%; white-space: nowrap;'>:</td>
	<td style='width: 98%;'>
		<span class='right desc' title=''>(03/03/15 - 08:13:56)</span>
			<span class='shoutbox_text'>Утро доброе!</span>
	</td>
</tr>

Время и сообщения получаю
# -*- coding: utf-8 -*-
from lxml import html
import requests
page = requests.get('http://lanos.com.ua/forum/shoutbox/')
tree = html.fromstring(page.text)
data = tree.xpath('//span[@class="right desc"]/text()')
mess = tree.xpath('//span[@class="shoutbox_text"]/text()')

Но вот получить никнейм пользователя никак не получается! Кроме того - хотелось бы кроме самого ника получить еще и значение некоторых его полей:
Цвет, ссылку на профиль, айди

Еще мне кажется я не совсем правильно делаю выгребая списки по отдельности. Может можно к чемуто то привязатся и получить сразу Никнейм с параметрами, время и текст сообщения.

Помогите распарсить пожалуйста.
pyuser
У меня в ответе почему-то нет тегов
<a hovercard-ref="member"...
т.е. я не могу получить ссылку на страницу профиля

ZerG
Помогите распарсить
Несколько многословно:
import requests
from lxml.etree import XPath
from lxml.html import fromstring
def get_chat_rows():
    page = requests.get('http://lanos.com.ua/forum/shoutbox/')
    tree = fromstring(page.text)
    parts = XPath("//tr/*/a/@href|//tr/*/span/@style|//tr/*/span/text()|//tr/*/span/a/text()")
    parts = parts(tree)[1:]
    
    row = []
    for part in parts:
        if part == "#":
            yield row
            row[:] = []
            continue
        row.append(part)
        
for row in get_chat_rows():
    print(row[:3] + ["\n".join(row[3:])])
Если в Вашем ответе присутствует тег, указанный мной в начале поста, то :3 и 3: замените соответственно на :4 и 4:
ZerG
Спасибо попробую. У вас его нет потому что вы не зарегистрированы
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB