Exemples de clients de services Web Python

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 4 minutes de lecture
  • Exemples illustrant une intégration avec un client de services Web Python.

    Besoins

    Les exemples suivants nécessitent l’installation des modules Python suivants :

    insérer

    Voici un exemple d’insertion d’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 (en anglais)

    Voici un exemple d’exécution de getKeys sur l’instance de démonstration à l’aide de l’authentification de base.
    #!/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

    Dans cet exemple, nous obtenons un incident, en interrogeant la catégorie == « Réseau » (avec authentification de base).
    #!/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 item

    get

    Dans cet exemple, nous obtenons un enregistrement d’incident par sys_id (avec authentification de base).
    #!/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 each

    Avancé

    Il s’agit d’un exemple de script Python avancé qui lit un fichier journal pour un mot clé SPI non valide et crée un enregistrement de file d’attente ECC où la charge utile est définie sur une alerte au format XML.
    #!/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 ] )