【问题标题】:How to, provide URL parameters using github-flask for {+path}?如何使用 github-flask 为 {+path} 提供 URL 参数?
【发布时间】:2015-09-30 12:38:07
【问题描述】:

首先,我对 Python 完全不了解。我显然正在使用 github-flask 和 flask 来从 GitHub API 中提取数据。我正在尝试使用 contents_url 并检索文件。来自 GitHub API 的 URL 类似于:

// json
{
    ...
    "contents_url": "https://api.github.com/repos/<org_name>/<repo_name>/contents/{+path}"
    ...
}

...当我尝试将其提供给 github-flask 实例时,我得到一个 TypeError,“TypeError: request() got an unexpected keyword argument 'path'”使用:

# python
contents = github.get(repo['contents_url'], path='.gitignore')

我很确定我错过了一些简单的东西。我不必求助于字符串操作,对吗?

【问题讨论】:

    标签: python api github flask keyword-argument


    【解决方案1】:

    Python 推荐的字符串插值是.format 方法。您的代码只需进行一些小的更改即可使用:

    contents = github.get(repo['contents_url'].format(path='.gitignore'))
    

    但您还必须稍微更改您的contents_url

    https://api.github.com/repos/<org_name>/<repo_name>/contents/{path}
    

    请小心 - .format 基于大括号进行插值,因此任何文字大括号都需要转义。更多信息请点击此处:https://docs.python.org/3/library/string.html#formatstrings


    编辑:正如您在下面的评论中提到的,该 URL 直接来自 GitHub 的 API,您不能/不应该更改它。事实证明他们正在使用RFC 6570 URL 模板(请参阅https://developer.github.com/v3/#hypermedia)。如果您使用我在下面建议的uritemplate 库,代码将如下所示:

    from uritemplate import expand
    
    # ...
    
    contents = github.get(expand(repo['contents_url'], {'path': '.gitignore'}))
    

    【讨论】:

    • 谢谢。我不能 - 也不应该 - 更改 contents_url,因为它是由 GitHub API 作为字符串提供的。我希望能够简单地使用它。
    • 它查看 GitHub API 是否使用RFC 6570 URL 模板(请参阅developer.github.com/v3/#hypermedia)。您将需要使用适当的库。看起来uritemplate 可能是最好的开始。
    • 我还没有机会尝试这个,但听起来不错。我会尽快完成的。
    • 工作就像一个魅力。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2020-11-06
    • 1970-01-01
    相关资源
    最近更新 更多