【PHP】TrelloAPIで作成日を取りたい！


PHPで、TrelloAPIからカード情報を取得して
一覧表示するというプログラムを作っています。

欲しい情報が取れなくて2日ほど悩んだのですが、
意外としょぼいところで躓いていたことが判明し
悔しかったので備忘録のために残しておきます。

APIマニュアルの前に、通常のマニュアルを見ろという話だね。
あるあるだね･･･

# TrelloAPIでボードに紐づく全カード情報を取る

ホード情報に紐づくカード全部の情報を取得する（上限1000件っぽい）
APIリファレンスは[こちら](https://developer.atlassian.com/cloud/trello/rest/api-group-boards/#api-boards-id-cards-get)

APIキーやトークン取得は他の方が書かれているのでそちらを参照のこと
▶[参考](https://yu88life.com/1748/)

```
//バージョンやトークンなど{}の値はそれぞれの環境にあったものを設定してください
$_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は使わない方が良さそう](https://qiita.com/youmeee/items/2ce1be1b7bf8ceb48f60)

「dateLastActivity」に入る日時は
カードにアップデートをかけた日だと思っていたのですが、
実際に取ってみたところ、2年前から更新していないカードなのに
今月の日時が入っているのです。なぜ！？
役に立たなさすぎやんTrello!!

# Trelloのカード作成日を取る方法

そもそも取りたかったのは最終更新日ではなく
カード作成日だったのです。
リファレンスを見たところAPIで作成日が取れないっぽかったので、
じゃあ最終更新日でいいやと思っただけなのです。

いろいろ調べて試してみたけど取れなくて、
諦めかけたとき、
APIではないTrello公式のマニュアルに書いてありました。

**ボードやカードのIDの最初の8桁が作成日なんだってよ。**
▶[カードまたはボードが作成された時間を取得する](https://support.atlassian.com/trello/docs/getting-the-time-a-card-or-board-was-created/)

それさえわかればもういいよと。

```
//カードID（ID24桁のうち最初の8文字はUnixタイムスタンプを表している）
$_id = "5c81b0123456789012345678";
$_timestamp16 = substr($_id, 0, 8);    //最初の8文字
$_timestamp = hexdec($_timestamp16);    //16進数→10進数へ変換

//これが作成日
$createdate = date("Y-m-d", $_timestamp);
```

ちゃんと取れました。長かったなあ、こんなので。

# おわりに

TrelloAPIはかなりシンプルなので、マニュアルを読み込まなくても使えるのが良かったです。
今回はデータ取得だけしかやっていないのですが、
カードの追加とかもこの後試してみようと思います。