使用Python从重定向目标获取URL

2024-09-30 10:40:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个Twitch聊天机器人,使用Spotipy库集成一些Spotify功能

实现的目标是实现机器人的全自动Spotipfy API身份验证

spotifyapiSpotipy库如何工作,首先需要一个授权令牌,以便在Spotify端执行任何操作。因此,每当bot最初在我的VPS上运行时,它都会提示我从控制台复制URL,在浏览器上找到它以等待重定向,并在控制台上粘贴重定向的URL,包括所需的令牌。这就是身份验证对象检索令牌数据的方式

为了使这一过程自动化,我看到了几种通过Flask或Django实现的解决方案

Django实现对我来说很有用,因为我在相同的VPS上也有Django环境处于活动状态,除了Django环境在Python 2.7上运行,而我的Twitch聊天机器人在单独的Python 3.6环境上运行。因此,我希望将它们分开,除非在不监听Django、Flask或任何其他web框架上的重定向的情况下,无法实现这种自动化。不幸的是,我的bot只能在Python 3.6或更高版本上运行

我特别好奇是否有任何内置函数或轻量级库来处理此类操作

我用来获取Spotify Auth令牌的函数是:

def fetchSpotiToken():
global spotiToken, spoti
spotiToken = spotifyAuth.get_cached_token()
if not spotiToken:
    spAuthURL = spotifyAuth.get_authorize_url()
    print(spAuthURL)
    # Prints the URL that Spotify API will redirect to
    authResp = input("Enter URL")
    # Console user is expected to visit the URL and submit the new redirected URL on console
    respCode = spotifyAuth.parse_response_code(authResp)
    spotiToken = spotifyAuth.get_access_token(respCode)
elif spotifyAuth.is_token_expired(spotifyAuth.get_cached_token()):
    spotiToken = spotifyAuth.refresh_access_token(spotiToken["refresh_token"])
spoti = spotipy.Spotify(auth=spotiToken["access_token"])
return [spotiToken, spoti]

PS:我只开发了几周的Python,即使在做了一些研究之后,我也无法找到一种我需要的解决方案。我不确定是否有可能通过这种方式实现。所以,如果这是不可能的,请原谅我缺乏知识


Tags: thedjangotokenurlgetaccess环境机器人
1条回答
网友
1楼 · 发布于 2024-09-30 10:40:47

我自己找到了解决办法

看起来requests与这个例子很匹配

下面的代码片段目前运行良好

def tryFetchSpotiToken():
    global spotiToken, spoti
    try:
        spotiToken = spotifyAuth.get_cached_token()
    except:
        if not spotiToken:
            spAuthURL = spotifyAuth.get_authorize_url()
            htReq = requests.get(spAuthURL)
            htRed = htReq.url
            respCode = spotifyAuth.parse_response_code(htRed)
            spotiToken = spotifyAuth.get_access_token(respCode)
        elif spotifyAuth.is_token_expired(spotifyAuth.get_cached_token()):
            spotiToken = spotifyAuth.refresh_access_token(spotiToken["refresh_token"])
    spoti = spotipy.Spotify(auth=spotiToken["access_token"])

相关问题 更多 >

    热门问题