Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Cocoa
- import Alamofire
- import SwiftyJSON
- // Store airtable authorization data
- fileprivate let headerKey = "Authorization"
- fileprivate let headerAuthenticationToken = "Bearer airtable-api-key-here"
- fileprivate let airtableURL = "https://api.airtable.com/v0"
- fileprivate let airtableBase = "/airtable-base-here/"
- fileprivate let headerType = "Content-Type"
- fileprivate let headerValue = "application/json"
- // Store airtable table data
- fileprivate let table = "table-name-here"
- fileprivate let tableView = "view-name-here"
- // Store json from multiple http requests
- var jsonArray: [JSON] = [JSON]()
- var recordsArray = [JSON]()
- // Call the http request function
- @IBAction func searchButtonClicked(_ sender: Any) {
- self.requestAirtableRecords(forTable: table, withTableView: tableView, withOffset: nil, completion: { jsonArray in
- self.jsonArray = jsonArray
- // Extract records from jsonArray
- guard self.jsonArray.count > 0 else {
- print("parseRecords(): Unable to extract records from json array.")
- return
- }
- for array in self.jsonArray {
- let records = array["records"]
- self.recordsArray.append(contentsOf: records.arrayValue)
- }
- // Verify complete item list from Airtable
- print(self.recordsArray.count)
- })
- }
- // Create url for http request
- fileprivate func requestRecordsURL(table: String, method: String, parameters: [String: Any]?) throws -> URLRequest? {
- let url = URL(string: airtableURL + airtableBase + table)
- if url != nil {
- var request = URLRequest(url: url!)
- request.httpMethod = method
- request.setValue(headerAuthenticationToken, forHTTPHeaderField: headerKey)
- request.timeoutInterval = TimeInterval(10 * 1000)
- return try URLEncoding.default.encode(request, with: parameters)
- }
- return nil
- }
- // Perform http request
- func requestAirtableRecords(forTable table: String, withTableView tableView: String, withOffset offset: String?, completion: @escaping ([JSON]) -> ()) {
- let parameters: [String: Any] = offset != nil ? ["view": tableView, "offset": offset!] : ["view": tableView]
- do {
- let url: URLRequest = try self.requestRecordsURL(table: table, method: HttpRequest.get, parameters: parameters)!
- Alamofire.request(url).responseJSON { (response) in
- switch response.result {
- case .success(_):
- let json = JSON(response.result.value!)
- self.jsonArray.append(json)
- let nextOffset = json["offset"]
- if nextOffset.exists() {
- self.requestAirtableRecords(forTable: table, withTableView: tableView, withOffset: nextOffset.stringValue, completion: { _ in
- completion(self.jsonArray)
- })
- } else {
- completion(self.jsonArray)
- }
- case .failure(let error):
- print(error)
- }
- }
- } catch {
- print("Error: Unable to request records from Airtable.")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement