Có thể tải lên một tập tin vào Shared Documents thư viện của Microsoft SharePoint trang web với Python OneDrive SDK?Upload để MS SharePoint sử dụng Python onedrive SDK
This documentation nói rằng phải là (trong câu đầu tiên), nhưng tôi không thể làm cho nó hoạt động.
tôi có thể xác thực (với Azure AD) và tải lên một thư mục onedrive, nhưng khi cố gắng để tải lên một SharePoint thư mục, tôi tiếp tục nhận được lỗi này:
"Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."
Các mã tôi đang sử dụng mà trả về một đối tượng với các lỗi:
(...authentication...)
client = onedrivesdk.OneDriveClient('https://{tenant}.sharepoint.com/{site}/_api/v2.0/', auth, http)
client.item(path='/drive/special/documents').children['test.xlsx'].upload('test.xlsx')
.210 tôi thành công có thể tải lên https://{tenant}-my.sharepoint.com/_api/v2.0/
(chú ý "-my" sau khi {tenant}
) với đoạn mã sau:
client = onedrivesdk.OneDriveClient('https://{tenant}-my.sharepoint.com/_api/v2.0/', auth, http)
returned_item = client.item(drive='me', id='root').children['test.xlsx'].upload('test.xlsx')
Làm thế nào tôi có thể tải lên các tập tin cùng một SharePoint trang web?
(Câu trả lời cho câu hỏi tương tự (1, 2, 3, 4) trên Stack Overflow hoặc là quá mơ hồ hoặc đề nghị sử dụng một API khác nhau. Câu hỏi của tôi là nếu nó có thể sử dụng onedrive Python SDK, và nếu như vậy, làm thế nào để làm điều đó)
cập nhật:. đây là mã đầy đủ của tôi và đầu ra. (dữ liệu gốc Sensitive thay thế bằng định dạng tương tự vô nghia.)
import re
import onedrivesdk
from onedrivesdk.helpers.resource_discovery import ResourceDiscoveryRequest
# our domain (not the original)
redirect_uri = 'https://example.ourdomain.net/'
# our client id (not the original)
client_id = "a1234567-1ab2-1234-a123-ab1234abc123"
# our client secret (not the original)
client_secret = 'ABCaDEFGbHcd0e1I2fghJijkL3mn4M5NO67P8Qopq+r='
resource = 'https://api.office.com/discovery/'
auth_server_url = 'https://login.microsoftonline.com/common/oauth2/authorize'
auth_token_url = 'https://login.microsoftonline.com/common/oauth2/token'
http = onedrivesdk.HttpProvider()
auth = onedrivesdk.AuthProvider(http_provider=http, client_id=client_id,
auth_server_url=auth_server_url,
auth_token_url=auth_token_url)
should_authenticate_via_browser = False
try:
# Look for a saved session. If not found, we'll have to
# authenticate by opening the browser.
auth.load_session()
auth.refresh_token()
except FileNotFoundError as e:
should_authenticate_via_browser = True
pass
if should_authenticate_via_browser:
auth_url = auth.get_auth_url(redirect_uri)
code = ''
while not re.match(r'[a-zA-Z0-9_-]+', code):
# Ask for the code
print('Paste this URL into your browser, approve the app\'s access.')
print('Copy the resulting URL and paste it below.')
print(auth_url)
code = input('Paste code here: ')
# Parse code from URL if necessary
if re.match(r'.*?code=([a-zA-Z0-9_-]+).*', code):
code = re.sub(r'.*?code=([a-zA-Z0-9_-]*).*', r'\1', code)
auth.authenticate(code, redirect_uri, client_secret, resource=resource)
# If you have access to more than one service, you'll need to decide
# which ServiceInfo to use instead of just using the first one, as below.
service_info = ResourceDiscoveryRequest().get_service_info(auth.access_token)[0]
auth.redeem_refresh_token(service_info.service_resource_id)
auth.save_session() # Save session into a local file.
# Doesn't work
client = onedrivesdk.OneDriveClient(
'https://{tenant}.sharepoint.com/sites/{site}/_api/v2.0/', auth, http)
returned_item = client.item(path='/drive/special/documents')
.children['test.xlsx']
.upload('test.xlsx')
print(returned_item._prop_dict['error_description'])
# Works, uploads to OneDrive instead of SharePoint site
client2 = onedrivesdk.OneDriveClient(
'https://{tenant}-my.sharepoint.com/_api/v2.0/', auth, http)
returned_item2 = client2.item(drive='me', id='root')
.children['test.xlsx']
.upload('test.xlsx')
print(returned_item2.web_url)
Output:
Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown.
https://{tenant}-my.sharepoint.com/personal/user_domain_net/_layouts/15/WopiFrame.aspx?sourcedoc=%1ABCDE2345-67F8-9012-3G45-6H78IJKL9M01%2N&file=test.xlsx&action=default
Bạn có thể cung cấp truy xuất đầy đủ không? Hoặc chỉ định dòng nào là nguồn của lỗi dòng bắt đầu bằng 'client' hoặc' return_item'? – sytech
Ngoài ra, bạn có [đặt AuthScope thích hợp] (https://github.com/OneDrive/onedrive-api-docs/blob/master/site-images/AuthScopesForSharePoint.png?raw=true) cho SharePoint Online không? Điều này tách biệt với quyền OneDrive của bạn. – sytech
@Gator_Python - Tôi đã thêm mã đầy đủ. Không có lỗi nào bị ném, nhưng đối tượng trả về chứa các thuộc tính của tệp được tải lên trong trường hợp thành công và thông báo lỗi này trong trường hợp không thành công. AuthScope được thiết lập như vậy (trên thực tế, tất cả các quyền đều được đánh dấu). –