wxPythonでTwitterクライアントを作ってみた。
今回は、wxPythonを使ってTwitterクライアントを作ってみた。
GUI部分はwxGladeを利用して作成し、イベント部分はeclipse + pyDevで作成してみた。
wxGladeを使うと、GUI部分が簡単にコーディング出きるし、
途中でGUI部分を変えたくなっても、
他に手動やeclipseから記述したソースが上書きされずに反映出来るので、すごく便利。
さっそくソースを。
wxTweepy2
#!/usr/bin/env python # -*- coding: utf-8 -*- # generated by wxGlade 0.6.3 on Fri Jan 13 22:50:35 2012 import wx import tweepy consumer_key = '登録したときに発行されるやつ' consumer_secret = '登録したときに発行されるやつ' accessfile = 'wxTweepy2.dat' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) # begin wxGlade: extracode # end wxGlade class wxTweepy2(wx.Frame): gapi = None lastid = None def __init__(self, *args, **kwds): # begin wxGlade: wxTweepy2.__init__ kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) self.button_refresh = wx.Button(self, -1, u"更新") self.button_auth = wx.Button(self, -1, u"認証") self.list_box_timeline = wx.ListBox(self, -1, choices=[], style=wx.LB_SINGLE) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnClickRefresh, self.button_refresh) self.Bind(wx.EVT_BUTTON, self.OnClickAuth, self.button_auth) self.OAuth() # end wxGlade def __set_properties(self): # begin wxGlade: wxTweepy2.__set_properties self.SetTitle("wxTweepy2") self.list_box_timeline.SetMinSize((250, 200)) # end wxGlade def __do_layout(self): # begin wxGlade: wxTweepy2.__do_layout sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_2.Add(self.button_refresh, 0, 0, 0) sizer_2.Add(self.button_auth, 0, 0, 0) sizer_1.Add(sizer_2, 0, wx.EXPAND, 0) sizer_1.Add(self.list_box_timeline, 1, wx.EXPAND, 0) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout() # end wxGlade def OnClickRefresh(self, event): # wxGlade: wxTweepy2.<event_handler> '''TimeLineを取得しリストへ追加''' for tl in self.gapi.home_timeline(self.lastid): self.list_box_timeline.Append( '[' + tl.user.name +']\t' + tl.text + '\n', tl.id) self.lastid = tl.id event.Skip() def OnClickAuth(self, event): # wxGlade: wxTweepy2.<event_handler> ''' AccessTokenとAccessToken Secretを取得しシリアライズ ''' import webbrowser import pickle # get_authorization_urlが時間がかかるのでInfo ret = wx.MessageBox('認証結果可返って来るまで時間がかかるかもしれません。\n実行しますか?', '認証', wx.OK|wx.CANCEL|wx.ICON_QUESTION) if ret != wx.OK: event.Skip() return redirect_url = auth.get_authorization_url() webbrowser.open(redirect_url) box = wx.TextEntryDialog(None, 'PIN番号を入力してください。') if box.ShowModal() == wx.ID_OK: auth.get_access_token(box.GetValue()) access_token = (auth.access_token.key, auth.access_token.secret) afile = open(accessfile, 'w') pickle.dump(access_token, afile) afile.close() event.Skip() def OAuth(self): '''OAuthによる認証''' import os import pickle if os.path.exists(accessfile): afile = open(accessfile) access_token = pickle.load(afile) auth.set_access_token(access_token[0], access_token[1]) api = tweepy.API(auth_handler=auth) self.gapi = api # end of class wxTweepy2 if __name__ == "__main__": app = wx.PySimpleApp(0) wx.InitAllImageHandlers() frame_wxTweepy2 = wxTweepy2(None, -1, "") app.SetTopWindow(frame_wxTweepy2) frame_wxTweepy2.Show() app.MainLoop()
こんな感じのすごくシンプルなものが出来る。
実用性は、まだない、、、