我的要求是使用Python将实时数据推送到Power BI,首先从数据库中读取,然后在Power BI中的Streaming数据集中发送数据。
我想要的第一件事是对Power BI进行简单的“获取”调用。
official documentation解释了通过REST API连接到客户端应用程序或Web应用程序的Power BI的过程。 但是,我正在使用Python - 不确定它是客户端应用程序还是Web应用程序。
无论如何,我能够使用adal库和方法.acquire_token_with_client_credentials来获取accessToken,方法请求authority_uri,tenant,client_id和client_secret(注意这不是要求用户名和密码)。 顺便说一句,我也试过用.acquire_token_with_username_password来获取accessToken,但这不起作用。
不幸的是,当我使用以下代码获取accessToken时,我收到了响应403。
#accessToken is received using the adal libary
headers = {'Authorization': 'Bearer ' + accessToken, 'Content-Type': 'application/json'}
read_datasets = requests.get('https://api.powerbi.com/v1.0/myorg/datasets', headers=headers)
#shockingly, this will result in a response 403
在阅读其他stackoverflow帖子并查看控制台应用程序后,我认为这不起作用的原因是因为没有用户登录过程。
This thread提到使用客户端凭据是不够的(它足以获取accessToken,但不足以使用API)
不确定如何继续,但我需要的是一种方法来继续使用这个adal template给我accessToken,并提供我的用户名和密码(如果需要),以及accessToken ,访问API。
答案 0 :(得分:1)
我看到你在PowerBI论坛上已经回答了这个问题:
https://community.powerbi.com/t5/Developer/Access-Power-BI-API-with-Python/m-p/190087#M6029
将来参考此人的任何人参考:
使用python adal库和相应的方法获取令牌。获得令牌后,您可以将其作为请求标头的一部分传递:
url = f'{self.api_url}/v1.0/myorg/groups/{self.group_id}/datasets'
headers = {
'Authorization': f'Bearer {self.token["accessToken"]}'
}
api_url是https://api.powerbi.com,group_id是你的group_id,而token是你从acquire_token_with_username_password得到的令牌字典。
从那里,您就可以进行所需的所有PowerBI API调用。