Форум сайта python.su
Привет люди ! Вот делаю бота для irc но не могу понять как мне выбрать информацию с def tpars(txt) , если знаете помогите =))
# -*- coding: cp1251 -*-
import socket
import time
import httplib
host='irc.lv'
channel='#Dragstyle^'
def tpars(txt):
q=txt.split('<span class="temp">') [1]
temp=q.split(' C') [0]
qq=txt.split('<span>') [1]
wind=qq.split('</span>') [0]
return temp
return wind
class parsing:
def __init__(self,DATA):
i=0
self.data = DATA
t=self.data.split('<TD>Players with 1 lvl</TD>') [0]
tt=t.split('<TD colSpan=3>Server</TD></TR>') [-1]
while i != 4:
num = str(i)
num=tt.split('</TD></TR>') [i]
info=num.split('<TD width=100>') [-1]
if i == 0:
acc = info
elif i == 1:
char = info
elif i == 2:
guild = info
elif i == 3:
online = info
i=i+1
self.debug = tt
self.acc = acc
self.online = online
self.char = char
self.guild = guild
def sendm(msg):
sock.send('PRIVMSG '+ channel + ' :' + str(msg) + '\r\n')
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, 6667))
sock.send('USER python host servname : Python Bot\r\n')
sock.send('NICK pyMan\r\n')
while 1:
text=sock.recv(2040)
if not text:
break
if text.find('Message of the Day') != -1:
sock.send('JOIN '+ channel +'\r\n')
if text.find('PING') != -1:
sock.send('PONG ' + text.split() [1] + '\r\n')
if text.find(':!quit') != -1:
sock.send('QUIT :python bot\r\n')
if text.find(':bot') != -1:
sendm('no , you are bot')
if text.find('JOIN :'+ channel) != -1:
sendm('Hello')
if text.find(':KICK') != 1:
sock.send('JOIN '+ channel +'\r\n')
if text.find(':!status') != -1:
conn = httplib.HTTPConnection("mubass.oo.lv")
conn.request("GET","/?pg=serv-stats")
r = conn.getresponse()
data = r.read()
inf = parsing(data)
sendm('Online: '+ inf.online +'')
sendm('Accounts: '+ inf.acc +'')
sendm('Characters: '+ inf.char +'')
sendm('Guilds: '+ inf.guild +'')
conn.close()
if text.find(':!date') != -1:
sendm(''+ time.strftime("%A, %B %d, %Y", time.localtime()))
if text.find(':!time') != -1:
sendm(''+ time.strftime("%H:%M:%S", time.localtime()))
if text.find(':!weather') != -1:
c = httplib.HTTPConnection("www.1188.lv")
c.request("GET", "/laika_zinas/?city=Daugavpils")
ra = c.getresponse()
datas = ra.read()
tpars(datas)
sendm('Temp: '+ temp)
sendm('Wind: '+ wind)
c.close()
print '[GET]', text
Офлайн
Конкретизируй немного вопрос, в чем именно трабла?
З.Ы. В текущем коде у тебя функция tpars возврашает только одно значение в строке
return temp
до
return wind
дело уже не доходит. %)
Офлайн
мне надо как-то выбрать с tpars “temp” и “wind” как мне это можна зделать ?
if text.find(':!weather') != -1:
c = httplib.HTTPConnection("www.1188.lv")
c.request("GET", "/laika_zinas/?city=Daugavpils")
ra = c.getresponse()
datas = ra.read()
tpars(datas)
sendm('Temp: '+ temp)
sendm('Wind: '+ wind)
c.close()
Traceback (most recent call last):
File "ircbot.py", line 102, in <module>
sendm('Temp: '+ temp)
NameError: name 'temp' is not defined
Офлайн
а. ну да =)
Потому что они обе находтся в функции tpars.
в этой функции их сначала надо грамотно вернуть:
def tpars(txt):
....
....
return temp, wind
tpars(datas)
temp, wind = tpars(datas)
Офлайн
shiza
Большое спасибо всё работает =)))
А вот кстати ты знаешь как зделать что-бы по команде !weather Daugavpils или !weather Riga менялось бы строчка /laika_zinas/?city=здесь ? Знаю как только просто написать через raw_input , а так ещё незнаю только не давно стал питон учить =)
Отредактировано (Дек. 18, 2008 21:07:50)
Офлайн
странные затруднения.. %)
так например:
...
if text.find(':!weather') != -1:
if text.find('Daugavpils') != -1: #если нашли Daugavpils - то такой-то запрос
reqest_str = "/laika_zinas/?city=Daugavpils
elif text.find('Daugavpils') != -1: #если нашли такой-то город - то такой-то запрос
reqest_str = "chto-to tam eshe"
else: #если никакого города не нашли... подходящего берем погоду ... ну например опять для Daugavpils %)
reqest_str = "/laika_zinas/?city=Daugavpils"
c = httplib.HTTPConnection("www.1188.lv")
c.request("GET", reqest_str)
....
Отредактировано (Дек. 18, 2008 21:21:26)
Офлайн
Ты меня как-бы не понел я имел ввиду типо !weather <gorod> там более 100 городов я просто чокнусь стоко писать =)) надо что-бы где ?city=“yt” только бы yt менялся
Офлайн
а вот этот скрипт можна-ли добавить в бота ?
import socket
def parsing(txt):
txt=txt.replace('\377', '')
if txt.find('m') == 0:
serv_name=txt.split('\0') [1]
serv_map=txt.split('\0') [2]
serv_engine=txt.split('\0') [3]
serv_game=txt.split('\0') [4]
print 'Server name:', serv_name
print 'Game:', serv_game, '('+serv_engine+')'
print 'Map:', serv_map
s = raw_input("Wrote ip: ")
ip=s
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect((ip, 27015))
sock.send('\377\377\377\377TSource Engine Query\0')
while 1:
text=sock.recv(1024)
text=parsing(text)
if not text:
break
print '[GET]', text
sock.close()
Офлайн
примерно как-то так…:
if text.find(':!weather') != -1:
tmp = text.split(':!weather')
if len(tmp) < 2: #город вытащить не удалось
pass
else:
city = tmp[1].strip() #коцаем пробелы и прочую ботву
reqest_str = '/laika_zinas/?city=' + city
c = httplib.HTTPConnection("www.1188.lv")
c.request("GET", reqest_str)
....
Офлайн
armagidonМожно все =)
а вот этот скрипт можна-ли добавить в бота ?
Офлайн