diff --git a/APIClient.xcodeproj/project.pbxproj b/APIClient.xcodeproj/project.pbxproj index 3b30426..60d76d1 100644 --- a/APIClient.xcodeproj/project.pbxproj +++ b/APIClient.xcodeproj/project.pbxproj @@ -8,6 +8,9 @@ /* Begin PBXBuildFile section */ 078B558C6C77F3C6DCDC4678 /* Pods_APIClientUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82531BA6D6228998A00AB5B6 /* Pods_APIClientUITests.framework */; }; + 0D60CECA1E9E174A00A8E67A /* quotesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D60CEC91E9E174A00A8E67A /* quotesViewController.swift */; }; + 0D93F9151E9E1E6A0095065E /* quotes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D93F9141E9E1E6A0095065E /* quotes.swift */; }; + 0D93F9171E9E2C250095065E /* results.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D93F9161E9E2C250095065E /* results.swift */; }; 874D06591CEF295E009A494D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 874D06581CEF295E009A494D /* AppDelegate.swift */; }; 874D065E1CEF295E009A494D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 874D065C1CEF295E009A494D /* Main.storyboard */; }; 874D06601CEF295E009A494D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 874D065F1CEF295E009A494D /* Assets.xcassets */; }; @@ -34,6 +37,9 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0D60CEC91E9E174A00A8E67A /* quotesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = quotesViewController.swift; sourceTree = ""; }; + 0D93F9141E9E1E6A0095065E /* quotes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = quotes.swift; sourceTree = ""; }; + 0D93F9161E9E2C250095065E /* results.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = results.swift; sourceTree = ""; }; 198B23CD94C6D84016A5208A /* Pods-APIClientUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-APIClientUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-APIClientUITests/Pods-APIClientUITests.release.xcconfig"; sourceTree = ""; }; 4FFA0A7AA37697BD5CBC3211 /* Pods_APIClientTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_APIClientTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 65C820A0F52E3181871F5ECA /* Pods-APIClientTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-APIClientTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-APIClientTests/Pods-APIClientTests.release.xcconfig"; sourceTree = ""; }; @@ -86,6 +92,8 @@ 872A27571CF0D4E200A988C4 /* View Controller */ = { isa = PBXGroup; children = ( + 0D60CEC91E9E174A00A8E67A /* quotesViewController.swift */, + 0D93F9141E9E1E6A0095065E /* quotes.swift */, ); name = "View Controller"; sourceTree = ""; @@ -100,6 +108,7 @@ 872A27591CF0D64A00A988C4 /* Model */ = { isa = PBXGroup; children = ( + 0D93F9161E9E2C250095065E /* results.swift */, ); name = Model; sourceTree = ""; @@ -468,7 +477,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 0D93F9151E9E1E6A0095065E /* quotes.swift in Sources */, 874D06591CEF295E009A494D /* AppDelegate.swift in Sources */, + 0D93F9171E9E2C250095065E /* results.swift in Sources */, + 0D60CECA1E9E174A00A8E67A /* quotesViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/APIClient/Base.lproj/Main.storyboard b/APIClient/Base.lproj/Main.storyboard index 69b2fbf..0f3ee15 100644 --- a/APIClient/Base.lproj/Main.storyboard +++ b/APIClient/Base.lproj/Main.storyboard @@ -1,8 +1,13 @@ - - + + + + + - + + + @@ -21,24 +26,75 @@ - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + - + diff --git a/APIClient/quotes.swift b/APIClient/quotes.swift new file mode 100644 index 0000000..1bc5b6b --- /dev/null +++ b/APIClient/quotes.swift @@ -0,0 +1,53 @@ +// +// quotes.swift +// APIClient +// +// Created by Elvira Beisel on 12.04.17. +// Copyright © 2017 iOS Dev Kurs Universität Heidelberg. All rights reserved. +// + +import Foundation +import Moya + +enum Quotesapi: Moya.TargetType { + + case quote(category: String) + + var baseURL: URL { + return URL(string: "https://andruxnet-random-famous-quotes.p.mashape.com/")! + } + + var path: String { + + switch self { + case .quote: + return "" + } + } + + var method: Moya.Method { + return.get + } + + var parameters: [String: Any]? { + switch self { + case .quote(category: let category): + return [ + "cat": category + ] + } + } + + var parameterEncoding: ParameterEncoding { + return URLEncoding.default + } + + var sampleData: Data { + return "".data(using: .utf8)! + } + + var task: Moya.Task { + return .request + } + +} diff --git a/APIClient/quotesViewController.swift b/APIClient/quotesViewController.swift new file mode 100644 index 0000000..589a686 --- /dev/null +++ b/APIClient/quotesViewController.swift @@ -0,0 +1,83 @@ +// +// quotesViewController.swift +// APIClient +// +// Created by Elvira Beisel on 12.04.17. +// Copyright © 2017 iOS Dev Kurs Universität Heidelberg. All rights reserved. +// + +import Foundation +import UIKit +import Moya + +import Freddy + +class quotesViewController: UIViewController, UITextFieldDelegate { + + + @IBOutlet weak var activityView: UIActivityIndicatorView! + // @IBOutlet weak var inputTextField: UITextField! + @IBOutlet weak var nameLabel: UILabel! + @IBOutlet weak var authorLabel: UILabel! + @IBAction func moviesButton(_ sender: Any) { + + showQuote(for: "movies") + + } + @IBAction func famousButton(_ sender: Any) { + showQuote(for: "famous") + } + + override func viewDidLoad() { + super.viewDidLoad() + + nameLabel.text = "" + authorLabel.text = "" + self.title = "It´s your choice!" + self.activityView.hidesWhenStopped = true + + } + + func showQuote(for category: String) { + + activityView.startAnimating() + + let endpointClosure = { (target: Quotesapi) -> Endpoint in + let headers = [ + "X-Mashape-Key": "gpYkdsl5x9msho9B1uCnd5LtHdVqp1932RLjsn3egoFcCcYng9" + ] + let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target) + return defaultEndpoint + .adding(newHTTPHeaderFields: headers) + } + + let provider = MoyaProvider(endpointClosure: endpointClosure) + + let query = Quotesapi.quote(category: category) + + + provider.request(query) { result in + + self.activityView.stopAnimating() + switch result { + case .success(let response): + do { + let jsonResponse = try JSON(data: response.data) + print(jsonResponse) + let result = try results (json: jsonResponse) + self.nameLabel.text = result.quote + self.authorLabel.text = result.author + } catch { + print(error) + } + + + case .failure(let error): + + print(error) + + } + } + + } +} diff --git a/APIClient/results.swift b/APIClient/results.swift new file mode 100644 index 0000000..862ed4e --- /dev/null +++ b/APIClient/results.swift @@ -0,0 +1,25 @@ +// +// results.swift +// APIClient +// +// Created by Elvira Beisel on 12.04.17. +// Copyright © 2017 iOS Dev Kurs Universität Heidelberg. All rights reserved. +// + +import Foundation +import Freddy + +struct results: JSONDecodable { + + let quote: String + let author: String + let category: String + + init(json: JSON) throws { + try self.quote = json.getString(at: "quote") + try self.author = json.getString(at: "author") + try self.category = json.getString(at: "category") + + } + +}