Skip to content

Instantly share code, notes, and snippets.

@bi119aTe5hXk
Last active November 19, 2020 12:09
Show Gist options
  • Save bi119aTe5hXk/8ee4c92a345897b6480916c869dee150 to your computer and use it in GitHub Desktop.
Save bi119aTe5hXk/8ee4c92a345897b6480916c869dee150 to your computer and use it in GitHub Desktop.
Trello archive old cards
import Cocoa
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
//1. Get your key from trello.com/app-key and get foken form trello.com/1/authorize?key=<APIkey>&name=&expiration=never&response_type=token&scope=read,write
let APIKEY = "0a1...7237d"
let APITOKEN = "0d7d...7d31"
//2. Find the board ID
let getBoardList = "https://trello.com/1/members/me/boards?key=\(APIKEY)&token=\(APITOKEN)"
let boardID = "5e9...06eae"
//3. Find list ID from board
//https://trello.com/1/boards/5e9...ae/lists?key=0a148...237d&token=0d7df51....d31&fields=name
let getBoard = "https://trello.com/1/boards/\(boardID)/lists?key=\(APIKEY)&token=\(APITOKEN)&fields=name"
//4. Every cards ID in list
//https://api.trello.com/1/lists/5e9673032d80418b19127fb6/cards?key=0a148......237d&token=0d7df5...7d31&fields=due
let listID = "5e...fb6"
let getList = "https://api.trello.com/1/lists/\(listID)/cards?key=\(APIKEY)&token=\(APITOKEN)&fields=due,closed"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.000Z'"
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let keeptime:Double = 60*24*60*60
var delList = Array<Any>.init()
let url = URL(string: getList)!
let session = URLSession.shared
let q = session.dataTask(with: url) { data, response, error in
// do {
// if let d = data, let dictionary = try JSONSerialization.jsonObject(with: d, options: []) as? [String: AnyObject] {
// print(dictionary)
// }
// }
// catch {
// print("Error \(error)")
// }
do {
if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? NSArray {
//print(jsonResult)
let doneList = jsonResult as! [Any]
for item in doneList {
let dic = item as! [String:Any]
//Check every card in list. if is older than 60/90 days, added to delList
if let string = dic["due"] as? String{
let date = dateFormatter.date(from: string)
if date! < Date().addingTimeInterval(keeptime*(-1)) {
//print("Del\(date)")
let closed = dic["closed"] as? Bool
if closed == false {
delList.append(dic["id"]!)
}
}else{
//print("Keep\(date)")
}
}
}
//print(delList)
delOldCards()
}
} catch let error as NSError {
print(error.localizedDescription)
}
}
q.resume()
func delOldCards(){
print(delList)
for card in delList {
// sleep(1)
if let cardid = card as? String{
// prepare json data
let json: [String: Any] = ["key": APIKEY, "token": APITOKEN, "closed":true]
let jsonData = try? JSONSerialization.data(withJSONObject: json)
let url = URL(string: "https://api.trello.com/1/cards/\(cardid)?key=\(APIKEY)&token=\(APITOKEN)")!
var request = URLRequest(url: url)
request.httpMethod = "PUT"
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
//print(response)
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}
let result = String(data: data, encoding: .utf8)
print(result)
// let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
// if let responseJSON = responseJSON as? [String: Any] {
// print(responseJSON)
// }
}
task.resume()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment