해당 글은 태블로 이미지를 다운로드 받아서 슬랙으로 보내는 자동화 모듈 구축기이다.
모듈 코드를 작성할 때 아래 링크 코드들을 참고해서 작성했다.
참고코드1 ) https://github.com/tableau/server-client-python/blob/9ec60ac573792f8809b7f74a2bae4b04a2f06a1a/samples/export.py#L64
참고코드2) https://wormwlrm.github.io/2022/05/07/Bamboo-Forest-Slack-App.html
참고코드3) https://www.tessellationtech.io/how-to-use-tableau-server-client-in-python/
회사에서 태블로 이미지를 슬랙봇으로 보내는 요구사항을 받았다. 뭔가 쉬울 것 같지만, 확답은 하기 어려운 상황이었다. 일단 조사해보고 먼저 해치워야 할 일부터 한 다음에 이야기하자고 둘러댔다. 그러던 중, 마침 회사에서 일이 없을 때 자투리 시간에 만들어보았다.
태블로 server client api를 이용해서 태블로 대시보드를 이미지, pdf, csv파일 형태로 다운로드 받을 수 있다. 그리고 슬랙 봇을 통해 원하는 결과값을 보낼 수 있다. 각각 가능한 일이기 때문에 요구사항 역시 해결이 가능해보였다.
# python 3.6 이상일 때 사용이 가능
pip install tableauserverclient
해당 기능은 tableayserverclient package가 있을 때 가능하기 때문에 다운로드 받는다
import tableauserverclient as TSC
tableau_author = TSC.PersonalAccessTokenAuth(
'TOKEN_NAME', 'TOKEN_VALUE', 'SITE_NAME')
# 현재 default 상태여서 site가 없음
tableau_server = TSC.Server('SERVER_URL', use_server_version=True)
태블로를 사용하다보면 수많은 view 파일이 생성된다. (개인이 아니라면 더더욱..!)
tableau server client API는 view의 id를 기준으로 해당 view 인스턴스를 들고온다.
하지만 view id는 알파벳, 숫자가 섞인 긴 문자열로 자동 생성된다. 이런 id를 외울 수는 없으니, 필자는 view의 이름으로 view의 id를 찾아서 가지고 오는 방식을 채택하였다.
with tableau_server.auth.sign_in(tableau_author):
for view in TSC.Pager(tableau_server.views):
if 'contains_string' in view.name:
view_id = view.id
view_data_by_id = tableau_server.views.get_by_id(view_id)
만약 view의 id를 알고 있다면, 아래와 같은 방법으로 바로 필터링해서 사용할 수 있다.
views = filter(lambda x: x.id == args.resource_id or x.name == args.resource_id, TSC.Pager(server.views.get))
view = list(views).pop() # in python 3 filter() returns a filter object
view 자체의 모습을 곧바로 다운로드 받아도 되고, 혹은, 필터링한 결과를 다운로드받을 수 있다.
필자는 필터링한 결과를 원하기 때문에, 이런 저런 방법을 뒤져봤다. 찾아보니, tableau server에 직접 RequestOption을 줘서 그 option에 따라 다른 타입으로 다운로드 방법을 알게 되었다.
req_option = TSC.ImageRequestOptions().vf('FILTER', 'FILTER_VALUE')
tableau_server.views.populate_image(view_data_by_id, req_option)
위와 같은 구문을 활용하면 내가 원하는 필터링 결과를 이미지 다운받을 수 있다.
tableau server client API는 단순히 png형태 다운로드만 제공하지 않는다. pdf, text등 사용자가 원하는 데이터 형태로 다운로드가 가능하니, 관련해서 필요한 부분을 찾아보면 더 좋을 것이다.