Как получить юниверсы SAP Business Objects с помощью Python
13 января 2024 г.Веб-служба SAP BusinessObjects RESTful (RESTful API) — это интерфейс прикладного программирования, предоставляемый SAP BusinessObjects. Он позволяет разработчикам взаимодействовать с функциями платформы SAP BusinessObjects BI (Business Intelligence) посредством HTTP-запросов. Этот RESTful API позволяет интегрировать службы SAP BusinessObjects в пользовательские приложения, упрощая такие задачи, как получение, создание, обновление и удаление содержимого BI, а также управление разрешениями пользователей и безопасностью.
С помощью RESTful API разработчики могут выполнять такие операции, как получение информации об отчетах, юниверсах, папках, планировании и других объектах, связанных с BI. Такой подход способствует совместимости и упрощает интеграцию возможностей SAP BusinessObjects BI в различные приложения и рабочие процессы.
Как получить вселенные с помощью Python?
Часть 1. Аутентификация
Чтобы начать процесс аутентификации, замените значения заполнителей для имя пользователя
, пароль
и localhost
на данные вашей конкретной конфигурации.
import requests
import pandas as pd
import xml.etree.ElementTree as ET
# define the login request parameters
user_name = 'username'
password = 'password'
localhost = 'localhost'
auth_type = 'secEnterprise'
login_url = 'http://{}:6405/biprws/logon/long'.format(localhost)
login_data = f'<attrs xmlns="http://www.sap.com/rws/bip"><attr name="userName" type="string">{user_name}</attr><attr name="password" type="string">{password}</attr><attr name="auth" type="string" possibilities="secEnterprise,secLDAP,secWinAD,secSAPR3">{auth_type}</attr></attrs>'
login_headers = {'Content-Type': 'application/xml'}
# send the login request and retrieve the response
login_response = requests.post(login_url, headers=login_headers, data=login_data)
# parse the XML response and retrieve the logonToken
root = ET.fromstring(login_response.text)
logon_token = root.find('.//{http://www.sap.com/rws/bip}attr[@name="logonToken"]').text
api_headers = {'Content-Type': 'application/xml', 'X-SAP-LogonToken': logon_token}
Часть 2. Получение данных и создание фрейма данных
Просмотр полученных данных: название первой вселенной
Этот фрагмент Python получает всю информацию о юниверсах с сервера. Если вы запустите код, он выведет имя первой вселенной.
response = requests.get("http://{}:6405/biprws/raylight/v1/universes/".format(localhost),
headers=api_headers)
root = ET.fromstring(response.text)
print(root.findall('universe')[0][2].tag, ":", root.findall('universe')[0][2].text)
Функции преобразования данных: преобразование в DataFrame
Функции Python, get_dataframe_from_response
и get_all_dataframe
, работают вместе, чтобы упростить извлечение данных SAP BusinessObjects. Первая функция преобразует данные XML в структурированный DataFrame pandas, фиксируя атрибуты документа. Вторая функция эффективно обрабатывает сценарии, в которых юниверсы превышают лимит одного запроса, путем добавления нескольких кадров данных. В совокупности эти функции упрощают преобразование XML в DataFrame и предоставляют простое решение для обработки большого количества юниверсов.
def get_dataframe_from_response(response):
# Parse the XML data
root = ET.fromstring(response.text)
# Extract the data into a list of dictionaries
res = []
for item in root.findall('universe'):
doc_dict = {}
for elem in item.iter():
if elem.text is not None:
doc_dict[elem.tag] = elem.text
res.append(doc_dict)
# Convert the list of dictionaries to a pandas dataframe
df = pd.DataFrame(res)
return df
def get_all_dataframe(url):
documents = []
for i in range(50):
offset = i * 50
url_offset = url + "?offset={}&limit=50".format(offset)
response = requests.get(url_offset, headers=api_headers)
df = get_dataframe_from_response(response=response)
if df.empty:
break
else:
documents.append(df)
dataframe = pd.concat(documents, axis=0)
return dataframe
Легко получайте подробную информацию о юниверсах SAP BusinessObjects, используя одну строку кода Python. Используйте функцию get_all_dataframe
, и полученный в результате DataFrame df_universes
предоставит простой обзор атрибутов юниверсов.
df_universes = get_all_dataframe(url="http://{}:6405/biprws/sl/v1/universes".format(localhost))
Демонстрация df_universes
: Ниже приводится краткий обзор структуры фрейма данных
Часть 3. Извлечение сведений о вселенной
Если вам нужны дополнительные сведения, такие как путь к юниверсу и статус подключения, используйте следующую функцию. Эта функция извлекает указанные сведения для каждого юниверса в DataFrame df_universes
, предоставляя более полный обзор каждой записи.
def get_universe_detail(universeID, detail):
url = 'http://{}:6405/biprws/raylight/v1/universes/{}'.format(localhost, universeID)
res = requests.get(url, headers={
"Accept": "application/json",
"Content-Type": "application/json",
"X-SAP-LogonToken": logon_token
}).json()
return res['universe'][detail]
def get_more_information_from_universes(df):
details = ['path', 'connected']
for detail in details:
df[detail] = [get_universe_detail(id, detail) for id in df['id'].values]
return df
df_universes_more_info = get_more_information_from_universes(df_universes)
Спасибо, что нашли время, чтобы вместе со мной изучить информацию, связанную с данными. Я ценю ваше участие. Если эта информация окажется для вас полезной, я приглашаю вас подписаться на меня или связаться со мной на LinkedIn. Приятного изучения!👋
:::информация Также опубликовано здесь.
:::
Оригинал