Trello APIを実行する
はじめに
PowerShellで、Trelloのカード作成などを自動化したい。
- Windows 10
- PowerShell v5.1
APIキーとトークンを取得する
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 を指定しなければ、元ネタ無しで新しいカードを作成する。
認証
APIがユーザーの認証を得る方法は2つある。
1つは 1/authorize 経由、もう1つはOAuthを使う方法があるが、今回は 1/authorize を利用してトークンを得ることにする。
処理の流れとしては、大まかに下記の通り:
- スクリプトはブラウザで https://api.trello.com/1/authorizeを開く。
- スクリプトはトークンの入力を待つ。
- ユーザーはアプリを許可する。
- 許可するとブラウザにトークンが表示されるので、ユーザーはそれをコピペしてスクリプトへ入力する。
- スクリプトは受け取ったトークンをファイルに保存する。
サンプルは下記の通り。
$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
}