在Jupyter Notebook中可用的脚本在PowerBI中不起作用

时间:2018-12-06 15:49:55

标签: python-3.x powerbi jupyter

有没有人充分了解Jupyter与PowerBI之间的python执行方式之间的差异,足以帮助我调试在jupyter中平稳运行但在PowerBI中执行时出错的脚本?

具体来说,我正在尝试访问Web服务API(使用python中的请求库)。这涉及加密身份验证以创建API会话,然后我将其用于请求JSON数据。我尝试通过以下方式在powerBi桌面客户端中运行脚本:

获取数据->其他-> Python脚本

我被告知该脚本是使用Anaconda(与我执行Jupyter笔记本的Python安装相同)运行的

这是我的脚本(有一些小的修改):

 #I structured most of this code after https://github.com/csodedge/reporting-api-sample-code-python/blob/master/edge_api_samples/edge_api_client.py

import requests
import datetime
import base64
import hmac
import hashlib
import json

class csodSession():

def __init__(self, user_name, api_key, api_secret, sessionAlias):
    #Initialize a session

    self.user_name = user_name
    self.api_key = api_key
    self.api_secret = api_secret
    self.timestamp=''

    self.alias=sessionAlias

    self.token = None
    self.session_secret = None

    self.sessionCnt = 0

def start(self):
    #Connect to API and get session token and signature

    self.sessionCnt+=1
    reqUrl = XXXXXXXXX
    self.setDateStamp()
    stringtosign=XXXXXXXXX

    headers={
       XXXXXXXXX
    }

    response=requests.post(XXXXXXXXX)
    response=response.content.decode('utf-8')

    self.token=response[response.find('<a:Token>')+9:response.find('<a:Token>')+21]
    self.session_secret=XXXXXXXXX

def setDateStamp(self):
    #Update the timestamp on the session instance
    self.timestamp=datetime.datetime.utcnow().strftime('%Y-%m-%dT%T.000')

def getView(self, view_name):
    #takes the viewname as paramenter, retrieves requested view
    self.setDateStamp()
    stringtosign=XXXXXXXXX
    self.signature=self.sign_string512(stringtosign,self.session_secret)

    headers={
        XXXXXXXXX
    }

    response=requests.get(XXXXXXXXX)
    response=response.content.decode('utf-8')

    return response

def sign_string512(self, string_to_sign, secret_key):
    decoded_secret_key = base64.b64decode(secret_key)
    input_bytes = string_to_sign.encode('utf8')
    hash_value = (
        hmac.new(decoded_secret_key, input_bytes, hashlib.sha512).digest()
    )
    return base64.b64encode(hash_value)

 #Main

username=XXXXXXXXX
apikey=XXXXXXXXX
secret=XXXXXXXXX

s=csodSession(username,apikey,secret,XXXXXXXX)
s.start()

x=s.getView(XXXXXXXX)

正如我所说,这段代码在Jupyter中执行时没有错误,因此我主要将其发布以给出我正在使用的软件包,脚本的一般形式等的想法。

这是我尝试在PowerBi中执行它时遇到的错误:

Screenshot of PowerBi Error

该问题似乎与b64decode方法有关,但我不知道如何解决此问题。有什么想法吗?

0 个答案:

没有答案