본문 바로가기
개발인생/BI(Business Intelligence)

태블로 Rest API 연동(with python)

by jeje.91 2023. 3. 2.
반응형

태블로(Tableau)는 데이터 시각화 및 분석 툴로 유명합니다. 태블로를 사용하면 다양한 형식의 데이터를 시각화하고 대시보드를 만들어 데이터 인사이트를 도출할 수 있습니다. 태블로는 REST API를 제공하여 외부 시스템과 연동할 수 있습니다. 이번 글을 통해서 태블로 Rest API를 이용하여 파이썬(Python)과 연동하는 방법을 소개해보겠습니다.

 

 

개인용 액세스 토큰 발급

먼저 API를 연동하기 위해서는 인증이 필요하고 인증을 위한 API 토큰을 발급해보도록 하겠습니다.

태블로 클라우드에 접속해 우측 상단에 프로필을 클릭합니다. 그리고 '내 계정 설정'이란 메뉴를 클릭합니다.

설정 페이지로 이동 후 조금 내려보면 '개인용 액세스 토큰'이른 항목을 볼 수 있습니다.

 

'토큰 이름'이라는 입력란에 원하는 이름을 입력하면 우측의 '새 토큰 만들기' 버튼이 활성화 됩니다. 클릭! 해줍니다.

 

그러면 토큰 암호를 생성해 주는데 토큰 이름과 암호는 API 인증시에 사용되니 '클립보드로 복사' 버튼을 클릭해 암호가 노출되지 않도록 잘 보관해 줍니다. 토큰 암호는 이 창이 닫히면 다시 볼 수 없습니다. 

 

 

Python으로 API 연동

토큰 암호를 생성했으니 이제 API 인증을 진행해 보겠습니다. (Python 3.11.2 버전에서 django를 사용해 API를 연동했습니다.)

 

1. 환경변수 등록

앞에서 발급 받은 토큰 이름, 암호와 더불어 클라우드 URL과 사이트 ID가 필요합니다.

{사이트 ID} 는 클라우드에 로그인하면 home에 접속되는데 그러면 아래와 같은 URL 형식이 나옵니다. 그 안에서 확인 할 수 있습니다.

https://prod-apnortheast-a.online.tableau.com/#/site/{사이트 ID}/home

TABLEAU_URL=https://prod-apnortheast-a.online.tableau.com
TABLEAU_SITE_ID={사이트 ID}
TABLEAU_PERSONAL_ACCESS_TOKEN_NAME={토큰 이름}
TABLEAU_PERSONAL_ACCESS_TOKEN_SECRET={토큰 암호}

 

2. 태블로 API 인증 코드

import requests
from config import settings

def authenticate()
	# API URL 설정(api 버전을 설정합니다)
	api_url = settings.TABLEAU_URL + '/api/3.18'

	# Request header 설정(Content-Type과 Accept 둘 다 설정해야 합니다.)
	headers = {
		'Content-Type': 'application/json',
		'Accept': 'application/json',
	}

	# 요청할 payload 설정
	payload = {
		'credentials': {
			'personalAccessTokenName': settings.TABLEAU_PERSONAL_ACCESS_TOKEN_NAME,
			'personalAccessTokenSecret': settings.TABLEAU_PERSONAL_ACCESS_TOKEN_SECRET,
			'site': {
				'contentUrl': settings.TABLEAU_SITE_ID
			}
		}
	}

	# 인증 URL 설정
	url = f'{api_url}/auth/signin'

	# 결과값
	response = requests.post(url, json=payload, headers=headers)
	return response.json()

 

위 코드를 실행해 인증이 완료되면 아래와 같은 구조로 json 값이 리턴됩니다.

postman으로 호출한 결과

 

3. 프로젝트 목록 조회

인증 후 발급 받은 토큰으로 프로젝트 목록을 가져와보도록 하겠습니다.

 

먼저 프로젝트 목록을 조회하는 코드를 작성해보겠습니다. headers에는 위에서 발급받은 token을 넣을 수 있도록 'X-Tableau-Auth' 항목을 추가합니다.

def get_projects(token, site_id):
	api_url = settings.TABLEAU_URL + '/api/3.18'

	headers = {
		'Content-Type': 'application/json',
		'Accept': 'application/json',
		'X-Tableau-Auth': token, # 토큰 추가
	}

    url = api_url + f'/sites/{site_id}/projects'
    response = requests.get(url, headers=headers)
    return response.json()

 

위 코드들을 기반으로 실행하는 코드를 작성해보겠습니다.

# API 인증
auth = authenticate()

# 토큰, 사이트 ID 설정
token = auth['credentials']['token']
site_id = auth['credentials']['site']['id']

# 프로젝트 목록 조회
projects = get_projects(token, site_id)

 

API가 정상적으로 호출되면 아래와 같이 데이터가 리턴되게 됩니다.

 

 

전체 코드 입니다.

import requests
from config import settings

# API 인증 함수
def authenticate()
	# API URL 설정(api 버전을 설정합니다)
	api_url = settings.TABLEAU_URL + '/api/3.18'

	# Request header 설정(Content-Type과 Accept 둘 다 설정해야 합니다.)
	headers = {
		'Content-Type': 'application/json',
		'Accept': 'application/json',
	}

	# 요청할 payload 설정
	payload = {
		'credentials': {
			'personalAccessTokenName': settings.TABLEAU_PERSONAL_ACCESS_TOKEN_NAME,
			'personalAccessTokenSecret': settings.TABLEAU_PERSONAL_ACCESS_TOKEN_SECRET,
			'site': {
				'contentUrl': settings.TABLEAU_SITE_ID
			}
		}
	}

	# 인증 URL 설정
	url = f'{api_url}/auth/signin'

	# 결과값
	response = requests.post(url, json=payload, headers=headers)
	return response.json()

# 프로젝트 조회 함수
def get_projects(token, site_id):
	api_url = settings.TABLEAU_URL + '/api/3.18'

	headers = {
		'Content-Type': 'application/json',
		'Accept': 'application/json',
		'X-Tableau-Auth': token, # 토큰 추가
	}

    url = api_url + f'/sites/{site_id}/projects'
    response = requests.get(url, headers=headers)
    return response.json()
    
# API 인증
auth = authenticate()

# 토큰, 사이트 ID 설정
token = auth['credentials']['token']
site_id = auth['credentials']['site']['id']

# 프로젝트 목록 조회
projects = get_projects(token, site_id)

 

 

프로젝트 목록 외에도 워크북, 뷰 목록이나 상세 데이터를 조회할 수 있고 뷰의 이미지도 호출할 수 있습니다. 다양한 API를 사용할 수 있어서 또 다른 API를 활용하게 되면 공유해보도록 하겠습니다.

반응형

댓글