2017-02-17 4 views
0

Tableau에서 제공 한 샘플 코드를 사용하여 Tableau Rest API를 사용하여 신뢰할 수있는 토큰을 인증하고 생성하려고합니다. 내가 파이썬 V2.7 아래Python을 사용하여 Tableau Rest API를 인증 및 포함하십시오. 2.7

을 사용하고 은 (극적 장면에서 제공하는 샘플과 동일) 코드입니다 - :

try: 

    from urllib.request import urlopen, Request 
except ImportError: 
     from urllib2 import urlopen, Request 
import xml.etree.ElementTree as ET # For parsing XML responses 
server_name = "http://dashboard.crgroup.com" 
user_name = "abc"  
password = "abc" 
site_url_id = "default_site"   
signin_url = "http://{server}/api/2.4/auth/signin".format(server=server_name) 
request_xml = ET.Element('tsRequest') 
credentials = ET.SubElement(request_xml, 'credentials', 
          name=user_name, password=password) 
site_element = ET.SubElement(credentials, 'site', 
          contentUrl=site_url_id) 
request_data = ET.tostring(request_xml) 
req = Request(signin_url, data=request_data) 
req = urlopen(req) 
server_response = req.read() 
response_xml = ET.fromstring(server_response) 
token = response_xml.find('.//t:credentials', 
          namespaces={'t': "http://tableau.com/api"}).attrib['token'] 
site_id = response_xml.find('.//t:site', 
          namespaces={'t': "http://tableau.com/api"}).attrib['id'] 
print('Sign in successful!') 
print('\tToken: {token}'.format(token=token)) 
print('\tSite ID: {site_id}'.format(site_id=site_id)) 
headers = {'X-tableau-auth': token} 
signout_url = "http://{server}/api/2.4/auth/signout".format(server=server_name) 
req = Request(signout_url, headers=headers, data=b'') 
req = urlopen(req) 
print('Sign out successful!') 

하지만 추적 조사로 오류가 점점 오전 :

Traceback (most recent call last): 
    File "C:/Extract Api/testapi.py", line 42, in <module> 
    req = urlopen(req) 
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen 
    return opener.open(url, data, timeout) 
    File "C:\Python27\lib\urllib2.py", line 429, in open 
    response = self._open(req, data) 
    File "C:\Python27\lib\urllib2.py", line 447, in _open 
    '_open', req) 
    File "C:\Python27\lib\urllib2.py", line 407, in _call_chain 
    result = func(*args) 
    File "C:\Python27\lib\urllib2.py", line 1228, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "C:\Python27\lib\urllib2.py", line 1198, in do_open 
    raise URLError(err) 
URLError: <urlopen error [Errno 11001] getaddrinfo failed> 

올바른 사용자 이름/암호를 사용하고 있다고 확신합니다. 또한 브라우저를 사용하여 URL에 액세스 할 수 있습니다.

친절히 제안합니다.

답변

0

해결되었습니다.

저는 Tablei v10.0을 api v2.4와 함께 사용하고있었습니다. API를 버전 2.3으로 변경하여 작동했습니다.

도움 주셔서 감사합니다.

0

.format() 전화가 잘못된 URL을 생성합니다. 파이썬 REPL이 테스트, 나는 다음과 같은 얻을 : server_name에서 또는 .format() 전화 문자열의 처음부터 :

$ server_name = "http://dashboard.crgroup.com" $ "http://{server}/api/2.4/auth/signin".format(server=server_name) (output): 'http://http://dashboard.crgroup.com/api/2.4/auth/signin'

당신은 "// HTTP"를 제거하려면 다음 중 하나를해야합니다. 오류 <urlopen error [Errno 11001] getaddrinfo failed>은 Tableau 문제가 아니라 URL 문제 일 가능성이 있음을 알 수있었습니다.

0

@Tayler $ server_name에서 "http://"을 삭제했습니다.

Traceback (most recent call last): 
    File "D:\R&D\Python R&D\Workspace_2.7\PythonRestAPI\src\test.py", line 47, in <module> 
    req = urlopen(req) 
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen 
    return opener.open(url, data, timeout) 
    File "C:\Python27\lib\urllib2.py", line 435, in open 
    response = meth(req, response) 
    File "C:\Python27\lib\urllib2.py", line 548, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "C:\Python27\lib\urllib2.py", line 473, in error 
    return self._call_chain(*args) 
    File "C:\Python27\lib\urllib2.py", line 407, in _call_chain 
    result = func(*args) 
    File "C:\Python27\lib\urllib2.py", line 556, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 404: Not Found 

을하지만 다시 내 브라우저를 사용하여 제공된 URL에 액세스 할 수 오전 : 는 지금은 follows-으로 다른 오류를 얻고있다.

+0

'signin_url = "http : // {server} /api/2.4/auth/signin".format (server = server_name)'을 실행 한 후에'signin_url'을 기록 할 수 있습니까? 그러면'signin_url'의 값은 무엇입니까? 'http : // dashboard.crgroup.com/api/2.4/auth/signin'이어야합니다.하지만 두 번 확인하는 것이 좋습니다. – Tayler