#python #csv #servicenow
#python #csv #servicenow
Вопрос:
В настоящее время у меня есть
import requests
import json
import csv
# Set the request parameters
url= 'dev.service-now.com/change_request_list.do?CSVamp;'
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, однако в них отсутствуют определенные поля. Мне нужен столбец «Открыто» и «Закрыто», и я не уверен, как запросить это с помощью имеющегося у меня кода.
Любая помощь была бы идеальной! Я действительно новичок в использовании запросов.
Ответ №1:
Вот решение, использующее 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)
Ответ №2:
На первый взгляд ваш код выглядит корректно. Я думаю, вам просто нужно обновить URL веб-службы, который вы используете для предоставления sysparm_default_export_fields=all
параметра. Т.Е.: dev.service-now.com/change_request_list.do?CSVamp;sysparm_default_export_fields=all
После этого вы должны получить ответ, содержащий каждое поле, включая созданные системой поля, такие как sys_id и created_on. В качестве альтернативы вы могли бы создать новое представление в ServiceNow и указать sysparm_view=viewName
параметр в своем URL.