Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 

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 :wink:

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 :???:

10 Comments
Labels in this area