AlteryxのPythonツールを使いBacklog APIから課題一覧を取得してみた

2022.06.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

チームメンバーからAlteryxでBacklogの課題をAPIを使い全件取得したいと相談を受け、Downloadツールを使ったワークフローを作成したのですが、ふとPythonツールでも出来るのではと思ったので試してみました。

Downloadツールを使ったワークフロー

Backlog APIの課題一覧は1回のリクエストで最大100件までしかデータを取得できないため、課題数を取得した後に行作成ツールでoffset値をインクリメントしたURLを作成してリクエストを行います。
データを取得した後にJSONパースや列分割、クロスタブ等で整形します。
Downloadツールを使ったワークフロー図

実行結果

ネットワークやPCスペックに依存すると思いますが1.5秒で終わりました。速い。
Downloadツールを使った処理速度

参考

Backlog API 課題数の取得
Backlog API 課題一覧の取得
AlteryxからSalesforce PardotへのAPIアクセス

Pythonツールを使ったワークフロー

シンプルです。
Pythonツールを使ったワークフロー図

コード

URLやAPIキー、プロジェクトIDの値はテキスト入力に入力した値を参照します。
Downloadツールを使用したワークフローと同様に、課題数を取得した後、offset値が課題数に達するまでリクエストをループします。 取得したデータはPandasのDataFrameとして出力することで後続のツールで参照可能です。

from ayx import Alteryx
import requests
import pandas as pd
import json

issues_count_URL = Alteryx.read("backlog_conf")['issuesCountURL'][0]
issues_URL = Alteryx.read("backlog_conf")['issuesURL'][0]
api_key = Alteryx.read("backlog_conf")['apiKey'][0]
project_id = Alteryx.read("backlog_conf")['projectId[]'][0]

params = {
    'apiKey':api_key,
    'projectId[]':project_id
}
count_res = requests.get(issues_count_URL,params=params)
count_json = count_res.json()
issues_count = count_json['count']

params = {
    'apiKey':api_key,
    'projectId[]':project_id,
    'count':100,
    'offset':0
}
issues_res = requests.get(issues_URL,params=params)
issues_json = issues_res.json()
issues_df = pd.json_normalize(issues_json)

i = 100
while i < issues_count:
    params = {
        'apiKey':api_key,
        'projectId[]':project_id,
        'count':100,
        'offset':i
    }
    res = requests.get(issues_URL,params=params)
    res_json = res.json()
    df = pd.json_normalize(res_json)
    issues_df = pd.concat([issues_df,df])
    i+=100

Alteryx.write(issues_df, 1)

実行結果

Pythonツールを使った実行結果
10.5秒とDownloadツールを使用したワークフローと比べるとかなり遅いです。
深掘りはしませんが、

  • Downloadツールは最大接続(デフォルトは2)を指定することで複数のURLに対して同時転送を行える事
  • Pythonツールは結果をAlteryx.writeで出力する際に一時ファイルを作成する事

あたりが影響していそうです。

まとめ

外部APIからのデータ取得にPythonツールを使用するとワークフローはシンプルになります。
ただし処理時間が増える事があるので基本的はDownloadツールを使った方が良さそうです。