アルパカのメモ

Trello APIを実行する

はじめに

PowerShellで、Trelloのカード作成などを自動化したい。

  • Windows 10
  • PowerShell v5.1

APIキーとトークンを取得する

参考:API Introduction

https://trello.com/app-key へアクセス。

画面に表示されるAPIキーをコピーして保存しておく。 そのあと、自分でテストするためのAPIトークンを取得する。APIキーの下に記載されている「トークン」のリンクをクリックする。

このアプリを許可するかどうか確認する画面が表示されるので、下へスクロールして「許可」を押す。

「以下のトークンを使用したTrelloアカウントへのアクセスを許可しました」の画面になる。 トークンをコピーして保存する。

この手順で取得するトークンはあくまでも自分用なので、APIキーを使ったスクリプトを共有する際は、トークンはユーザーに取得してもらうことになる。

自分が所属するボードの一覧を取得

$params = @{
    key = "APIキー"
    token = "トークン"
}
$uri = "https://api.trello.com/1/members/me/boards"
$response = Invoke-WebRequest -Uri $uri -Body $params
$content = $response.Content
$boards = ConvertFrom-Json $content

foreach ($item in $boards) {
    Write-Host $item.id
    Write-Host $item.name
    Write-Host $item.url
    Write-Host ""
}

自分が所属するボードの一覧を取得できる。ここで取得できるボードIDを、カード作成などのAPIで使用するので、まずこのAPIを実行してボードIDのリストを取得しておくと良い。

ボードのリスト一覧を取得

$params = @{
    key = "APIキー"
    token = "トークン"
}
$boardId = "ボードID"

$uri = "https://api.trello.com/1/boards/${boardId}/lists"
$response = Invoke-WebRequest -Uri $uri -Body $params
$content = $response.Content
$lists = ConvertFrom-Json $content

foreach ($item in $lists) {
    Write-Host $item.id
    Write-Host $item.name
    Write-Host ""
}

特定のボードのリスト (カードをまとめるグループのようなもの) の一覧を取得できる。 APIでカード作成などを行う場合、どのリストに作成するかは必須指定なので、このAPIをあらかじめ実行してリストIDを取得しておくと良い。

カードを作成

$params = @{
    key = "APIキー"
    token = "トークン"
    idList = "リストID"
    idCardSource = "テンプレートカードID"
    name = "カードの名前"
}

$uri = "https://api.trello.com/1/cards"
$response = Invoke-WebRequest -Uri $uri -Body $params -Method "POST"

既存のカードを元ネタにして、新しいカードを作成する。 idCardSource を指定しなければ、元ネタ無しで新しいカードを作成する。

認証

参考:Authorization

APIがユーザーの認証を得る方法は2つある。 1つは 1/authorize 経由、もう1つはOAuthを使う方法があるが、今回は 1/authorize を利用してトークンを得ることにする。

処理の流れとしては、大まかに下記の通り:

  1. スクリプトはブラウザで https://api.trello.com/1/authorize を開く。
  2. スクリプトはトークンの入力を待つ。
  3. ユーザーはアプリを許可する。
  4. 許可するとブラウザにトークンが表示されるので、ユーザーはそれをコピペしてスクリプトへ入力する。
  5. スクリプトは受け取ったトークンをファイルに保存する。

サンプルは下記の通り。

$APP_DATA_DIR = $env:LOCALAPPDATA + "\TestApp"
$TOKEN_FILE = $APP_DATA_DIR + "\token.txt"

function Get-NewToken() {
    # トークンを得る

    $queryString = "?"
    $queryString = ($queryString + "key=" + $API_KEY) # APIキーに置き換える
    $queryString = ($queryString + "&scope=read,write")
    $queryString = ($queryString + "&expiration=never")
    $queryString = ($queryString + "&name=TestApp")
    $queryString = ($queryString + "&response_type=token")

    $uri = ("https://api.trello.com/1/authorize" + $queryString)

    Start-Process $uri

    $token = Read-Host "ブラウザに表示されたトークンを入力してください"

    # トークンをファイルに書き込み
    if (-not (Test-Path $APP_DATA_DIR)) {
        New-Item $APP_DATA_DIR -ItemType "directory"
    }

    if (Test-Path $TOKEN_FILE) {
        Remove-Item $TOKEN_FILE
    }
    
    Out-File -FilePath $TOKEN_FILE -InputObject $token
}

ファイルに保存したトークンは、APIを実行するときに読み込む。

function Read-Token() {
    if (-not (Test-Path $TOKEN_FILE)) {
        Get-NewToken
    }
    $script:API_TOKEN = Get-Content $TOKEN_FILE
}