Python:如何通过API获取不同用户发布的SSRS报告订阅

问题描述 投票:0回答:1

我正在使用带有 Python 3 的 SSRS API,需要获取所有报告及其订阅。

https://app.swaggerhub.com/apis/microsoft-rs/SSRS/2.0#/info

from requests_negotiate_sspi import HttpNegotiateAuth
import requests

req_url = r'http://<my_server_url>/reports/api/v2.0/Subscriptions'

session = requests.Session()
session.auth = HttpNegotiateAuth()

report_response = session.get(req_url, stream=True)

report_response_json = report_response.json()

session.close()

# do stuff with json response, eventually export to CSV

这可以让我获得我创建并发布的报告所需的所有信息。但是,服务器上有其他用户发布的报告,我也希望能够获取他们的报告信息。

python python-3.x reporting-services
1个回答
0
投票

似乎

/CatalogItems
返回所有内容,因此新的工作流程是使用该端点,然后循环遍历每个项目。然后使用响应中每个项目的 ID 发出另一个获取请求。

api_url = r'http://<my_server>/reports/api/v2.0/'

# single-sign on
session = requests.Session()
session.auth = HttpNegotiateAuth()

# use Odata filtering to only get Reports and LinkedReports
# https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html#_Toc445374625
report_response = session.get(api_url + r"CatalogItems?%24filter=Type%20eq%20'Report'%20or%20Type%20eq%20'LinkedReport'") #, params = {'filter': 'Type eq "Report" or Type eq "LinkedReport"'})

report_response_json = report_response.json()
for report_item in report_response_json['value']:
    try:
        # documentation doesn't list the LinkedReport(Id)/Subscriptions endpoint, 
        # but it exists just like the Report(Id)/Subscriptions one
        # https://app.swaggerhub.com/apis/microsoft-rs/SSRS/2.0#/LinkedReports/GetLinkedReports
        subscription_request_response = session.get(api_url + report_item['Type'] + 's(' + report_item['Id'] + ')/Subscriptions')
        subscription_item = subscription_request_response.json()['value']

        if(len(subscription_item) == 0): # no subscriptions
            # do stuff
        else: # report has subscriptions
            subscription_item = subscription_item[0] # single item list of lists
            # do other stuff
    except:
        # log error, do other stuff

session.close()
© www.soinside.com 2019 - 2024. All rights reserved.