Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Консольный чат-клиент к форуму [RSS Feed]

#1 Март 2, 2015 12:15:53

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Консольный чат-клиент к форуму

Есть форум IPBoard
В нем (на сколько я понял) есть встроенный чат shoutbox написанный на JS
Подскажите или поделитесь мыслями, какой инструментарий использовать для того что бы реализовать консольный клиент к этому чату максимально просто?
Привязываться к HTTP и парсингу HTML файла или можно как то напрямую обращаться к тем же внутренним функциям shoutbox.js что бы получить список сообщений или отправить месадж.
В данном направлении я смело могу сказать что полный ноль.
Если кто даст хороший линк - отдельное спасибо!
На данный момент даже нагуглить толком ничего не удалось!
Единственнное что нашел - похожий проэкт
http://forum.hellroom.ru/index.php?topic=19369.0
Но там все сильно иначе



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#2 Март 2, 2015 13:01:43

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Консольный чат-клиент к форуму

если там JS чат, то там все делается get да post запросы. С помощью инструментов браузера или расширения типа FireBug можно подсмотреть за ходом работы и , наряду с исходным кодом чата на js, узнать какие запросы он шлет. В питоне понадобится http библиотека, requests думаю будет легко и просто. В качестве интерфейса можно построить что то вменяемое на ncurses.
P.S. сам глазами не смотрел, но в общих чертах такой вариант вижу.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Март 2, 2015 14:41:22

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Консольный чат-клиент к форуму

Ну на сколько пока удалось понять - чат этот никаких XML не возвращает! А просто выплевывает HTML .
Вот вопрос - как бы тогда фильтровать данные что бы получать только то что нужно?
Я понимаю что вопросы очень простые но для меня они очень сложные!



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Март 2, 2015 22:28:23

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Консольный чат-клиент к форуму

ZerG
ответ видимо парсинг html. Для этого есть lxml, BeautifulSoup и ряд других. Я пользовался BS, достаточно туториал проглядеть на оф сайте, и применять на практике. В общем все возможно и, наверняка, не так сложно как сейчас кажется



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Март 3, 2015 08:20:34

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Консольный чат-клиент к форуму

Да собственно к етому и пришел…
Конечно идейнее было бы как то дергать функции напрямую из JS файла - но это пока что какойто запредельный уровень



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Март 3, 2015 10:36:00

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Консольный чат-клиент к форуму

Вобщем никак не удается справиться с элементарной задачей - распарсить файл!
Код файла:

<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()')

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

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

Помогите распарсить пожалуйста.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Март 4, 2015 05:48:47

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Консольный чат-клиент к форуму

У меня в ответе почему-то нет тегов

<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:



Отредактировано pyuser (Март 4, 2015 05:51:30)

Офлайн

#8 Март 4, 2015 08:43:14

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Консольный чат-клиент к форуму

Спасибо попробую. У вас его нет потому что вы не зарегистрированы



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

  • Начало
  • » Web
  • » Консольный чат-клиент к форуму[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version