root/lang/python/todotter/twitter3.py @ 11068

Revision 11068, 4.7 kB (checked in by showyou, 5 years ago)

todotterのファイルインポート

Line 
1# -*- coding: utf-8 -*-
2import urllib2,urllib,json
3
4class Twitter:
5        def __init__(self, userdata):
6                self.user = userdata
7               
8        def setUser(self,userdata):
9                self.user = userdata
10               
11        def setAuthHandler(self):
12                #ユーザ名等設定する
13                #初回時のみで充分かなぁ
14                auth_handler = urllib2.HTTPBasicAuthHandler()
15                auth_handler.add_password('Twitter API','twitter.com',self.user['user'],self.user['pass'])
16                opener = urllib2.build_opener(auth_handler)
17                urllib2.install_opener(opener)
18                return opener
19               
20        def get(self,username):
21                self.setAuthHandler()
22                data = urllib2.urlopen("http://twitter.com/statuses/friends_timeline.json")
23                urlstring = data.read()
24                a = json.read(urlstring)
25                return self.parseTwitJSON(a)
26               
27        def getPublicTimeline(self):
28                data = urllib2.urlopen("http://twitter.com/statuses/public_timeline.json")
29                urlstring = data.read()
30                a = json.read(urlstring)
31                return self.parseTwitJSON(a)
32               
33        def getReplies(self,username):
34                self.setAuthHandler()
35                data = urllib2.urlopen("http://twitter.com/statuses/replies.json")
36                urlstring = data.read()
37                a = json.read(urlstring)
38                return self.parseTwitJSON(a)
39       
40        def getDM(self,username):
41                self.setAuthHandler()
42                s = "http://twitter.com/direct_messages.json"
43                print "url+" +s
44                data = urllib2.urlopen(s)
45                urlstring = data.read()
46                a = json.read(urlstring)
47                print a
48                return self.parseTwitJSONDM(a)
49               
50        def getWithPage(self,username,num):
51                # page番号つきget
52                self.setAuthHandler()
53                s = "http://twitter.com/statuses/friends_timeline.json?page="+str(num)
54                print "url+" +s
55                data = urllib2.urlopen(s)
56                urlstring = data.read()
57                a = json.read(urlstring)
58                return self.parseTwitJSON(a)
59               
60        def getWithUser(self,user):
61                # page番号つきget
62                self.setAuthHandler()
63                s = "http://twitter.com/statuses/user_timeline/"+user+".json"
64                print "url+" +s
65                data = urllib2.urlopen(s)
66                urlstring = data.read()
67                a = json.read(urlstring)
68                return self.parseTwitJSON(a)
69       
70        def getWithUserPage(self,username,num):
71                # page番号つきget
72                self.setAuthHandler()
73                s = "http://twitter.com/statuses/user_timeline/"+username+".json?page="+str(num)
74                print "url+" +s
75                data = urllib2.urlopen(s)
76                urlstring = data.read()
77                a = json.read(urlstring)
78                return self.parseTwitJSON(a)
79
80        def getFollowersLite(self,username):
81                # followerを取得   
82               
83                self.setAuthHandler()
84                # ここ変える
85                s = "http://twitter.com/statuses/followers.json?lite=true"
86                print "url+" +s
87                data = urllib2.urlopen(s)
88                urlstring = data.read()
89                a = json.read(urlstring)
90                return self.parseTwitJSONFollowers(a)
91        def parseTwitJSON(self,a):
92                result = []
93                for x in a:
94                        resultSub = []
95                        #resultSub.append(x['created_at'])
96                        y = x['user']
97                        resultSub.append(y['screen_name'])
98                        resultSub.append(x['text'])
99                        resultSub.append(x['created_at'])
100                        result.append(resultSub)
101                        #print resultSub[0]+resultSub[1]
102                return result
103       
104        def parseTwitJSONDM(self,a):
105                result = []
106                for x in a:
107                        resultSub = []
108                        #resultSub.append(x['created_at'])
109                        y = x['sender']
110                        resultSub.append(y['screen_name'])
111                        resultSub.append(x['text'])
112                        resultSub.append(x['created_at'])
113                        result.append(resultSub)
114                        #print resultSub[0]+resultSub[1]
115                return result   
116       
117        def parseTwitJSONFollowers(self,a):
118                result = []
119                for x in a:
120                        resultSub = []
121                        #resultSub.append(x['created_at'])
122                        #y = x['sender']
123                        resultSub.append(x['screen_name'])
124                        #resultSub.append(x['text'])
125                        #resultSub.append(x['created_at'])
126                        result.append(resultSub)
127                        #print resultSub[0]+resultSub[1]
128                return result           
129       
130        def put(self,s):
131                self.setAuthHandler()
132                postdata = {}
133                postdata['status'] = s.encode('utf-8')
134                #postdata['source'] = s
135                param = urllib.urlencode(postdata)
136                data = urllib2.urlopen("http://twitter.com/statuses/update.json",param)
137                print data.read()
138
139        def getUserPageWithScraping(self,user,num):
140                self.setAuthHandler()
141                s = "http://twitter.com/"+user+"?page="+str(num)
142                print "url+" +s
143                data = urllib2.urlopen(s)
144                urlstring = data.read()
145                if num == 1:
146                        return self.scrapeTwit(urlstring,True)
147                else:
148                        return self.scrapeTwit(urlstring,False)
149               
150        # HTMLをスクレイプします。
151        def scrapeTwit(self,a,isFirst):
152                import re
153                # <span class="entry-title entry-content">~</span>(最短)
154                #reg = re.compile(r'<(.*?)>')
155                retList = []
156               
157                reg = re.compile("<span class=\"entry-title entry-content\">([\w\W]*?)</span>[\w\W]*?<abbr class=\"published\" title=\"([\w\W]*?)\">.*?</abbr>",re.MULTILINE)
158                reg2 = re.compile("<span class=\"entry_content\">([\w\W]*?)</span>[\w\W]*?<abbr class=\"published\" title=\"([\w\W]*?)\">.*?</abbr>",re.MULTILINE)
159                # もし1ページ目なら、最新の発言も取ってくる
160                #if isFirst :
161                #       a3 = reg.findall(a)
162                #       retList.append( a3[0] )
163
164                a2 = reg2.findall(a)
165                for aa in a2:
166                        retList.append( (aa[0].strip(),aa[1]) )
167
168                return retList
Note: See TracBrowser for help on using the browser.