使用 Python3 更新 Sharepoint 2013

Posted

技术标签:

【中文标题】使用 Python3 更新 Sharepoint 2013【英文标题】:Update Sharepoint 2013 using Python3 【发布时间】:2018-12-23 09:36:48 【问题描述】:

我目前正在尝试更新 Sharepoint 2013 列表。

这是我用来完成该任务的模块。但是,当我运行 post 任务时,我收到以下错误:

"b'"error":"code":"-1, Microsoft.SharePoint.Client.InvalidClientQueryException","message":"lang":"en-US","value":"Invalid JSON。 JSON 内容中无法识别令牌。"'"

知道我做错了什么吗?

def update_item(sharepoint_user, sharepoint_password, ad_domain, site_url, sharepoint_listname):
login_user = ad_domain + '\\' + sharepoint_user
auth = HttpNtlmAuth(login_user, sharepoint_password)
sharepoint_url = site_url + '/_api/web/'
sharepoint_contextinfo_url = site_url + '/_api/contextinfo'
headers = 
    'accept': 'application/json;odata=verbose',
    'content-type': 'application/json;odata=verbose',
    'odata': 'verbose',
    'X-RequestForceAuthentication': 'true'

r = requests.post(sharepoint_contextinfo_url, auth=auth, headers=headers, verify=False)
form_digest_value = r.json()['d']['GetContextWebInformation']['FormDigestValue']

item_id = 4991  # This id is one of the Ids returned by the code above
api_page = sharepoint_url + "lists/GetByTitle('%s')/items(%d)" % (sharepoint_listname, item_id)
update_headers = 
    "Accept": "application/json; odata=verbose",
    "Content-Type": "application/json; odata=verbose",
    "odata": "verbose",
    "X-RequestForceAuthentication": "true",
    "X-RequestDigest": form_digest_value,
    "IF-MATCH": "*",
    "X-HTTP-Method": "MERGE"



r = requests.post(api_page, '__metadata': 'type': 'SP.Data.TestListItem', 'Title': 'TestUpdated', auth=auth, headers=update_headers, verify=False)
if r.status_code == 204:
    print(str('Updated'))
else:
    print(str(r.status_code))

【问题讨论】:

【参考方案1】:

我将您的代码用于我的场景并解决了问题。

我也遇到了同样的问题。我认为传递更新数据的方式不正确

通过如下方式:

json_data = 
    "__metadata":  "type": "SP.Data.TasksListItem" ,
    "Title": "updated title from Python"

并将json_data 传递给如下请求:

r= requests.post(api_page, json.dumps(json_data), auth=auth, headers=update_headers, verify=False).text    

注意:我使用了SP.Data.TasksListItem,因为它是我的类型。使用http://SharePointurl/_api/web/lists/getbytitle('name')/ListItemEntityTypeFullName查找类型

【讨论】:

以上是关于使用 Python3 更新 Sharepoint 2013的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ADF 中从 SharePoint 下载更新的文件?

使用超链接字段创建或更新 SharePoint ListItem

SharePoint 2013 REST API AJAX 更新工作流任务

无法通过 Microsoft Graph 更新 SharePoint 中的超链接或图片

重新安装/更新 SharePoint Webpart 解决方案

SharePoint 2013 更新面板空闲