我能够使用RESTAPI很好地登录(没有证书验证)。然而,当我查询元数据API时,我得到的只是来自graphQL GUI的html/javascript。没有人知道如何正确设置查询以检索与/metadata/graphQL上GUI中显示的相同信息
这是我要登录的代码:
import requests
import json
url = "https://<tableau-server-name>/api/3.8/auth/signin"
payload = json.dumps({
"credentials": {
"personalAccessTokenName": "<my login token>",
"personalAccessTokenSecret": "<my token value>",
"site": {
"contentUrl": ""
}
}
})
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload, verify=False)
response = json.loads(response.text)
print(response)
site_id = response['credentials']['site']['id']
user_id = response['credentials']['user']['id']
token = response['credentials']['token']
headers['X-tableau-auth']=token
我得到了一个很好的json响应,带有授权令牌,可以传递给后续调用:
{'credentials': {'site': {'id': '<site-id>', 'contentUrl': ''}, 'user': {'id': '<my-user-id>'}, 'token': '<my-user-token>'}}
我对元数据api的下一次调用是从这里开始的:
import requests
import json
url = "https://<tableau-server-name>/metadata/graphql/"
payload="{\"query\":\"query getAllTables {\\r\\n workbooks (filter: {id: \\\"<workbook id>"\\\"}) {\\r\\n\\t\\tname\\r\\n dashboards {\\r\\n id\\r\\n name\\r\\n sheets {\\r\\n id\\r\\n name\\r\\n \\tdatasourceFields {\\r\\n id \\r\\n name\\r\\n __typename\\r\\n ...on CalculatedField {\\r\\n formula\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n}\",\"variables\":{}}"
headers = {
'\'X-tableau-auth\'': token,
'Accept': 'application/json',
'Content-Type': 'application/json'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
答复是:
<!DOCTYPE html>
<html xmlns:ng="" xmlns:tb="">
<head ng-csp>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="initial-scale=1, maximum-scale=2, width=device-width, height=device-height, viewport-fit=cover">
<meta name="format-detection" content="telephone=no">
<meta name="vizportal-config" data-buildId="2020_2_164_widw5sl5zoo" data-staticAssetsUrlPrefix="">
<link href="vendors-vizportal.css?c5da2e24bb179cf9a5dd" rel="stylesheet">
<link href="vizportal.css?c5da2e24bb179cf9a5dd" rel="stylesheet">
<script type="text/javascript" src="/javascripts/api/tableau-2.min.js?c5da2e24bb179cf9a5dd"></script>
<script type="text/javascript" src="jquery.min.js?c5dasdfasdfcf9a5dd"></script>
<script type="text/javascript" src="angular.min.js?cadfasdff9a5dd"></script>
<script type="text/javascript" src="angular-cookies.min.js?cadfasdfsacf9a5dd"></script>
<script type="text/javascript" src="angular-sanitize.min.js?casdfasdfasdfb179cf9a5dd"></script>
<script type="text/javascript" src="rsa.js?c5da2easdfasdfasfasdfdd"></script>
<script type="text/javascript" src="underscore-min.js?adfasghdfhfdgdfacf9a5dd"></script>
<script type="text/javascript" src="q.min.js?casdfdsfa9a5dd"></script>
<script type="text/javascript" src="canvas-to-blob.min.js?c5sdfasdfasdfafa5dd"></script>
<script type="text/javascript" src="js.cookie.js?c5adsfasdf9a5dd"></script>
<script type="text/javascript" src="mousetrap.js?c5djdfghjrhfcff9a5dd"></script>
<script type="text/javascript" src="core.min.js?c5dahkfghjfghj9a5dd"></script>
<script type="text/javascript" src="vendors-vizportal.js?c5da2e24bwtertcf9a5dd"></script>
<script type="text/javascript" src="vizportal.js?c5da2e2dfghdfgha5dd"></script>
</head>
<body class="tb-body">
<div class="tb-app" ng-app="VizPortalRun" id="ng-app" tb-window-resize>
<tb:app></tb:app>
<tb:react-toaster></tb:react-toaster>
<script type="text/ng-template" id="inline_stackedElement.html">
<div class="tb-absolute" tb-window-resize tb-left="left" tb-top="top" tb-right="right" tb-bottom="bottom" tb-visible="visible" tb-overflow-y="overflowY"></div>
</script>
<tb:stacked-elements></tb:stacked-elements>
</div>
</body>
相比之下,我希望查询返回json,并对我在graphql GUI中测试的graphql查询做出相应的响应
我正在运行的graphQL查询如下:
query getAllFields {
workbooks (filter: {id: "<workbook-id>"}){
embeddedDatasources {
fields {
id
name
...on CalculatedField{
formula
}
}
name
id
}
}
}
目前没有回答
相关问题 更多 >
编程相关推荐