123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- # pylint: disable=invalid-name
- # pylint: disable=too-many-instance-attributes
- '''
- tumblr.py contains methods for authenticating
- the user via tumblr OAuth as well as methods
- for getting data from Tumblr API.
- '''
- import requests
- import simplejson as json
- import time
- import re
- from bs4 import BeautifulSoup
- import urlparse
- import oauth2
- request_token_url = 'http://www.tumblr.com/oauth/request_token'
- authorize_url = 'http://www.tumblr.com/oauth/authorize'
- access_token_url = 'http://www.tumblr.com/oauth/access_token'
- user_uri = "http://api.tumblr.com/v2/user/info"
- blog_uri = "http://api.tumblr.com/v2/blog/"
- class TumblrOauthClient(object):
- '''
- Class responsible for authenticating the user
- via Tumblr OAuth2.
- '''
- token = None
- oauth_verifier = None
- oauth_token = None
- oauth_token_secret = None
- is_authorized = False
- access_token = None
- def __init__(self, consumer_key, consumer_secret):
- self.consumer_key = consumer_key
- self.consumer_secret = consumer_secret
- self.consumer = oauth2.Consumer(consumer_key, consumer_secret)
- def authorize_url(self):
- '''
- Redirects user to authorize use.
- '''
- client = oauth2.Client(self.consumer)
- resp, content = client.request(request_token_url, "GET")
- #parse content
- if not self.oauth_token:
- request_token = dict(urlparse.parse_qsl(content))
- self.oauth_token = request_token['oauth_token']
- self.oauth_token_secret = request_token['oauth_token_secret']
- link = authorize_url + "?oauth_token=" + self.oauth_token + \
- "&redirect_uri=http://127.0.0.1:8000/hackathon/"
- return link
- def access_token_url(self, oauth_verifier=''):
- '''
- Returns an access token to the user.
- '''
- self.is_authorized = True
- token = oauth2.Token(self.oauth_token, self.oauth_token_secret)
- self.oauth_verifier = oauth_verifier
- print self.oauth_verifier
- token.set_verifier(self.oauth_verifier)
- client = oauth2.Client(self.consumer, token)
- resp, content = client.request(access_token_url, "POST")
- self.access_token = dict(urlparse.parse_qsl(content))
- #set verified token
- self.token = oauth2.Token(self.access_token['oauth_token'], self.access_token['oauth_token_secret'])
- def getUserInfo(self):
- ''' Returns users information. '''
- client = oauth2.Client(self.consumer, self.token)
- #print client
- resp, content = client.request(user_uri, "POST")
- if int(resp['status']) != 200:
- raise Exception("Invalid response %s." % resp['status'])
- #return content in json format
- jsonlist = json.loads(content)
- response = jsonlist['response']
- self.username = str(response['user']['name'])
- user_info = response['user']
- total_blogs = len(user_info['blogs'])
- #print user_info
- return user_info, total_blogs
- def getBlogInfo(self, user):
- ''' Returns blogger's blog information '''
- blog_info = blog_uri + user + ".tumblr.com/info?api_key="+self.consumer_key
- req = requests.get(blog_info)
- jsonlist = json.loads(req.content)
- response = jsonlist['response']
- blog = response['blog']
- blog['updated'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(blog['updated']))
- return blog
- def getTaggedInfo(self, tag):
- ''' Return tags related to blog with certain tag. '''
- tagged_uri = "http://api.tumblr.com/v2/tagged?tag=" + tag + "&api_key=" + \
- self.consumer_key + "&limit=20"
- req = requests.get(tagged_uri)
- jsonlist = json.loads(req.content)
- tags = []
- body = jsonlist['response']
- for blog in body:
- for data in blog:
- if data == "tags":
- #print blog[data]
- for i in blog[data]:
- m = re.match("(.*)(s*)s(t*)t(a*)a(r*)r(b*)b(u*)u(c*)c(k*)k(.*)", i.lower())
- if not m:
- tags.append(i)
- return tags
- def getTaggedBlog(self, tag):
- ''' Return the tagged blogs's captions or post.'''
- tagged_uri = "http://api.tumblr.com/v2/tagged?tag=" + tag + "&api_key=" + \
- self.consumer_key + "&limit=20"
- req = requests.get(tagged_uri)
- jsonlist = json.loads(req.content)
- body = jsonlist['response']
- tagtext = []
- for blog in body:
- #print "####"
- for data in blog:
- #post
- if data == "body":
- if blog[data]:
- #print blog[data]
- soup = BeautifulSoup(blog[data])
- text = soup.get_text()
- tagtext.append(text)
- #an image
- if data == "caption":
- if blog[data]:
- #print blog[data]
- soup = BeautifulSoup(blog[data])
- text = soup.get_text()
- tagtext.append(text)
- return tagtext
|