Python 请求和 Instagram

Python requests and instagram

我正在玩 instagram api 和请求,试图通过 OAuth。我使用 r = requests.get(...) 并关注 instagram 文档。但是,请求的输出从来都不是我所期望的。我遇到了 2 个有些相似的问题。

1) 如果我发送了错误的参数,我希望返回 JSON 看起来像

{"code": 400, "error_type": "OAuthException", "error_message": "You must include a valid client_id, response_type, and redirect_uri parameters"}

如果我将 r.url 中的字符串粘贴到浏览器中,我会看到什么。然而 r.json() 只是失败并给了我

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

2) 正确的响应应该将我重定向到我的重定向 url,其中还将包含一个代码。同样,将 r.url 粘贴到浏览器中时,这可以正常工作。我已按预期成功重定向。请求似乎没有重定向我,即使明确设置 allow_redirects=False。我只需要阅读 url 中的代码。我怎样才能得到请求给我最终的 url 来提取代码?

编辑:不妨包括一些代码。

def get_code(client_id, redirect_uri, scope="basic"):
    params = {"client_id": client_id,
              "redirect_uri": redirect_uri,
              "response_type": "code",
              "scope": scope}
    r = requests.get('https://api.instagram.com/oauth/authorize/',
                     params=params)
    # print r.url
    # print r.json()
    return r

它会在 documentation 中告诉您到底发生了什么,此时,我们向用户展示一个登录屏幕,然后是一个确认屏幕,在该屏幕上授予您的应用访问她的 Instagram 的权限data,如果您 运行 下面的代码片段,您将在浏览器中看到一个登录框:

import requests
import  webbrowser
from tempfile import NamedTemporaryFile
params = {"client_id": client_id,
          "redirect_uri": redirect_uri,
          "response_type": "code",
          "scope": scope}
with NamedTemporaryFile(dir=".", delete=0) as f:
    r = requests.get('https://api.instagram.com/oauth/authorize/',
                     params=params)
    f.write(r.content)
    webbrowser.open(f.name)