tumblr.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import requests
  2. import simplejson as json
  3. import time
  4. import urllib
  5. import re
  6. from bs4 import BeautifulSoup
  7. import urlparse
  8. import oauth2
  9. request_token_url = 'http://www.tumblr.com/oauth/request_token'
  10. authorize_url = 'http://www.tumblr.com/oauth/authorize'
  11. access_token_url = 'http://www.tumblr.com/oauth/access_token'
  12. user_uri = "http://api.tumblr.com/v2/user/info"
  13. blog_uri = "http://api.tumblr.com/v2/blog/"
  14. class TumblrOauthClient(object):
  15. token = None
  16. oauth_token_secret = None
  17. oauth_verifier = None
  18. def __init__(self, consumer_key, consumer_secret, oauth_token =''):
  19. self.consumer_key = consumer_key
  20. self.consumer_secret = consumer_secret
  21. self.consumer = oauth2.Consumer(consumer_key, consumer_secret)
  22. self.oauth_token = oauth_token
  23. def get_authorize_url(self):
  24. client = oauth2.Client(self.consumer)
  25. resp, content = client.request(request_token_url, "GET")
  26. #if int(resp['status']) != 200:
  27. # raise Exception("Invalid response %s." % resp['status'])
  28. #parse content
  29. if not self.oauth_token:
  30. request_token = dict(urlparse.parse_qsl(content))
  31. self.oauth_token = request_token['oauth_token'] #'QBXdeeMKAnLzDbIG7dDNewTzRYyQoHZLbcn3bAFTCEFF5EXurl'
  32. self.oauth_token_secret = request_token['oauth_token_secret']#'u10SuRl2nzS8vFK4K7UPQexAvbIFBFrZBjA79XDlgoXFxv9ZhO'
  33. link = authorize_url+"?oauth_token="+self.oauth_token+"&redirect_uri=http%3A%2F%2Flocalhost%3A8000/hackathon/tumblr"
  34. return link
  35. #"""
  36. def get_access_token_url(self, oauth_verifier):
  37. #print "verifier"
  38. self.oauth_verifier = oauth_verifier
  39. token = oauth2.Token(self.oauth_token, self.oauth_token_secret)
  40. token.set_verifier(self.oauth_verifier)
  41. client = oauth2.Client(self.consumer, token)
  42. resp, content = client.request(access_token_url,"POST")
  43. #print resp['status']
  44. access_token = dict(urlparse.parse_qsl(content))
  45. #print access_token
  46. #set verified token
  47. self.token = oauth2.Token(access_token['oauth_token'], access_token['oauth_token_secret'])
  48. def getUserInfo(self):
  49. ''' Returns users information. '''
  50. client = oauth2.Client(self.consumer, self.token)
  51. #print client
  52. resp, content = client.request(user_uri, "POST")
  53. if int(resp['status']) != 200:
  54. raise Exception("Invalid response %s." % resp['status'])
  55. #return content in json format
  56. jsonlist = json.loads(content)
  57. response = jsonlist['response']
  58. user_info = response['user']
  59. #print user_info
  60. return user_info
  61. def getBlogInfo(self, user):
  62. ''' Returns blogger's blog information '''
  63. blog_info = blog_uri + user + ".tumblr.com/info?api_key="+self.consumer_key
  64. req = requests.get(blog_info)
  65. if int(req.status_code) != 200:
  66. raise Exception("Invalid response %s." % resp['status'])
  67. jsonlist = json.loads(req.content)
  68. response = jsonlist['response']
  69. blog = response['blog']
  70. blog['updated'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(blog['updated']))
  71. return blog
  72. def getTaggedInfo(self, tag):
  73. ''' Return tags related to blog with certain tag. '''
  74. tagged_uri = "http://api.tumblr.com/v2/tagged?tag="+tag+"&api_key="+self.consumer_key+"&limit=20"
  75. req = requests.get(tagged_uri)
  76. jsonlist = json.loads(req.content)
  77. tags = []
  78. meta = jsonlist['meta']
  79. body = jsonlist['response']
  80. for blog in body:
  81. for data in blog:
  82. if data == "tags":
  83. #print blog[data]
  84. for i in blog[data]:
  85. m = re.match("(.*)(s*)s(t*)t(a*)a(r*)r(b*)b(u*)u(c*)c(k*)k(.*)", i.lower())
  86. if not m:
  87. tags.append(i)
  88. return tags
  89. def getTaggedBlog(self, tag):
  90. ''' Return the tagged blogs's captions or post.'''
  91. tagged_uri = "http://api.tumblr.com/v2/tagged?tag="+tag+"&api_key="+self.consumer_key+"&limit=20"
  92. req = requests.get(tagged_uri)
  93. jsonlist = json.loads(req.content)
  94. meta = jsonlist['meta']
  95. body = jsonlist['response']
  96. tagtext = []
  97. for blog in body:
  98. #print "####"
  99. for data in blog:
  100. #post
  101. if data == "body":
  102. if blog[data]:
  103. #print blog[data]
  104. soup = BeautifulSoup(blog[data])
  105. text = soup.get_text()
  106. tagtext.append(text)
  107. #an image
  108. if data == "caption":
  109. if blog[data]:
  110. #print blog[data]
  111. soup = BeautifulSoup(blog[data])
  112. text = soup.get_text()
  113. tagtext.append(text)
  114. return tagtext
  115. #"""