import wx, sys, time, urllib, threading, serial from xml.dom import minidom global MyList MyList = list() def EVT_RESULT(win,func): win.Connect(-1,-1,111,func) class RESULT(wx.PyEvent): def __init__(self, data): wx.PyEvent.__init__(self) self.SetEventType(111) self.data = data class MyPanel(wx.Panel): def __init__(self, master): topsizer = wx.BoxSizer( wx.HORIZONTAL ) contentsizer = wx.BoxSizer( wx.VERTICAL ) wx.Panel.__init__(self,master, -1) self.textbox = wx.TextCtrl( self, -1, "", wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) self.textbox.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)) contentsizer.Add(self.textbox, 1, wx.EXPAND) topsizer.Add(contentsizer, 1, wx.EXPAND) self.SetSizer(topsizer) def addText(self,text): self.textbox.SetValue("") for textItem in text: self.textbox.AppendText(textItem) self.textbox.AppendText("\n") #self.textbox.AppendText(text) class Main_Frame(wx.Frame): def __init__(self, parent=None, id=-1, title='Blowing up balloons with a firehose'): wx.Frame.__init__(self, parent, id, title) self.CenterOnScreen() self.SetDimensions(3,30,1440,800,1) self.panel = MyPanel(self) self.Show() ThreadController(self).start() EVT_RESULT(self, self.updateMessage) def updateMessage(self, event): self.panel.addText(event.data) #self.panel.addText(str(event.data)) class SerialComms(): def __init__(self): pass def startComm(self): self.ser = serial.Serial('/dev/tty.usbserial-A1001NB4', 9600) def sendMessage(self, message): self.ser.write(message) def stopComm(self): self.ser.close() class ThreadController(threading.Thread): def __init__(self, master): threading.Thread.__init__(self) self.master = master self.mainList = list() self.mainList = ["begun"] self.Serial = SerialComms() self.Serial.startComm() self.amount = 0 def run(self): while True: twitter = ContactTwitter("coffee") twitterResult = twitter.makeSearch() tempList = twitter.sortSearch(twitterResult, self.mainList) wx.PostEvent(self.master, RESULT(tempList)) self.mainList = tempList currentAmount = twitter.getCurrentAmount() self.Serial.sendMessage(str(currentAmount)) time.sleep(5) class ContactTwitter(): def __init__(self, search): self.search = search self.curNum = 0 def sortSearch(self, rawList, compiledList): self.rawList = rawList self.compiledList = compiledList if len(self.compiledList) == 0: self.compiledList = self.rawList for compiledItem in self.compiledList: try: self.rawList.remove(compiledItem) except ValueError: pass for raw in self.rawList: self.compiledList.append(raw) self.curNum = len(self.rawList) return self.compiledList def makeSearch(self): self.liveList = list() self.id = 0 self.entries = [0] #print "getting web info" url = "http://search.twitter.com/search.atom?rpp=20&q=%s&since_id=%s" % (self.search, self.id) try: xml = urllib.urlopen(url) except IOError: self.liveList.append("error from url link") return self.liveList try: doc = minidom.parse(xml) except UnboundLocalError: self.liveList.append("error parsing xml") return self.liveList try: self.entries = doc.getElementsByTagName("entry") except UnboundLocalError: self.liveList.append("error reading entries") return self.liveList if len(self.entries) > 0: self.entries.reverse() name = "no name" pub = "no pub" for e in self.entries: # title = e.getElementsByTagName("title")[0].firstChild.data try: title = e.getElementsByTagName("title")[0].firstChild.data except IndexError, AttributeError: #print "error from get title" pass try: name = e.getElementsByTagName("name")[0].firstChild.data.split(" ")[0] except IndexError, AttributeError: pass try: pub = e.getElementsByTagName("published")[0].firstChild.data except IndexError: pass result = name+": "+title+ "..." self.liveList.append(result) return self.liveList def getCurrentAmount(self): return self.curNum class Main_App(wx.App): def OnInit(self): self._main_frame = Main_Frame() self.SetTopWindow(self._main_frame) return True if __name__ == '__main__': main_app = Main_App() main_app.MainLoop()