Guest User

Untitled

a guest
Apr 15th, 2016
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.85 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import datetime
  3. import requests
  4. import sqlite3
  5. import json
  6. import sys
  7.  
  8.  
  9. class RedditToken(object):
  10.     '''
  11.    About it: https://github.com/reddit/reddit/wiki/OAuth2-Quick-Start-Example
  12.    Version: 0.1
  13.    '''
  14.  
  15.     def __init__(self, personal_use_script, secret, username, password,
  16.                  user_agent, db):
  17.         self.personal_use_script = personal_use_script
  18.         self.secret = secret
  19.         self.username = username
  20.         self.password = password
  21.         self.user_agent = user_agent
  22.         self.db = db
  23.  
  24.         self.db = sqlite3.connect(self.db)
  25.         self.conn = self.db.cursor()
  26.  
  27.     def request_new(self):
  28.         self.auth = requests.auth.HTTPBasicAuth(self.personal_use_script,
  29.                                                 self.secret)
  30.         self.data = {'grant_type': 'password', 'username': self.username,
  31.                      'password': self.password}
  32.         self.headers = {'User-Agent': self.user_agent}
  33.         self.req = requests.post('https://ssl.reddit.com/api/v1/access_token',
  34.                                auth=self.auth, data=self.data,
  35.                                headers=self.headers)
  36.         if self.req.status_code == requests.codes.ok:
  37.             self.j = json.loads(self.req.text)
  38.             return self.j
  39.         else:
  40.             print('ERROR {0}'.format(r.status_code))
  41.             sys.exit(1)
  42.  
  43.     def save_new_token(self):
  44.         self.conn.execute('CREATE TABLE IF NOT EXISTS token\
  45.                          (access_token TEXT, expires_at TEXT)')
  46.         self.conn.execute('DELETE FROM token')
  47.         self.infos = self.request_new()
  48.         self.infos['expires_at'] = datetime.datetime.now() + datetime.timedelta(seconds=self.infos['expires_in'])
  49.         self.row = (self.infos['access_token'], self.infos['expires_at'])
  50.         self.conn.execute('INSERT INTO token VALUES (?, ?)', self.row)
  51.         self.db.commit()
  52.         return self.row[0]
  53.  
  54.     def get(self):
  55.         try:
  56.             self.token = self.conn.execute('SELECT * FROM token')
  57.         except sqlite3.OperationalError:
  58.             return self.save_new_token()
  59.         self.token_infos = self.token.fetchone()
  60.         self.token = self.token_infos[0]
  61.         self.last_datetime = self.token_infos[1]
  62.         if datetime.datetime.now() > \
  63.            datetime.datetime.strptime(self.last_datetime[:19],
  64.                                       "%Y-%m-%d %H:%M:%S"):
  65.             return self.save_new_token()
  66.         else:
  67.             return self.token
  68.  
  69.  
  70. if __name__ == '__main__':
  71.  
  72.     personal_use_script = ''
  73.     secret = ''
  74.     username = ''
  75.     password = ''
  76.     user_agent = ''
  77.     db = 'tokenreddit.db'
  78.  
  79.  
  80.     token = RedditToken(personal_use_script, secret, username, password,
  81.                         user_agent, db)
  82.  
  83.     print(token.get())   # always returns a valid token.
Add Comment
Please, Sign In to add comment