Aug 09
Twitter to IRC monitor bot (python)
A SSL IRC bot that takes a feed from search.twitter.com and sends it to a irc channel. Edit the search variable to change the search terms. Needs python2.6. Bot will display 5 tweets every 20 seconds. Twitter search code taken from here. Tumblr screws up the quotes so unbroken code here
from xml.dom import minidom
import time, urllib2, socket, ssl, time, random, string
class bot:
def __init__(self, host, port, chan):
self.irchost=host
self.ircport=port
self.ircnick=”TMon-“
self.ircchan=chan
self.irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
self.irc.connect ((self.irchost, self.ircport))
self.sslirc = ssl.wrap_socket(self.irc)
self.sslirc.write(‘NICK ‘+self.ircnick+’\r\n’)
self.sslirc.write(‘USER ‘+self.ircnick+’ ‘+self.ircnick+’ ‘+self.ircnick+’ :’+self.ircnick+’\r\n’)
time.sleep(1)
while 1:
self.ircdata = self.sslirc.read()
print(self.ircdata)
if ‘End of /MOTD command.’ in self.ircdata: #?
#time.sleep(1)
self.sslirc.write(‘JOIN ‘+self.ircchan+’\r\n’)
self.getweet()
if self.ircdata.find(‘PING’) != -1: #handle pings
self.sslirc.write(‘PONG :’+self.ircdata[6:]+’\r\n’)
def getweet(self):
try:
search = “leeds”
id = 0
while True:
socket.setdefaulttimeout(90)
url = “http://search.twitter.com/search.atom?rpp=5&q=%s&since_id=%s” % (search, id)
try:
xml = urllib2.urlopen(url)
except(urllib2.HTTPError, urllib2.URLError) as err:
self.sslirc.write(‘PRIVMSG ‘+self.ircchan+’ :[!] http timeout\r\n’)
print (‘[!] http timeout’)
time.sleep(5)
else:
doc = minidom.parse(xml)
entries = doc.getElementsByTagName(“entry”)
if len(entries) > 0:
entries.reverse()
for e in entries:
title = e.getElementsByTagName(“title”)[0].firstChild.data
id = e.getElementsByTagName(“id”)[0].firstChild.data.split(“:”)[2]
name = e.getElementsByTagName(“name”)[0].firstChild.data.split(” “)[0]
str=(name,title,)
#filtered_string = ”.join(filter(lambda x:x in string.printable, str))
fs=”.join([x for x in title if ord(x) < 128])
self.sslirc.write(‘PRIVMSG ‘+self.ircchan+’ :’+name+’ - ‘+fs+’\r\n’)
#print fs
time.sleep(20)
except(AttributeError):
pass
b = bot(‘irc.server’,6697,’#channel’)