我已经创建了一个推送流数据集(历史记录已建立),并且设法使用“ Push URL”从Python脚本向其发布数据,该URL是从有关数据集的“ API信息”选项卡中获得的。我还需要做的是删除历史数据,以便清除我的测试数据和/或在必要时可以重置数据集并从头开始重新填充。
推送网址的格式为 https://api.powerbi.com/beta/xxxxxxxx/datasets/xxxxxxxxxxxx/rows?key=xxxxxxxxxxxxxxx
以下代码可以正常工作并发布数据;
import requests
import pyodbc as db
import pandas as pd
API_ENDPOINT = "https://api.powerbi.com/beta/xxxxxxxx/datasets/xxxxxxxxxxxx/rows?key=xxxxxxxxxxxxxxx"
dbcon = db.connect('DRIVER={SQL Server};SERVER=tcp:fxdb.database.windows.net;DATABASE=FXDatabase;UID=xxxx;PWD=xxxx')
df = pd.read_sql("select statement etc...", dbcon)
data = df.to_dict(orient='records')
response = requests.post(API_ENDPOINT, json=data)
但是添加以下内容:
response = requests.delete(API_ENDPOINT)
给我:
404
{
"error":{
"code":"","message":"No HTTP resource was found that matches the request URI 'http://api.powerbi.com/beta/...
我无法解决这个问题,因此我开始研究OAuth2身份验证,认为Auth URL仅用于发布数据。在https://dev.powerbi.com/apps注册应用程序后,我的代码现在如下所示:
import requests
import pyodbc as db
import pandas as pd
API_ENDPOINT = "https://api.powerbi.com/beta/xxxxxxxxxxxxxx/datasets/xxxxxxxxxxxxxxx/rows"
data = {
'grant_type': 'password',
'scope': 'openid',
'resource': r'https://analysis.windows.net/powerbi/api',
'client_id': 'xxxxxxxxx',
'username': 'xxxxxxxxx',
'password': 'xxxxxxxx'
}
response = requests.post('https://login.microsoftonline.com/common/oauth2/token', data=data)
access_token = response.json().get('access_token')
headers = {'Authorization': 'Bearer ' + access_token}
dbcon = db.connect('DRIVER={SQL Server};SERVER=tcp:fxdb.database.windows.net;DATABASE=FXDatabase;UID=xxxx;PWD=xxxx')
df = pd.read_sql("select statement etc...", dbcon)
data = df.to_dict(orient='records')
response = requests.post(API_ENDPOINT, json=data, headers=headers)
response = requests.delete(API_ENDPOINT, headers=headers)
身份验证有效,返回状态码200。POST返回401(此方法适用于先前的方法),而DELETE仍返回404。
感谢jonrsharpe向我指出了正确的方向。
重新访问API文档时,我发现了一个获取表名的调用。
GET https://api.powerbi.com/v1.0/myorg/datasets/ {datasetKey} / tables
所以认证后我就跑了
response = requests.get("https://api.powerbi.com/v1.0/myorg/datasets/xxxxxxxx/tables", headers=headers)
响应的内容告诉我,我的数据集中有一个名为“ RealTimeData”的表,该表必须为默认名称,因为我没有有意创建此表。
我现在将端点更新为;
API_ENDPOINT = "https://api.powerbi.com/v1.0/myorg/datasets/xxxxxxxxx/tables/RealTimeData/rows"
而且一切正常。
谢谢乔恩!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句