问题描述
我现在有
import requests
import json
import csv
# Set the request parameters
url= 'dev.service-Now.com/change_request_list.do?CSV&'
user = 'myuser'
pwd = 'mypass'
# Set proper headers (Unsure if this is needed)
headers = {"Accept":"application/json"}
# Do the HTTP request
response = requests.get(url,auth=(user,pwd),headers=headers )
response.raise_for_status()
with open('out.csv','w') as f:
writer = csv.writer(f)
for line in response.iter_lines():
writer.writerow(line.decode('utf-8').split(','))
这从ServiceNow获取我想要的数据,但是缺少某些字段。我需要“已打开”和“已关闭”列,并且不确定如何使用我的代码进行查询。
任何帮助都是完美的!我真的对使用请求很陌生。
解决方法
乍一看,您的代码看起来正确。我认为您只需要更新用于提供List
参数的Web服务URL。 IE:
sysparm_default_export_fields=all
在那之后,您应该得到一个包含每个字段的响应,包括系统创建的字段,例如sys_id和created_on。另外,您可以在ServiceNow中创建一个新视图,并在URL中提供dev.service-now.com/change_request_list.do?CSV&sysparm_default_export_fields=all
参数。
这是使用Rest Table API的解决方案,可让您控制要提取的字段。我还添加了sysparm_query
来限制行。
import requests
import json
import csv
from urllib.parse import urlencode
url = 'https://dev.service-now.com/api/now/table/change_request'
user = 'myuser'
pwd = 'mypass'
fields = ['number','short_description','opened_at','closed_at']
params = {
'sysparm_display_value': 'true','sysparm_exclude_reference_link': 'true','sysparm_limit': '5000','sysparm_fields': ','.join(fields),'sysparm_query': 'sys_created_on>2020-09-15'
}
headers = {"Accept":"application/json"}
response = requests.get(url + '?' + urlencode(params),auth=(user,pwd),headers=headers)
response.raise_for_status()
rows = response.json()['result']
with open('out.csv','w') as f:
writer = csv.writer(f)
writer.writerow(fields)
for row in rows:
outputrow = []
for field in fields:
outputrow.append(row[field])
writer.writerow(outputrow)