Как получить юниверсы SAP Business Objects с помощью Python

Как получить юниверсы 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: Ниже приводится краткий обзор структуры фрейма данных

dataframe structure

Часть 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. Приятного изучения!👋

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE