Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import datetime
- import requests
- import sqlite3
- import json
- import sys
- class RedditToken(object):
- '''
- About it: https://github.com/reddit/reddit/wiki/OAuth2-Quick-Start-Example
- Version: 0.1
- '''
- def __init__(self, personal_use_script, secret, username, password,
- user_agent, db):
- self.personal_use_script = personal_use_script
- self.secret = secret
- self.username = username
- self.password = password
- self.user_agent = user_agent
- self.db = db
- self.db = sqlite3.connect(self.db)
- self.conn = self.db.cursor()
- def request_new(self):
- self.auth = requests.auth.HTTPBasicAuth(self.personal_use_script,
- self.secret)
- self.data = {'grant_type': 'password', 'username': self.username,
- 'password': self.password}
- self.headers = {'User-Agent': self.user_agent}
- self.req = requests.post('https://ssl.reddit.com/api/v1/access_token',
- auth=self.auth, data=self.data,
- headers=self.headers)
- if self.req.status_code == requests.codes.ok:
- self.j = json.loads(self.req.text)
- return self.j
- else:
- print('ERROR {0}'.format(r.status_code))
- sys.exit(1)
- def save_new_token(self):
- self.conn.execute('CREATE TABLE IF NOT EXISTS token\
- (access_token TEXT, expires_at TEXT)')
- self.conn.execute('DELETE FROM token')
- self.infos = self.request_new()
- self.infos['expires_at'] = datetime.datetime.now() + datetime.timedelta(seconds=self.infos['expires_in'])
- self.row = (self.infos['access_token'], self.infos['expires_at'])
- self.conn.execute('INSERT INTO token VALUES (?, ?)', self.row)
- self.db.commit()
- return self.row[0]
- def get(self):
- try:
- self.token = self.conn.execute('SELECT * FROM token')
- except sqlite3.OperationalError:
- return self.save_new_token()
- self.token_infos = self.token.fetchone()
- self.token = self.token_infos[0]
- self.last_datetime = self.token_infos[1]
- if datetime.datetime.now() > \
- datetime.datetime.strptime(self.last_datetime[:19],
- "%Y-%m-%d %H:%M:%S"):
- return self.save_new_token()
- else:
- return self.token
- if __name__ == '__main__':
- personal_use_script = ''
- secret = ''
- username = ''
- password = ''
- user_agent = ''
- db = 'tokenreddit.db'
- token = RedditToken(personal_use_script, secret, username, password,
- user_agent, db)
- print(token.get()) # always returns a valid token.
Add Comment
Please, Sign In to add comment