【问题标题】:Fetching URL from a redirected target using Python使用 Python 从重定向的目标中获取 URL
【发布时间】:2020-07-27 03:50:35
【问题描述】:

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

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

Spotify APISpotipy 库 的工作原理是,首先需要一个授权令牌才能在 Spotify 端执行任何操作。这就是为什么,每当机器人最初在我的 VPS 上运行时,它都会提示我从控制台复制一个 URL,在浏览器上找到它以等待其重定向,然后将包含所需令牌的重定向 URL 粘贴到控制台上。这就是身份验证对象检索令牌数据的方式。

为了自动化这个过程,我通过 Flask 或 Django 看到了几种解决方案。

Django 实现对我很有用,因为我还在同一个 VPS 上激活了 Django 环境,除了 Django 环境在 Python 2.7 上运行,而我的 Twitch 聊天机器人在单独的 Python 3.6 环境上运行。因此,我想将它们分开,除非没有办法在不通过 Django、Flask 或任何其他网络框架监听重定向的情况下实现这种自动化。不幸的是,我的机器人只能在 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 才几个星期,即使做了一些研究,我也无法找到解决这个问题的方法我需要的一种方式。我不确定是否有可能以这种方式实现它。所以,如果这是不可能的,请原谅我缺乏知识。

【问题讨论】:

    标签: python authentication automation spotipy


    【解决方案1】:

    我自己找到了解决方案。

    看来requests 很适合这个例子。

    现在遵循 sn-p 效果很好。

    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"])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2011-06-21
      • 2013-02-24
      • 2016-06-06
      相关资源
      最近更新 更多