如何使用github-flask为{+ path}提供URL参数?

时间:2015-07-12 00:26:54

标签: python api github flask kwargs

首先,我是Python的总n00b。我显然是使用github-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()得到了一个意外的关键字参数'path'”使用:

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

我很确定我错过了一些简单的东西。我不必诉诸字符串操作吗?

1 个答案:

答案 0 :(得分:4)

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

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

from uritemplate import expand

# ...

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