LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-06-29

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0