log 3 - 태블로 이미지를 슬랙으로 보내기 (1)

Minseon Kim·2022년 7월 17일
0
post-thumbnail

해당 글은 태블로 이미지를 다운로드 받아서 슬랙으로 보내는 자동화 모듈 구축기이다.
모듈 코드를 작성할 때 아래 링크 코드들을 참고해서 작성했다.
참고코드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파일 형태로 다운로드 받을 수 있다. 그리고 슬랙 봇을 통해 원하는 결과값을 보낼 수 있다. 각각 가능한 일이기 때문에 요구사항 역시 해결이 가능해보였다.

Tableau에서 할 일

코드를 짜기 전

  1. tableau server에서 본인의 권한을 먼저 확인한다.
    • 나의 경우, 서버 관리자, 즉 최고급 권한이기 때문에 상관없었다.
  2. token 발급 혹은 아이디-비번 확보하기
    • 아이디와 비번으로 코드를 통해 접속이 가능하다. 그래도 혹시 모르니 토큰을 발급받아서 해보기로 했다.
    • 토큰 발급의 경우, tableau Home > 설정 > 새로운 토큰 발급(해지도 아주 간단하게 할 수 있다.)

tableau에 원격으로 로그인하기

# 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)
  • site의 경우
    • 서버 이하로 여러 사이트를 뒀다면, 이름이 있을 수 있다
    • 그러나 default로 하나만 뒀다면, site의 이름은 공백이다.

원하는 view 파일 들고오기

태블로를 사용하다보면 수많은 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의 filter를 사용한 이미지 다운로드하기

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등 사용자가 원하는 데이터 형태로 다운로드가 가능하니, 관련해서 필요한 부분을 찾아보면 더 좋을 것이다.

profile
1에서 10을 만들고 싶은 데이터 분석가

0개의 댓글