# -*- coding: utf-8 -*-
import urllib2,urllib,json
class Twitter:
def __init__(self, userdata):
self.user = userdata
def setUser(self,userdata):
self.user = userdata
def setAuthHandler(self):
#ユーザ名等設定する
#初回時のみで充分かなぁ
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password('Twitter API','twitter.com',self.user['user'],self.user['pass'])
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
return opener
def get(self,username):
self.setAuthHandler()
data = urllib2.urlopen("http://twitter.com/statuses/friends_timeline.json")
urlstring = data.read()
a = json.read(urlstring)
return self.parseTwitJSON(a)
def getPublicTimeline(self):
data = urllib2.urlopen("http://twitter.com/statuses/public_timeline.json")
urlstring = data.read()
a = json.read(urlstring)
return self.parseTwitJSON(a)
def getReplies(self,username):
self.setAuthHandler()
data = urllib2.urlopen("http://twitter.com/statuses/replies.json")
urlstring = data.read()
a = json.read(urlstring)
return self.parseTwitJSON(a)
def getDM(self,username):
self.setAuthHandler()
s = "http://twitter.com/direct_messages.json"
print "url+" +s
data = urllib2.urlopen(s)
urlstring = data.read()
a = json.read(urlstring)
print a
return self.parseTwitJSONDM(a)
def getWithPage(self,username,num):
# page番号つきget
self.setAuthHandler()
s = "http://twitter.com/statuses/friends_timeline.json?page="+str(num)
print "url+" +s
data = urllib2.urlopen(s)
urlstring = data.read()
a = json.read(urlstring)
return self.parseTwitJSON(a)
def getWithUser(self,user):
# page番号つきget
self.setAuthHandler()
s = "http://twitter.com/statuses/user_timeline/"+user+".json"
print "url+" +s
data = urllib2.urlopen(s)
urlstring = data.read()
a = json.read(urlstring)
return self.parseTwitJSON(a)
def getWithUserPage(self,username,num):
# page番号つきget
self.setAuthHandler()
s = "http://twitter.com/statuses/user_timeline/"+username+".json?page="+str(num)
print "url+" +s
data = urllib2.urlopen(s)
urlstring = data.read()
a = json.read(urlstring)
return self.parseTwitJSON(a)
def getFollowersLite(self,username):
# followerを取得
self.setAuthHandler()
# ここ変える
s = "http://twitter.com/statuses/followers.json?lite=true"
print "url+" +s
data = urllib2.urlopen(s)
urlstring = data.read()
a = json.read(urlstring)
return self.parseTwitJSONFollowers(a)
def parseTwitJSON(self,a):
result = []
for x in a:
resultSub = []
#resultSub.append(x['created_at'])
y = x['user']
resultSub.append(y['screen_name'])
resultSub.append(x['text'])
resultSub.append(x['created_at'])
result.append(resultSub)
#print resultSub[0]+resultSub[1]
return result
def parseTwitJSONDM(self,a):
result = []
for x in a:
resultSub = []
#resultSub.append(x['created_at'])
y = x['sender']
resultSub.append(y['screen_name'])
resultSub.append(x['text'])
resultSub.append(x['created_at'])
result.append(resultSub)
#print resultSub[0]+resultSub[1]
return result
def parseTwitJSONFollowers(self,a):
result = []
for x in a:
resultSub = []
#resultSub.append(x['created_at'])
#y = x['sender']
resultSub.append(x['screen_name'])
#resultSub.append(x['text'])
#resultSub.append(x['created_at'])
result.append(resultSub)
#print resultSub[0]+resultSub[1]
return result
def put(self,s):
self.setAuthHandler()
postdata = {}
postdata['status'] = s.encode('utf-8')
#postdata['source'] = s
param = urllib.urlencode(postdata)
data = urllib2.urlopen("http://twitter.com/statuses/update.json",param)
print data.read()
def getUserPageWithScraping(self,user,num):
self.setAuthHandler()
s = "http://twitter.com/"+user+"?page="+str(num)
print "url+" +s
data = urllib2.urlopen(s)
urlstring = data.read()
if num == 1:
return self.scrapeTwit(urlstring,True)
else:
return self.scrapeTwit(urlstring,False)
# HTMLをスクレイプします。
def scrapeTwit(self,a,isFirst):
import re
# ~(最短)
#reg = re.compile(r'<(.*?)>')
retList = []
reg = re.compile("([\w\W]*?)[\w\W]*?.*?",re.MULTILINE)
reg2 = re.compile("([\w\W]*?)[\w\W]*?.*?",re.MULTILINE)
# もし1ページ目なら、最新の発言も取ってくる
#if isFirst :
# a3 = reg.findall(a)
# retList.append( a3[0] )
a2 = reg2.findall(a)
for aa in a2:
retList.append( (aa[0].strip(),aa[1]) )
return retList