Извлечение CSV запроса на изменение из ServiceNow с определенными столбцами (полями) в Python

#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.