def authenticate():
addon = xbmcaddon.Addon()
access_token = addon.getSetting("TRAKT_ACCESS_TOKEN")
if access_token:
expires = addon.getSetting("TRAKT_EXPIRES_AT")
if time.time() > expires:
return trakt_refresh_token()
return access_token
values = {"client_id": TRAKT_API_KEY}
device_codes = requests.post(
'https://api.trakt.tv/oauth/device/code', data=values).json()
data = {
"code": device_codes["device_code"],
"client_id": TRAKT_API_KEY,
"client_secret": TRAKT_SECRET
}
start = time.time()
expires_in = device_codes["expires_in"]
progress_dialog = xbmcgui.DialogProgress()
progress_dialog.create(
"Authenticate Trakt",
"Please go to https://trakt.tv/activate and enter the code",
str(device_codes["user_code"]))
try:
time_passed = 0
while not xbmc.abortRequested and not progress_dialog.iscanceled(
) and time_passed < expires_in:
try:
response = requests.post(
'https://api.trakt.tv/oauth/device/token',
data=data).json()
except Exception, e:
progress = int(100 * time_passed / expires_in)
progress_dialog.update(progress)
xbmc.sleep(max(device_codes["interval"], 1) * 1000)
else:
response = response
expires_at = time.time() + 60 * 60 * 24 * 30
addon.setSetting("TRAKT_EXPIRES_AT", str(expires_at))
addon.setSetting("TRAKT_ACCESS_TOKEN",
response["access_token"])
addon.setSetting("TRAKT_REFRESH_TOKEN",
response["refresh_token"])
return response["access_token"]
time_passed = time.time() - start
finally:
progress_dialog.close()
del progress_dialog
return None
评论列表
文章目录