Skip to content

Instantly share code, notes, and snippets.

@ketanbhatt
Created February 3, 2019 19:08
Show Gist options
  • Save ketanbhatt/56c86628df6d9fc2733904297b810213 to your computer and use it in GitHub Desktop.
Save ketanbhatt/56c86628df6d9fc2733904297b810213 to your computer and use it in GitHub Desktop.
Get scrum retro using Trello's API, in Scala
import spray.json._
import DefaultJsonProtocol._
object Main extends App {
class Card(val cardId: String, val name: String, val cardType: String, val effortHours: Double) {
def formatCard(idx: Int): String = {
idx + ". " + name + ": [" + effortHours + " hour(s)]"
}
}
val authParams = Map(
"key" -> "--key--",
"token" -> "--token--"
)
def fetchCardsfromTrello(requestParams: Map[String, String]): String = {
val searchURL = "https://trello.com/1/search"
val response = requests.get(searchURL, params=requestParams)
assert(response.statusCode == 200)
response.text
}
def fetchCardDetailsfromTrello(cardId: String, requestParams: Map[String, String]): String = {
val cardUrl = "https://api.trello.com/1/cards/" + cardId
val response = requests.get(cardUrl, params=requestParams)
assert(response.statusCode == 200)
response.text
}
def getArchivedCardIds(days: String): List[String] = {
var searchParams = Map(
"query" -> ("is:archived board:GTD! edited:" + days + " sort:-edited"),
"card_fields" -> "dateLastActivity",
"cards_limit" -> "1000"
)
searchParams ++= authParams
val cardsJson = fetchCardsfromTrello(searchParams).parseJson.asJsObject.fields("cards")
cardsJson.convertTo[List[Map[String, String]]].map(card => card("id"))
}
def getEffort(customFields: List[Map[String, JsValue]]): Double = {
val effortFieldId = "5bb36a7085958b30ecc1e0c2"
var effort = 0.0
customFields.foreach(field => {
if (field("idCustomField").toString == effortFieldId) {
effort = field("value").convertTo[Map[String, String]].apply("number").toFloat
}
})
effort
}
def getCard(cardId: String): Card = {
var cardParams = Map(
"fields" -> "name,idList",
"customFieldItems" -> "true"
)
cardParams ++= authParams
val cardJson = fetchCardDetailsfromTrello(cardId, cardParams).parseJson.asJsObject.fields
val customFields = cardJson("customFieldItems").convertTo[List[Map[String, JsValue]]]
val cardName = cardJson("name").toString
new Card(
cardId,
name = cardName.substring(1, cardName.length - 1),
cardType = "",
effortHours = getEffort(customFields)
)
}
var daysLastEdited = "1"
if (args.length > 0)
daysLastEdited = args(0)
val cardIds = getArchivedCardIds(daysLastEdited)
cardIds.zipWithIndex foreach { case(cardId, idx) => {
val card = getCard(cardId)
println(card.formatCard(idx + 1))
}}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment