Python web services client examples
Summarize
Summarized using AI
This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.
Summary of Python web services client examples
This documentation provides practical examples for ServiceNow customers on how to integrate with ServiceNow using a Python web services client. It focuses on using the SOAPpy Python module to interact with ServiceNow SOAP APIs for managing incidents and ECC queue records. The examples demonstrate essential operations such as inserting incidents, retrieving incidents by criteria or sysid, and an advanced use case that monitors log files and creates ECC queue records based on log content.
Show less
Key Features
- Requirements: Python modules
fpconst,PyXML, andSOAPpymust be installed to run the examples. - Inserting an Incident: Shows how to create an incident record by calling the
insertmethod with parameters like impact, urgency, priority, category, location, caller ID, assignment group, assigned to, short description, and comments. - Retrieving Incident Keys: Demonstrates using the
getKeysmethod to query incidents by category and retrieve sysids. - Retrieving Incident Records: Illustrates how to get full incident records filtered by a category using the
getRecordsmethod. - Retrieving an Incident by sysid: Shows how to fetch a specific incident record by its unique sysid using the
getmethod. - Advanced ECC Queue Integration: Provides an example Python script that monitors a log file for specific keywords (e.g., "invalid spi"), tracks its position between runs, and creates ECC queue records with XML payloads for each matched log line. This example includes error handling for log file access and uses detailed SOAP calls to insert ECC queue entries.
Practical Application for ServiceNow Customers
- These examples enable customers to automate incident management tasks by integrating Python scripts with ServiceNow’s SOAP web services.
- By following the examples, customers can create, query, and retrieve incident records programmatically, improving efficiency and integration with external systems.
- The advanced example helps customers implement automated monitoring and alerting workflows by sending critical log events into ServiceNow’s ECC queue for further processing and orchestration.
- Users must update the instance name, username, and password in each script to match their ServiceNow environment and ensure secure HTTPS endpoints are used as recommended.
Overall, these Python client examples empower ServiceNow customers to extend platform capabilities through script-based automation and integration leveraging SOAP APIs.
Examples demonstrating an integration with a Python web services client.
Requirements
The following examples require the installation of the following Python modules:
insert
This is an example of inserting an
incident.
#!/usr/bin/python
from SOAPpy import SOAPProxy
import sys
def createincident (params_dict ):
# instance to send to
instance = 'demo'
# username/password
username = 'itil'
password = 'itil'
# proxy - NOTE: ALWAYS use https://INSTANCE.service-now.com, not https://www.service-now.com/INSTANCE for web services URL from now on!
proxy = 'https://%s:%s@%s.service-now.com/incident.do?SOAP' % (username , password , instance )
namespace = 'http://www.service-now.com/'
server = SOAPProxy (proxy , namespace )
# uncomment these for LOTS of debugging output #server.config.dumpHeadersIn = 1 #server.config.dumpHeadersOut = 1 #server.config.dumpSOAPOut = 1 #server.config.dumpSOAPIn = 1
response = server. insert (impact = int (params_dict [ 'impact' ] ) , urgency = int (params_dict [ 'urgency' ] ) , priority = int (params_dict [ 'priority' ] ) , category =params_dict [ 'category' ] , location =params_dict [ 'location' ] , caller_id =params_dict [ 'user' ] , assignment_group =params_dict [ 'assignment_group' ] , assigned_to =params_dict [ 'assigned_to' ] , short_description =params_dict [ 'short_description' ] , comments =params_dict [ 'comments' ] )
return response
values = { 'impact': '1' , 'urgency': '1' , 'priority': '1' , 'category': 'High' , 'location': 'San Diego' , 'user': 'fred.luddy@yourcompany.com' , 'assignment_group': 'Technical Support' , 'assigned_to': 'David Loo' , 'short_description': 'An incident created using python, SOAPpy, and web services.' , 'comments': 'This a test making an incident with python.\n Isn \' t life wonderful?' }
new_incident_sysid =createincident (values )
print "Returned sysid: "+ repr (new_incident_sysid )getKeys
This is an example of executing getKeys on the demo instance using basic
authentication.
#!/bin/env python
# use the SOAPpy module from SOAPpy import SOAPProxy
username , password , instance = 'admin' , 'admin' , 'demo'
proxy , namespace = 'https://username:password@www.service-now.com/'+instance+ '/incident.do?SOAP' , 'http://www.service-now.com/'
server = SOAPProxy (proxy ,namespace )
response = server. getKeys (category = 'Network' )
print response. sys_id. split ( ',' )getRecords
In this example, we get an incident, querying for category == "Network" (with basic
authentication).
#!/bin/env python
# use the SOAPpy module from SOAPpy import SOAPProxy
username , password , instance = 'admin' , 'admin' , 'demo'
proxy , namespace = 'https://username:password@www.service-now.com/'+instance+ '/incident.do?SOAP' , 'http://www.service-now.com/'
server = SOAPProxy (proxy ,namespace )
response = server. getRecords (category = 'Network' )
for record in response:
for item in record:
print itemget
In this example, we get an incident record by
sys_id (with basic
authentication).#!/bin/env python
# use the SOAPpy module from SOAPpy import SOAPProxy
username , password , instance = 'admin' , 'admin' , 'demo'
proxy , namespace = 'https://username:password@www.service-now.com/'+instance+ '/incident.do?SOAP' , 'http://www.service-now.com/'
server = SOAPProxy (proxy ,namespace )
response = server. get (sys_id = '9c573169c611228700193229fff72400' )
for each in response:
print eachAdvanced
This is an example of advanced Python script that reads a log file for a keyword
invalid spi and creates an ECC Queue record where the payload is set to an
alert of XML
format.
#!/bin/env python
# kevin.pickard@service-now.com 2008.07.03 initial creation
from SOAPpy import SOAPProxy
from xml. dom. minidom import getDOMImplementation
import sys , os , socket , pickle , re
# instance to send to
instance = 'demo'
# username/pass
username = 'admin'
password = 'admin'
# log file to watch
syslogfile = '/var/log/cisco.log.ksp'
# state file
statefile = '/tmp/syslog_ecc.state-test'
# ECC queue values
soapagent = 'SOAPpy'
ecctopic = 'PIX Error: '
eccname = 'Invalid SPI: '
eccsource = 'Syslog'
# regex string to match
matchstring = 'invalid spi'
try:
state = open (statefile , 'r' )
lastbyte = pickle. load (state )
state. close ( ) except:
lastbyte = 0
#print 'DEBUG: lastbyte = '+str(lastbyte)
try:
log = open (syslogfile , 'ro' ) except:
errortopic = 'Script Error'
errorname = 'Unable to open log file '+syslogfile+ '.'
errorpayload = 'This message was generated due to an error condition encountered in a script. The name of the script is '+ os. path. basename ( sys. argv [ 0 ] )+ ' on server '+ socket. gethostname ( )+ '.'
proxy = 'https://'+username+ ':'+password+ '@'+instance+ '.service-now.com/ecc_queue.do?SOAP'
namespace = 'http://www.service-now.com/'
server = SOAPProxy (proxy , namespace )
server. config. dumpSOAPOut = 1
server. config. dumpSOAPIn = 1
response = server. insert (agent =soapagent , topic =errortopic , name =errorname , source = sys. argv [ 0 ] , payload =errorpayload )
sys. exit ( 1 )
if lastbyte != 0:
try:
log. seek (lastbyte ) except IOError:
pass
loglines =log. readlines ( )
lastbyte =log. tell ( )
log. close ( )
state = open (statefile , 'w' ) pickle. dump (lastbyte , state )
state. close ( )
# regex out the line
matchedlines = [ ] for line in loglines:
if re. search (matchstring , line ) != None:
matchedlines. append (line )
#print 'DEBUG: len->loglines = '+str(len(loglines)) #print 'DEBUG: lastbyte = '+str(lastbyte) #print 'DEBUG: matchedlines = '+str(matchedlines)
if len (matchedlines ) == 0:
sys. exit ( 0 )
proxy = 'https://'+username+ ':'+password+ '@'+instance+ '.service-now.com/ecc_queue.do?SOAP'
namespace = 'http://www.service-now.com/'
server = SOAPProxy (proxy , namespace ) #server.config.dumpSOAPOut = 1 #server.config.dumpSOAPIn = 1
entriestosend = { } for line in matchedlines:
device =line. split ( ) [ 3 ]
sourceip =line. split ( ) [- 1 ]
entriestosend [sourceip ] = [device , line ]
for key ,value in entriestosend. iteritems ( ):
#impl=getDOMImplementation() #newdoc = impl.createDocument(None, "log_line", None) #top_element = newdoc.documentElement #text = newdoc.createTextNode(value[1]) #top_element.appendChild(text)
response = server. insert (agent =soapagent , topic =ecctopic+value [ 0 ] , name =eccname+key , source =eccsource , payload =value [ 1 ] )