0

SharePoint から複数の .csv ファイルを取得する必要があります。

Postman経由でこのリクエストを行う場合

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ですか?

4

1 に答える 1

0

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 のドキュメントの最初の内容は次のとおりです。

注:おそらく、代わりに requests -threadsまたはrequests-futuresを使用する必要があります。

GRequests は現在ほとんど維持されておらず、おそらく Requests 3.0 で壊れるでしょうが、新しい代替手段は 3.0 の再設計の背後にある主な要因の 1 つです。

于 2018-04-06T21:20:34.673 に答える