ใช่มันคือการใช้ Trello API และเครื่องมืออื่น ๆ
คำตอบนี้อาศัยHTTPieและJQสองเครื่องมือที่มีอยู่ได้อย่างอิสระที่สามารถติดตั้งผ่านทางpipและHomebrewถ้าคุณกำลังใช้ Mac:
$ pip install httpie
$ brew install jq
การใช้HTTPie
เราสามารถสืบค้น Trello API เพื่อรับฟีดแอ็คชั่นแบบ raw สำหรับบอร์ดจากนั้นเราสามารถใช้jq
เปลี่ยนข้อมูลนั้นให้เป็นสิ่งที่มีประโยชน์
เริ่มจากสิ่งที่ "ง่าย" กันก่อน คำสั่งต่อไปนี้จะให้ความคิดเห็นทั้งหมดที่เรามีต่อคณะกรรมการ Trello Devในเดือนเมษายน 2013 ฉันจะอธิบายสิ่งนี้ในไม่ช้า:
http GET "https://api.trello.com/1/boards/4d5ea62fd76aa1136000000c/actions" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard" | jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'
หากทุกอย่างเป็นไปตามแผนเราควรเห็นสิ่งนี้:
{
"Embed All The Things (516fcff9b998572923008fb2)": [
{
"comment": "Embed.ly now supports https better, so maybe we can upgrade to that version. http://embed.ly/embed/security/ssl",
"member": "Brett Kiefer",
"date": "2013-04-26T16:15:21.408Z"
},
{
"comment": "Embedding a Google Map would be nice.",
"member": "Michael Warkentin",
"date": "2013-04-24T18:39:12.155Z"
},
{
"comment": "Github issues / pull requests",
"member": "Michael Warkentin",
...
เย็น. นั่นเป็นวัตถุ JSON เดียวที่สมเหตุสมผลที่เราสามารถแยกเป็นรูปแบบอื่น ๆ ได้อย่างง่ายดาย ทีนี้มาถึงขั้นตอนนั้นเพื่อให้เราสามารถเข้าใจได้ดีพอที่จะปรับเปลี่ยนให้เหมาะกับความต้องการของเรา
http GET "https://api.trello.com/1/boards/4d5ea62fd76aa1136000000c/actions" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard"
นี่เป็นเพียงส่วนเดียวที่ขึ้นอยู่กับ Trello เราทำการร้องขอกับ API สาธารณะสำหรับบอร์ดที่มี id 4d5ea62fd76aa1136000000c
- ฉันได้รับโดยไปที่https://trello.com/devและดู id trello ต่อท้าย URL แบบเต็ม ( https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c
)
The since
และbefore
ฟิลด์อธิบายตนเอง ฉันระบุlimit
ของ1000
เพราะนั่นคือการตอบสนองที่ใหญ่ที่สุด Trello จะช่วยให้ หากบอร์ดของคุณมีมากกว่าหนึ่งพันความคิดเห็นในช่วงวันที่ที่เกี่ยวข้องจะต้องใช้วิธีแก้ปัญหาการเพจที่ซับซ้อนมากขึ้นที่นี่ ฉันระบุfilter
ของcommentCard
เพราะผมสนใจเฉพาะในเหล่านั้นสำหรับวัตถุประสงค์ของคำตอบนี้ filter==commentCard,updateCard:idList,createCard
ถ้าคุณต้องการดำเนินการเพิ่มเติมชนิดระบุรายการคั่นด้วยเครื่องหมายจุลภาคเช่น ประเภทการกระทำที่ถูกต้องสามารถพบได้ในการอ้างอิง Trello API
หากเราดำเนินการด้วยตัวเองเราจะได้รับข้อมูลจำนวนมากซึ่งค่อนข้างยากที่จะเข้าใจ ดังนั้นเราจึงนำมันjq
ไปนวดเป็นสิ่งที่มีประโยชน์มากกว่า
jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'
ทีละชิ้นjq
สคริปต์ของเราทำการเปลี่ยนแปลงต่อไปนี้แต่ละคนส่งผลให้ผู้ประกอบการต่อไป:
group_by(.data.card.id)
- Trello ช่วยให้เรามีการกระทำมากมาย เราเปลี่ยนสิ่งนั้นให้เป็นอาร์เรย์ของอาร์เรย์โดยที่แต่ละอาร์เรย์ย่อยมีการกระทำเฉพาะสำหรับการ์ดที่กำหนด เป็นพื้น
[[card1_action1, card1_action2...], [card2_action1, card2_action2...], ...]
map({key: KEY_EXPRESSION, value: VALUE_EXPRESSION}) | from_entries
- เราไม่ต้องการแถวลำดับ;
{ card1: [action1, action2, ...], card2: [action1, action2, ...], ...}
เราเพียงแค่ต้องการวัตถุที่มีรูปแบบ ด้วยการเปลี่ยนอาเรย์เป็นอาร์เรย์ของคู่ของคีย์ - ค่าเราสามารถใช้from_entries
เพื่อเปลี่ยนมันให้เป็นวัตถุ เย็น.
- ตอนนี้เรามาดูสิ่งที่ฉันเรียก
KEY_EXPRESSION
ข้างต้น:(.[0].data.card | "\(.name) (\(.id))")
- มันค่อนข้างง่าย เรารับบัตรจากการกระทำครั้งแรก (เนื่องจากมันควรจะเหมือนกันสำหรับทุกการกระทำเราสามารถเลือกใด ๆ ได้ แต่สิ่งแรกที่ดูเหมือนจะเป็นทางเลือกที่มีเหตุผล) จากนั้นเราจะใช้การแก้ไขสตริง (
\(...)
) "name (id)"
เพื่อสร้างบางสิ่งบางอย่างที่ดูเหมือนว่า
VALUE_EXPRESSION
คือ map({date, member: .memberCreator.fullName, comment: .data.text})
- เราอาจเคยชิน
.
กับการกระทำทุกอย่างที่ไม่เปลี่ยนแปลง แต่เนื่องจากการกระทำนั้นค่อนข้างน่าเกลียดเรากำลังนวดมันให้เป็นสิ่งที่มีประโยชน์โดยการส่งmap
ผ่านอาร์เรย์และนำ{date, member: .memberCreator.fullName, comment: .data.text}
ไปใช้กับวัตถุการกระทำแต่ละรายการ
{date}
เป็นเช่นเดียวกับการ{date: date}
jq
- ทุกสิ่งทุกอย่างเป็นคำอธิบายที่ค่อนข้างชัดเจน ตอนนี้เรามีวันที่สมาชิก (แค่ชื่อของพวกเขา แต่มันจะง่ายขึ้นที่จะได้รับเพิ่มเติม) และข้อความของความคิดเห็น
ดังนั้นคุณมีมัน เอ้อหวังว่า เราสามารถทำการนวดข้อมูลนี้ในภาษาสคริปต์ใด ๆ แต่นี่เป็นสิ่งที่jq
ถูกสร้างขึ้นมาดังนั้นจึงเป็นข้อแก้ตัวที่ดีในการเรียนรู้เครื่องมือใหม่ที่ยอดเยี่ยม ตรวจสอบคู่มือ jqสำหรับข้อมูลเพิ่มเติม
ตอนนี้ใช้ได้เพราะTrello Dev Boardเป็นสาธารณะ แต่ถ้าเราต้องการข้อมูลส่วนตัว
ขวาวิธีที่จะทำเช่นนี้คือการสร้างโทเค็น API Trello API คู่มือการเริ่มต้นมี runthrough รายละเอียดของวิธีการทำเช่นนี้ แต่เรากำลังรีบเราจะทำตามวิธีของคนขี้เกียจ ...
ลงชื่อเข้าใช้http://trello.comใน Chrome และเปิดคอนโซล (ดู> นักพัฒนา> คอนโซล JavaScript) พิมพ์$.cookie('token')
ลงในหน้าต่าง "uniquememberid/somegarbledstring"
นี้จะคายสิ่งที่กลับเช่น คัดลอกส่วนระหว่างเครื่องหมายคำพูดและแก้ไขคำร้องขอให้เป็นดังนี้:
http GET "https://api.trello.com/1/boards/THE_ID_OF_THE_PRIVATE_BOARD_YOU_WANT/actions" "Cookie:token=uniquememberid/somegarbledstring" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard" | jq ...
สิ่งเดียวที่เราเปลี่ยนแปลงคือการเพิ่ม"Cookie:token=uniquememberid/somegarbledstring"
ส่วนหัว สิ่งนี้จะทำให้ Trello ใช้โทเค็น หมายเหตุว่าโทเค็นที่เป็นส่วนตัวมาก ... ถ้าคุณให้มันอยู่กับคนอื่นพวกเขาโดยทั่วไปสามารถเข้าสู่ระบบในขณะที่คุณจนกว่าคุณจะยกเลิกได้ที่หน้าบัญชี Trello ดังนั้นคุณต้องระวัง หรือทำตามขั้นตอนการสร้างคีย์ API / โทเค็น
ตอนนี้ปรับเปลี่ยนเพื่อรับข้อมูลที่แม่นยำที่คุณต้องการในรูปแบบที่คุณต้องการ