Призывает получить файл.csv из API
Мне нужно получить несколько файлов.csv из SharePoint.
Если я сделаю этот запрос через почтальона
https://mycompany.sharepoint.com/teams/a/g/_api/web/GetFolderByServerRelativeUrl('Data%20Sources\')/Files('sharepoint_test.csv')/$value
С заголовками
Authorization: Bearer eyJ...
Accept: application/json;odata=verbose
Я получаю содержимое "test_sharepoint.csv":
column a,column b,column c
32,523,88
46,34,659
25,767,78
Мне нужно загружать несколько файлов одновременно, и SharePoint, похоже, не предоставляет для этого конечную точку. Таким образом, используя python и grequests, я получаю ответ, но не двоичные данные:
>>> base_url = "https://mycompany.sharepoint.com/teams/a/g/_api/web/GetFolderByServerRelativeUrl('Data%20Sources\')/"
>>> url_1 = "Files('sharepoint_test.csv')/$value"
>>> url_2 = "Files('sharepoint_test_2.csv')/$value"
>>> allurls = [base_url + url_1, base_url + url_2]
>>> headers = {"Authorization": authtoken, "Content-Type": "application/json;odata=verbose", "Accept": "application/json;odata=verbose"}
>>> rs = (grequests.get(u, headers=headers, stream=True) for u in allurls)
>>> s = grequests.map(rs)
>>> s
[<Response [200]>, <Response [200]>]
>>> data = open(s[0], "rb").read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected str, bytes or os.PathLike object, not Response
Как я могу получить двоичные данные через grequests
?
1 ответ
grequests.get
, лайк requests.get
, возвращает Response
объект.
Самый первый пример показывает, как использовать этот объект:
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}
Раздел Binary Response Content говорит:
Вы также можете получить доступ к телу ответа в виде байтов для нетекстовых запросов:
>>> r.content
b'[{"repository":{"open_issues":0,"url":"https://github.com/...
Итак, что вы ищете:
>>> data = open(s[0].content, "rb").read()
Хотя я не уверен, что хорошего вы ожидаете от этого (действительно ли содержимое ответа HTTP будет путем к файлу в вашем текущем рабочем каталоге или локальной файловой системе, закодированном в кодировке вашей файловой системы по умолчанию?), Это то, что вы попросил о.
Также стоит отметить, что первое, что говорит документация для GRequests, на которую вы ссылаетесь:
Примечание: вы, вероятно, должны использовать вместо этого запросы-потоки или запросы-фьючерсы.
В настоящее время GRequests практически не поддерживается, и, вероятно, будет порвать с Requests 3.0, в то время как более новые альтернативы являются одними из основных движущих сил в редизайне 3.0.