/ChineBlog/social/google/__init__.py

https://bitbucket.org/young0512/chineblog · Python · 90 lines · 70 code · 18 blank · 2 comment · 7 complexity · 3569a3ea16f850e4268445dd5b1fdc87 MD5 · raw file

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. import urllib2, json, urllib, time
  4. from django.conf import settings
  5. def get_access_token(code):
  6. auth_url = settings.GOOGLE_ACCESS_TOKEN_ENDPOINT
  7. body = urllib.urlencode({
  8. 'code': code,
  9. 'client_id': settings.GOOGLE_API['client_id'],
  10. 'client_secret': settings.GOOGLE_API['client_secret'],
  11. 'redirect_uri': settings.GOOGLE_API['redirect_urls'],
  12. 'grant_type': 'authorization_code'
  13. })
  14. headers = {
  15. 'Content-Type': 'application/x-www-form-urlencoded',
  16. }
  17. req = urllib2.Request(auth_url, body, headers)
  18. resp = urllib2.urlopen(req)
  19. data = json.loads(resp.read())
  20. return data['access_token']
  21. def get_user_info(access_token):
  22. if access_token:
  23. userinfo_url = settings.GOOGLE_USERINFO_ENDPOINT
  24. query_string = urllib.urlencode({'access_token': access_token})
  25. resp = urllib2.urlopen("%s?%s" % (userinfo_url, query_string))
  26. data = json.loads(resp.read())
  27. return data
  28. def get_blog_user(user_data):
  29. if user_data:
  30. blog_user = {}
  31. blog_user['username'] = user_data['name']
  32. blog_user['email'] = user_data['email']
  33. blog_user['avatar'] = user_data['picture']
  34. return blog_user
  35. def get_short_url(url):
  36. data = json.dumps({
  37. 'longUrl': url,
  38. })
  39. headers = {"Content-Type": "application/json"}
  40. req = urllib2.Request(settings.GOOGLE_URL_SHORTENER_ENDPOINT, data, headers)
  41. resp = urllib2.urlopen(req)
  42. return json.loads(resp.read()).get('id', None)
  43. class GooglePlusClient(object):
  44. def __init__(self, **kwargs):
  45. if 'access_token' in kwargs:
  46. self.access_token = kwargs['access_token']
  47. if 'refresh_token' in kwargs:
  48. self.refresh_token = kwargs['refresh_token']
  49. if 'expires' in kwargs:
  50. self.expires = kwargs['expires']
  51. elif 'expires_in' in kwargs:
  52. self.expires = time.time() + kwargs['expires_in']
  53. def _refresh_token(self):
  54. auth_url = settings.GOOGLE_ACCESS_TOKEN_ENDPOINT
  55. body = urllib.urlencode({
  56. 'client_id': settings.GOOGLE_API['client_id'],
  57. 'client_secret': settings.GOOGLE_API['client_secret'],
  58. 'refresh_token': self.refresh_token,
  59. 'grant_type': 'refresh_token'
  60. })
  61. headers = {
  62. 'Content-Type': 'application/x-www-form-urlencoded',
  63. }
  64. req = urllib2.Request(auth_url, body, headers)
  65. resp = urllib2.urlopen(req)
  66. data = json.loads(resp.read())
  67. self.access_token = data['access_token']
  68. self.expires = time.time() + data['expires_in']
  69. def _get_access_token(self):
  70. if not hasattr(self, 'access_token'):
  71. self._refresh_token()
  72. return self.access_token