Advertisement
captaindavepdx

Untitled

May 16th, 2019
1,146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 3.20 KB | None | 0 0
  1. import Cocoa
  2. import Alamofire
  3. import SwiftyJSON
  4.  
  5. // Store airtable authorization data
  6. fileprivate let headerKey = "Authorization"
  7. fileprivate let headerAuthenticationToken = "Bearer airtable-api-key-here"
  8. fileprivate let airtableURL = "https://api.airtable.com/v0"
  9. fileprivate let airtableBase = "/airtable-base-here/"
  10. fileprivate let headerType = "Content-Type"
  11. fileprivate let headerValue = "application/json"
  12.  
  13. // Store airtable table data
  14. fileprivate let table = "table-name-here"
  15. fileprivate let tableView = "view-name-here"
  16.  
  17. // Store json from multiple http requests
  18. var jsonArray: [JSON] = [JSON]()
  19. var recordsArray = [JSON]()
  20.  
  21. // Call the http request function
  22. @IBAction func searchButtonClicked(_ sender: Any) {
  23.     self.requestAirtableRecords(forTable: table, withTableView: tableView, withOffset: nil, completion: { jsonArray in
  24.         self.jsonArray = jsonArray
  25.  
  26.         // Extract records from jsonArray
  27.         guard self.jsonArray.count > 0 else {
  28.             print("parseRecords(): Unable to extract records from json array.")
  29.             return
  30.         }
  31.         for array in self.jsonArray {
  32.             let records = array["records"]
  33.             self.recordsArray.append(contentsOf: records.arrayValue)
  34.         }
  35.        
  36.         // Verify complete item list from Airtable
  37.         print(self.recordsArray.count)
  38. })
  39. }
  40.  
  41. // Create url for http request
  42. fileprivate func requestRecordsURL(table: String, method: String, parameters: [String: Any]?) throws -> URLRequest? {
  43.     let url = URL(string: airtableURL + airtableBase + table)
  44.         if url != nil {
  45.         var request = URLRequest(url: url!)
  46.         request.httpMethod = method
  47.         request.setValue(headerAuthenticationToken, forHTTPHeaderField: headerKey)
  48.         request.timeoutInterval = TimeInterval(10 * 1000)
  49.         return try URLEncoding.default.encode(request, with: parameters)
  50.     }
  51.     return nil
  52. }
  53.  
  54. // Perform http request
  55.     func requestAirtableRecords(forTable table: String, withTableView tableView: String, withOffset offset: String?, completion: @escaping ([JSON]) -> ()) {
  56.         let parameters: [String: Any] = offset != nil ? ["view": tableView, "offset": offset!] : ["view": tableView]
  57.         do {
  58.             let url: URLRequest = try self.requestRecordsURL(table: table, method: HttpRequest.get, parameters: parameters)!
  59.             Alamofire.request(url).responseJSON { (response) in
  60.                 switch response.result {
  61.                 case .success(_):
  62.                     let json = JSON(response.result.value!)
  63.                     self.jsonArray.append(json)
  64.                     let nextOffset = json["offset"]
  65.                     if nextOffset.exists() {
  66.                         self.requestAirtableRecords(forTable: table, withTableView: tableView, withOffset: nextOffset.stringValue, completion: { _ in
  67.                             completion(self.jsonArray)
  68.                         })
  69.                     } else {
  70.                         completion(self.jsonArray)
  71.                     }
  72.                 case .failure(let error):
  73.                     print(error)
  74.                 }
  75.             }
  76.         } catch {
  77.             print("Error: Unable to request records from Airtable.")
  78.         }
  79.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement