人機介面:讀取「朋友名單」

人機界面

程式列表

# -*- coding: utf-8 -*- import wx import wx.grid import time import codecs from facebook import Facebook class MyFacebook(): def __init__(self, myStatusbar, myFriendList): self.myStatusbar = myStatusbar self.myFriendList = myFriendList def Login(self): app_api_key = '張無忌' app_secret_key = '九陽神功' # Get api_key and secret_key from Facebook self.facebookInstance = Facebook(app_api_key, app_secret_key) self.facebookInstance.auth.createToken() # Show login window self.facebookInstance.login() # Login to the window, then press enter self.myStatusbar.SetStatusText(u"15 秒後繼續...", 1) self.uid = None self.name = None while True: time.sleep(15) self.facebookInstance.auth.getSession() info = self.facebookInstance.users.getInfo([self.facebookInstance.uid], ['name'])[0] self.uid = self.facebookInstance.uid self.name = info['name'] if self.uid != None: break self.myStatusbar.SetStatusText(u"登入者:" + self.name, 1) self.myStatusbar.SetStatusText(u"登入者識別碼:" + str(self.uid), 2) def GetFriendList(self, maxNumOfFriend): friends = self.facebookInstance.friends.get() _maxNumOfFriend = len(friends) if len(friends) < maxNumOfFriend else maxNumOfFriend friends = self.facebookInstance.users.getInfo(friends[0:_maxNumOfFriend - 1], ['uid', 'username', 'name', 'first_name', 'last_name']) self.numOfFriend = 0 fileName = str(self.uid) + '-' + self.name + ".csv" facebookFile = codecs.open(fileName, "w", encoding='utf-8') facebookFile.write('"UID", "UserName", "Name"\n') for friend in friends: uid = friend['uid'] if (friend['uid']) else -1 name = friend['name'] if (friend['name']) else "" username = friend['username'] if (friend['username']) else name first_name = friend['first_name'] if (friend['first_name']) else "" last_name = friend['last_name'] if (friend['last_name']) else "" facebookFile.write('"%s", ' % str(uid)) facebookFile.write('"%s", ' % username) facebookFile.write('"%s"\n' % name) self.myFriendList.SetCellValue(self.numOfFriend, 0, str(uid)) self.myFriendList.SetCellValue(self.numOfFriend, 1, username) self.myFriendList.SetCellValue(self.numOfFriend, 2, name) self.myFriendList.SetCellValue(self.numOfFriend, 3, first_name) self.myFriendList.SetCellValue(self.numOfFriend, 4, last_name) self.numOfFriend = self.numOfFriend + 1 if (self.numOfFriend > 0): self.myFriendList.AppendRows(1, True) facebookFile.close() self.myFriendList.AdjustScrollbars() self.myFriendList.ForceRefresh() self.myFriendList.AutoSize() self.myFriendList.EnableEditing(False) self.myStatusbar.SetStatusText(u"資料筆數:" + str(self.numOfFriend), 0) def Logout(self): pass class MyFrame(wx.Frame): def __init__(self, *args, **kwds): # begin wxGlade: MyFrame.__init__ kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) self.gridFriendList = wx.grid.Grid(self, -1, size=(1, 1)) # Menu Bar self.frameMain_menubar = wx.MenuBar() self.menuFacebook = wx.Menu() menuRead = self.menuFacebook.Append(wx.ID_OPEN, u"讀取 [&R]") menuQuit = self.menuFacebook.Append(wx.ID_CLOSE_ALL, u"結束 [&Q]") self.frameMain_menubar.Append(self.menuFacebook, u"臉書 [&F]") self.SetMenuBar(self.frameMain_menubar) # Menu Bar end self.frameMain_statusbar = self.CreateStatusBar(3) self.__set_properties() self.__do_layout() # end wxGlade self.Bind(wx.EVT_MENU, self.menuRead_onClick, menuRead) self.Bind(wx.EVT_MENU, self.menuQuit_onClick, menuQuit) self.myFacebook = MyFacebook(self.frameMain_statusbar, self.gridFriendList) def __set_properties(self): # begin wxGlade: MyFrame.__set_properties self.SetTitle(u"臉書朋友清單") self.SetSize((800, 600)) self.gridFriendList.CreateGrid(1, 5) self.gridFriendList.SetSelectionMode(wx.grid.Grid.wxGridSelectRows) self.gridFriendList.SetColLabelValue(0, u"識別碼") self.gridFriendList.SetColLabelValue(1, u"帳號") self.gridFriendList.SetColLabelValue(2, u"名稱") self.gridFriendList.SetColLabelValue(3, u"姓") self.gridFriendList.SetColLabelValue(4, u"名") self.frameMain_statusbar.SetStatusWidths([-1]) # statusbar fields frameMain_statusbar_fields = [u"資料筆數", u"訊息", "0000"] for i in range(len(frameMain_statusbar_fields)): self.frameMain_statusbar.SetStatusText(frameMain_statusbar_fields[i], i) # end wxGlade def __do_layout(self): # begin wxGlade: MyFrame.__do_layout sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add(self.gridFriendList, 1, wx.EXPAND, 0) self.SetSizer(sizer_1) self.Layout() # end wxGlade def menuRead_onClick(self, event): self.gridFriendList.ClearGrid() self.myFacebook.Login() self.myFacebook.GetFriendList(1000) self.myFacebook.Logout() def menuQuit_onClick(self, event): self.Close() # end of class MyFrame if __name__ == "__main__": app = wx.PySimpleApp(0) wx.InitAllImageHandlers() frameMain = MyFrame(None, -1, "") app.SetTopWindow(frameMain) frameMain.Show() app.MainLoop()