首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenMediaVault上使用Python脚本中的OAuth2.0

在OpenMediaVault上使用Python脚本中的OAuth2.0
EN

Stack Overflow用户
提问于 2022-11-28 10:15:43
回答 1查看 21关注 0票数 0

我不确定这是否是正确的形式,我对这件事还很陌生,所以请容忍我.

目前,我正试图在我的家里自动化一些事情。有一件事与Spotify有关。为了做到这一点,我编写了一个python脚本,它在我的笔记本电脑上运行良好,但是当我将它传输到我的NAS (OpenMediaVault6)时,脚本就不能工作了。我想把它放在那里进行任务调度。

我想我知道问题出在哪里,但我不知道如何解决。在python脚本中,我必须从spotify获得一个访问令牌。为此,我需要在浏览器中对自己进行身份验证,但据我所知,这在NAS上是不可能的。

我试图用客户端凭据流来解决这个问题,但是我需要访问我的用户信息。

这是一个简化的代码:

代码语言:javascript
复制
import spotipy


CLIENT_ID = "client_id"
CLIENT_SECRET = "client_secret"
REDIRECT_URI = "http://localhost:8888/callback"
USER_ID = "user_id"
SCOPE = "user-read-private user-read-email"

token = spotipy.util.prompt_for_user_token(USER_ID, SCOPE, CLIENT_ID, CLIENT_SECRET, REDIRECT_URI)

print(token)

有人知道如何在NAS上运行吗?

提前准备好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-29 21:16:26

供将来参考(由@Ximzend驱动的解决方案):

显然是Refresh Token,它与Access Token一起提供,直到从用户那里撤销为止。因此,您可以访问Cache,在那里保存和保存Access Token过期的时间,并生成一个新的Access Token,而不必再次授权。因此,基本上,在普通PC/系统上生成一次Access Token,然后将Cache复制到NAS,这样这个脚本就可以访问它。

就像这样:

代码语言:javascript
复制
import json
import requests
import base64

CLIENT_ID = "client_id"
CLIENT_SECRET = "client_secret"

with open(".cache-<user_id>", 'r') as cach:
    data = cach.read()
cache = json.loads(data)

REFRESH_TOKEN = cache['refresh_token']

def get_new_token():
    authorization = base64.b64encode(bytes(CLIENT_ID + ":" + CLIENT_SECRET, "ISO-8859-1")).decode("ascii")

    endpoint = "https://accounts.spotify.com/api/token"
    headers = {
        "Authorization": f"Basic {authorization}",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    data = {
        "refresh_token": REFRESH_TOKEN,
        "grant_type": "refresh_token"
    }

    response = requests.post(endpoint, headers=headers, data=data)

    return response.json()["access_token"]

ACCESS_TOKEN = get_new_token()

我每天在NAS上运行这段代码,并给自己发送新的Access Token给我的邮件,只是为了检查一下,它是否还在工作,以便我的其他脚本,依赖于令牌,每周运行,仍然可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74599067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档