Changeset 17940

Show
Ignore:
Timestamp:
08/21/08 08:55:37 (5 months ago)
Author:
showyou
Message:

crochet データ取得にWebスクレイピング実装

Location:
lang/python/crochet
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/python/crochet/chat_allsrc.py

    r17088 r17940  
    6464        def run(self): 
    6565                #ここに通信処理を書く 
    66                 a = self.tw.get("") 
     66                #a = self.tw.get("") 
     67                a = self.tw.getWithScraping("") 
    6768                self.func(a) 
    6869 
     70""" 
     71カスタムページ(自分でフィルタリングする) 
     72""" 
     73class CustomPage(wx.NotebookPage): 
     74 
     75        dataList = [] 
     76        def __init__(self, parent): 
     77                 
     78                self.owner = parent 
     79                wx.NotebookPage.__init__(self,parent.getNotebook(),-1) 
     80                parent.getNotebook().AddPage(self,'DM') 
     81                list = self.list = wx.ListCtrl(self,-1,style=wx.LC_REPORT|wx.LC_HRULES) 
     82                list.Bind(wx.EVT_KEY_DOWN, self.myKeyHandler) 
     83                list.Bind(wx.EVT_LIST_ITEM_ACTIVATED,self.OnDoubleClick) 
     84 
     85                list.InsertColumn(0," ",1,20) 
     86                list.InsertColumn(1,u"ユーザ") 
     87                list.InsertColumn(2,u"発言",0,200) 
     88                list.Bind(wx.EVT_LIST_ITEM_SELECTED,self.OnTwitListSelect) 
     89         
     90        def Reflesh(self): 
     91                t = TwDMHttpThread(self.owner.tw,self.RefleshList) 
     92                t.run() 
    6993""" 
    7094最近のfriendsの発言一覧を表示するページ 
     
    193217 
    194218                                dataList.append(dataListElement) 
     219                 
     220                # Listへの追加 
    195221                i = 0 
     222                import re 
     223                user = self.owner.tw.user['user'] 
    196224                for b in dataList: 
    197225                        j = 0 
     
    200228                                list.SetStringItem(i,j,b[j]) 
    201229                         
     230                        if re.match(user,b[1]): 
     231                                self.list.SetItemTextColour(i,wx.Color(0,0,255)) 
     232 
     233                        if re.search(user,b[2]): 
     234                                self.list.SetItemTextColour(i,wx.Color(255,0,0)) 
    202235                        #import time 
    203236                        #time.sleep(1)           
     
    251284         
    252285        def Reflesh(self): 
    253                 t = TwDMHttpThread(self.owner.tw,self.RefleshList) 
    254                 t.run() 
     286                #t = TwDMHttpThread(self.owner.tw,self.RefleshList) 
     287                #t.run() 
     288                pass 
    255289         
    256290class MainFrame(wx.Frame): 
     
    287321                notebook = self.notebook = wx.Notebook(self,-1) 
    288322 
    289                 # Recent 
    290323                self.recentPage = RecentPage(self) 
    291                  
    292                 # Reply 
    293324                self.replyPage = ReplyPage(self) 
    294  
    295                 # Direct 
    296325                self.directPage = DMPage(self)  
    297326 
     
    304333                userIcon = self.userIcon = wx.StaticBitmap(self,-1,wx.NullBitmap,(0,0),(64,64)) 
    305334                userName = self.userName = wx.StaticText(self,-1,"test") 
    306                 twitTime = self.twitTime = wx.StaticText(self,-1,"") 
     335                twitTime = self.twitTime = wx.StaticText(self,-1,"---") 
    307336                 
    308337                messageSizer3 = wx.BoxSizer(wx.HORIZONTAL) 
    309                 messageSizer3.Add(userName,0) 
    310                 messageSizer3.Add(twitTime,0) 
     338                messageSizer3.Add(userName,1,wx.EXPAND) 
     339                messageSizer3.Add(twitTime,1,wx.EXPAND) 
    311340 
    312341                messageSizer2 = wx.BoxSizer(wx.VERTICAL) 
     
    341370                self.timer2 = wx.Timer(self,self.TIMER_ID2) 
    342371                wx.EVT_TIMER(self,self.TIMER_ID2,self.OnReplyUpdate) 
    343                 self.timer2.Start(90000) 
     372                self.timer2.Start(300000) 
    344373                 
    345374                self.timer3 = wx.Timer(self,self.TIMER_ID3) 
    346375                wx.EVT_TIMER(self,self.TIMER_ID3,self.OnDMUpdate) 
    347                 self.timer3.Start(90000) 
     376                self.timer3.Start(600000) 
    348377                self.RefleshTw() 
    349378                self.SetNowTime2StatusBar() 
     
    353382                # コンボボックスの中身を空にする 
    354383                combo = self.text  
    355                 #name = XRCCTRL(self,'ID_NAME') 
    356384                self.tw.put(combo.GetValue())    
    357385                combo.SetValue("") 
     
    361389        def RefleshTw(self): 
    362390                self.recentPage.Reflesh()        
    363                 #self.replyPage.Reflesh() 
    364                 #self.directPage.Reflesh() 
    365391         
    366392        def OnUpdate(self, event): 
     
    416442                if self.imageList.has_key(unicodeUrl): 
    417443 
    418                         self.userIcon.SetBitmap(self.imageList[unicodeUrl].ConvertToBitmap()) 
     444                        #self.userIcon.SetBitmap(self.imageList[unicodeUrl].ConvertToBitmap()) 
    419445                        pass 
    420446                else: 
  • lang/python/crochet/twitter3.py

    r17088 r17940  
    163163                In: なし(クラスメンバ変数でuser,pass) 
    164164        """ 
    165         """def signIn(self): 
     165        def singIn(self,s): 
    166166                import cookielib 
     167                #opener.open("http://twitter.com/sessions","username=&s&password%s" % (self.user['user'],self.user["pass"])) 
     168                postdata = {} 
     169                postdata['session[username_or_email]'] = self.user['user'] 
     170                postdata['session[password]'] = self.user['pass'] 
     171                #postdata['source'] = s 
     172                en_post_data = urllib.urlencode(postdata) 
     173 
    167174                cj = cookielib.CookieJar() 
    168175                opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
     176 
     177                # ログイン/cookie取得 
     178                r = opener.open("http://twitter.com/sessions",en_post_data) 
     179                print r.read() 
    169180                return opener 
    170         def putHtml(self,s): 
    171                 import cookielib 
    172                  
    173                 #cookie管理オブジェクト作る 
    174                 try: 
    175                         opener = signIn() 
    176  
    177                 except: 
    178                         pass 
    179  
    180                 opener.open("http://twitter.com/sessions","username=&s&password%s" % (self.user['user'],self.user["pass"])) 
    181                 postdata = {} 
    182                 postdata['status'] = s.encode('utf-8') 
    183                 #postdata['source'] = s 
    184                 param = urllib.urlencode(postdata) 
    185                 data = urllib2.urlopen("http://"+self.url+"/statuses/update",param) 
    186                 print data.read()""" 
    187         def getUserPageWithScraping(self,user,num): 
    188                 self.setAuthHandler() 
    189                 s = "http://"+self.url+"/"+user+"?page="+str(num) 
    190                 print "url+" +s 
    191                 data = urllib2.urlopen(s) 
    192                 urlstring = data.read() 
     181        def getWithScraping(self,user,num=1): 
     182 
     183                opener = self.singIn("") 
     184                #ログイン必要? 
     185                s = "http://"+self.url+"/home?page="+str(num) 
     186                print "url+" +s 
     187                data = opener.open(s) 
     188                urlstring = data.read() 
     189                print urlstring 
    193190                if num == 1: 
    194191                        return self.scrapeTwit(urlstring,True) 
    195192                else: 
    196193                        return self.scrapeTwit(urlstring,False) 
     194         
     195        def getUserPageWithScraping(self,user,num): 
     196 
     197                self.setAuthHandler() 
     198                s = "http://"+self.url+"/"+user+"?page="+str(num) 
     199                print "url+" +s 
     200                data = urllib2.urlopen(s) 
     201                urlstring = data.read() 
     202                if num == 1: 
     203                        return self.scrapeTwitUserPage(urlstring,True) 
     204                else: 
     205                        return self.scrapeTwitUserPage(urlstring,False) 
    197206                 
    198207        # HTMLをスクレイプします。 
    199         def scrapeTwit(self,a,isFirst): 
     208        def scrapeTwitUserPage(self,a,isFirst): 
    200209                import re 
    201210                # <span class="entry-title entry-content">~</span>(最短) 
     
    215224 
    216225                return retList 
     226 
     227 
     228        def scrapeTwit(self,str,flag): 
     229                import re 
     230                regTwit = re.compile("<tr class=\"hentry hentry_hover\"([\w\W]*?)</tr>",re.MULTILINE) 
     231                regImage = re.compile("<img [\w\W]*? src=\"([\w\W]*?)\"",re.MULTILINE) 
     232                regUserAndMessage = re.compile("<td class=\"content\">([\w\W]*?)</td>") 
     233                regUser = re.compile("<a href=.*?>(.*?)</a>") 
     234                regMessage = re.compile("<span class=\"entry-content\">([\w\W]*?)</span>") 
     235                regTime = re.compile("<abbr class=\"[\w\W]*?\" title=\"([\w\W]*?)\">") 
     236                str = str.replace("\t","") 
     237                str = str.replace("\n","") 
     238                a = regTwit.findall(str) 
     239                #print a 
     240                resultList = [] 
     241                for aa in a: 
     242                        resultData = {} 
     243 
     244                        b = regImage.search(aa) 
     245                        resultData['image'] = b.group(1) 
     246                        c = regUserAndMessage.search(aa).group(1) 
     247                        d1 = regUser.search(c) 
     248                        d2 = regMessage.search(c)        
     249                        resultData['user'] = unicode(d1.group(1),'utf-8') 
     250                        resultData['message'] = unicode(d2.group(1),'utf-8') 
     251                        tm = regTime.search(aa) 
     252                        resultData['time'] = tm.group(1) 
     253                        result = [] 
     254                        result.append(resultData['user']) 
     255                        result.append(resultData['message']) 
     256                        result.append(resultData['time']) 
     257                        result.append(resultData['image']) 
     258                        resultList.append(result) 
     259 
     260                return resultList