PHPで、TrelloAPIからカード情報を取得して
一覧表示するというプログラムを作っています。
欲しい情報が取れなくて2日ほど悩んだのですが、
意外としょぼいところで躓いていたことが判明し
悔しかったので備忘録のために残しておきます。
APIマニュアルの前に、通常のマニュアルを見ろという話だね。
あるあるだね・・・
TrelloAPIでボードに紐づく全カード情報を取る
ホード情報に紐づくカード全部の情報を取得する(上限1000件っぽい)
APIリファレンスはこちら
APIキーやトークン取得は他の方が書かれているのでそちらを参照のこと
▶参考
//バージョンやトークンなど{}の値はそれぞれの環境にあったものを設定してください
$_endpoint = "https://api.trello.com/{VERSION}/boards/{BORADID}/cards/all?key={APIKEY}&token={APITOKEN}";
try {
//curl START
$_curl = curl_init();
//OPTIONをセット
curl_setopt_array($_curl, [
CURLOPT_URL => $_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
//curl EXEC(文字列で取得)
$_resp = curl_exec($_curl);
//エラーハンドリング用
$_errno = curl_errno($_curl);
//curl END
curl_close($_curl);
} catch (Exception $e) {
//例外処理
}
//エラーハンドリング
if ($_errno !== CURLE_OK) {
}
//エラーでなければjsonを連想配列化
$_jsonresp = json_decode($_resp, true);
実際に取れる値は、このような形になります。
IDなどは変えてあります。
["id"]=> string(24) "5c81b0123456789012345678"
["badges"]=> array(15) {
["attachmentsByType"]=> array(1) {
["trello"]=> array(2) {
["board"]=> int(0)
["card"]=> int(0)
}
}
["location"]=> bool(false)
["votes"]=> int(0)
["viewingMemberVoted"]=> bool(false)
["subscribed"]=> bool(true)
["fogbugz"]=> string(0) ""
["checkItems"]=> int(0)
["checkItemsChecked"]=> int(0)
["checkItemsEarliestDue"]=> NULL
["comments"]=> int(3)
["attachments"]=> int(1)
["description"]=> bool(true)
["due"]=> NULL
["dueComplete"]=> bool(false)
["start"]=> NULL
}
["checkItemStates"]=> NULL
["closed"]=> bool(false)
["dueComplete"]=> bool(false)
["dateLastActivity"]=> string(24) "2020-02-05T07:18:46.237Z" //★ココ!
["desc"]=> string(4) "TEST"
["descData"]=> array(1) {
["emoji"]=> array(0) { }
}
["due"]=> NULL
["dueReminder"]=> NULL
["email"]=> NULL
["idBoard"]=> string(24) "5c6e03098765432109876543"
["idChecklists"]=> array(0) { }
["idList"]=> string(24) "5c6e04567890123456789012"
["idMembers"]=> array(0) { }
["idMembersVoted"]=> array(0) { }
["idShort"]=> int(22)
["idAttachmentCover"]=> NULL
["labels"]=> array(0) { }
["idLabels"]=> array(0) { }
["manualCoverAttachment"]=> bool(false)
["name"]=> string(10) "TEST TITLE"
["pos"]=> float(208888.8888)
["shortLink"]=> string(8) "XXXXXXXX"
["shortUrl"]=> string(29) "https://trello.com/c/XXXXXXXX"
["start"]=> NULL
["subscribed"]=> bool(true)
["url"]=> string(124) "https://trello.com/c/XXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
["cover"]=> array(6) {
["idAttachment"]=> NULL
["color"]=> NULL
["idUploadedBackground"]=> NULL
["size"]=> string(6) "normal"
["brightness"]=> string(5) "light"
["idPlugin"]=> NULL
}
["isTemplate"]=> bool(false)
["cardRole"]=> NULL
で、ここで取れる「dateLastActivity」という値がなかなか曲者だったのです。
dateLastActivityに注意
ググったらQiitaに記事がありました。ありがとうございます。
▶TrelloAPIのdateLastActivityは使わない方が良さそう
「dateLastActivity」に入る日時は
カードにアップデートをかけた日だと思っていたのですが、
実際に取ってみたところ、2年前から更新していないカードなのに
今月の日時が入っているのです。なぜ!?
役に立たなさすぎやんTrello!!
Trelloのカード作成日を取る方法
そもそも取りたかったのは最終更新日ではなく
カード作成日だったのです。
リファレンスを見たところAPIで作成日が取れないっぽかったので、
じゃあ最終更新日でいいやと思っただけなのです。
いろいろ調べて試してみたけど取れなくて、
諦めかけたとき、
APIではないTrello公式のマニュアルに書いてありました。
ボードやカードのIDの最初の8桁が作成日なんだってよ。
▶カードまたはボードが作成された時間を取得する
それさえわかればもういいよと。
//カードID(ID24桁のうち最初の8文字はUnixタイムスタンプを表している)
$_id = "5c81b0123456789012345678";
$_timestamp16 = substr($_id, 0, 8); //最初の8文字
$_timestamp = hexdec($_timestamp16); //16進数→10進数へ変換
//これが作成日
$createdate = date("Y-m-d", $_timestamp);
ちゃんと取れました。長かったなあ、こんなので。
おわりに
TrelloAPIはかなりシンプルなので、マニュアルを読み込まなくても使えるのが良かったです。
今回はデータ取得だけしかやっていないのですが、
カードの追加とかもこの後試してみようと思います。