Quantcast
Channel: SCN : All Content - RESTful Web Services SDK
Viewing all articles
Browse latest Browse all 262

Scripting Web Intelligence : the RESTful Raylight Web Services with Python (sample)

$
0
0

Well, I followed Ted Ueda's blog posts about the RESTful Raylight Web Services and I translated his Powershell export sample to Python.

 

See the blog post Scripting Web Intelligence:  the RESTful Raylight Web Services for more information.

 

Why Python and not Powershell ?

  • Python is a cross-platform language ; you can use it on linux or unix and not only on windows ;
  • Python's community is larger ;
  • Python is broader ; you can use it for tasks ranging from systems automation, testing, and ETL to gaming, CGI and web development.

 

and of course I use more Python than Powershell

 

The original powershell script export.ps1 is here. This is the Python 3 version :

 

export.py

#.Synopsis
#Exports WebI to PDF.
#.Description
#Logs onto BI Platform, retrieves PDF export of a Web Intelligence document and save to specified file.
#Modify this script to enter the logon credentials, URL to the RESTful Web Services, Language, Document SI_ID and folder path.
#
import urllib.request
import urllib.parse
import json
import os
############################################################################################################################
# Input: logonInfo, hostUrl, locale, documentId and folderPath to suite your preferences
logonInfo = {    'userName'    : 'administrator',     'password'    : 'Password1',     'auth'        : 'secEnterprise' 
}
hostUrl = 'http://10.160.206.89:6405/biprws'
documentId = '7827'       # SI_ID for the document
locale = 'en-US'          # Format language for the WebI exporter
contentLocale = 'en-US'   # Format language for the WebI document contents
folderPath = r'C:\Users\I819039\Desktop\RESTful'  # Folder where PDF file will be saved.
############################################################################################################################
raylightUrl = hostUrl + '/raylight/v1'
documentUrl = raylightUrl + '/documents/' + documentId
# Logon and retrieve the logon token to be used in subsequent RESTful calls.
headers = {    'Content-Type'    : 'application/json',    'Accept'          : 'application/json',
}
d=str.encode(json.dumps(logonInfo)) 
result = urllib.request.urlopen(urllib.request.Request(hostUrl + "/logon/long",d,headers))
reponse=json.loads(result.read().decode('utf-8'))
logonToken=reponse['logonToken']
# Get Web Intelligence document information.
headers = {    'X-SAP-LogonToken'  : '"'+logonToken+'"' ,     'Accept'            : 'application/json',    'Content-Type'      : 'application/json',    'Accept-Language'   : locale,    'X-SAP-PVL'         : contentLocale
}
result = urllib.request.urlopen( urllib.request.Request(documentUrl,None,headers) )
reponse=json.loads(result.read().decode('utf-8'))
document = reponse['document']
# Refresh the document by sending empty prompts (assumes document has no prompts).
headers = {    'X-SAP-LogonToken' : '"'+logonToken+'"' ,    'Accept'           : 'application/json' ,    'Content-Type'     : 'application/json' ,    'X-SAP-PVL'        : contentLocale
}
parametersUrl = documentUrl + '/parameters'
urllib.request.urlopen( urllib.request.Request(parametersUrl,None,headers) )
# Retrieve and save PDF first ensuring the file path is valid.
filePath = os.path.join(folderPath , document['name'] + '.pdf')
if( os.access(os.path.dirname(filePath), os.W_OK) ) :    # Get PDF and save to file    headers = {        'X-SAP-LogonToken' : '"'+logonToken+'"' ,        'Accept'           : 'application/pdf' ,        'X-SAP-PVL'        : contentLocale    }    result = urllib.request.urlopen( urllib.request.Request(documentUrl + '/pages',None,headers) )    f = open(filePath, 'wb')    f.write(result.read())    f.close()
else :    print ('Invalid file path ' + filePath)
# Unload document from Raylight.
headers = {    'X-SAP-LogonToken' : '"'+logonToken+'"' ,    'Accept'           : 'application/json' ,    'Content-Type'     : 'application/json' ,    'X-SAP-PVL'        : contentLocale
}
data = {   'document' : { 'state' : 'Unused' } 
}   
d=str.encode(json.dumps(data))
urllib.request.urlopen(urllib.request.Request(documentUrl,d,headers))
# Log off the Session identified by the X-SAP-LogonToken HTTP Header
headers = {    'X-SAP-LogonToken' : '"'+logonToken+'"' ,    'Accept'           : 'application/json' ,    'Content-Type'     : 'application/json'
}
urllib.request.urlopen(urllib.request.Request(hostUrl + '/logoff',b'',headers))

 

 

 

Tested with Portable Python 3.2.5.1 on Windows XP and BI4.1 SP3.

It's not compatible with Python 2. Syntax and Modules are different.

 

PS : Sorry for the misspellings ... I skipped some English class hours at school


Viewing all articles
Browse latest Browse all 262

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>