Last active
November 19, 2020 12:09
-
-
Save bi119aTe5hXk/8ee4c92a345897b6480916c869dee150 to your computer and use it in GitHub Desktop.
Trello archive old cards
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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