Last active
March 14, 2016 16:04
-
-
Save gfelot/eec47c3f8d0533d59dc7 to your computer and use it in GitHub Desktop.
WIMY - Gloss PB
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
// | |
// Book.swift | |
// WIMB | |
// | |
// Created by Gil Felot on 10/01/16. | |
// Copyright © 2016 gfelot. All rights reserved. | |
// | |
import Foundation | |
import UIKit | |
import Gloss | |
struct imageLinks: Decodable { | |
let coverString: String! | |
init?(json: JSON) { | |
if let _medium: String = "medium" <~~ json { | |
coverString = _medium | |
} else if let _small: String! = "small" <~~ json { | |
coverString = _small | |
} else if let _thumbnail: String! = "thumbnail" <~~ json { | |
coverString = _thumbnail | |
} else if let _smallThumbnail: String! = "smallThumbnail" <~~ json { | |
coverString = _smallThumbnail | |
} else { | |
coverString = nil | |
} | |
} | |
} | |
struct Book: Decodable { | |
let selfLink:String! | |
let coverURL:imageLinks! | |
let title:String! | |
let authors:[String]! | |
// let ISBN13:String! | |
let ID:String! | |
let desc:String! | |
let publisher:String! | |
let publishedDate:String! | |
let pageCount:Int! | |
let language:String! | |
let categories:[String]! | |
let averageRating:Double! //min 1 to max 5 | |
let previewLink:String! | |
init?(json: JSON) { | |
guard let data: JSON = "items" <~~ json else { | |
print("Error no JSON data available") | |
return nil | |
} | |
guard let _selfLink: String = "selfLink" <~~ data else { | |
return nil | |
} | |
selfLink = _selfLink | |
guard let _coverURL: imageLinks = "imageLinks" <~~ data else { | |
return nil | |
} | |
coverURL = _coverURL | |
guard let _title: String = "volumeInfo.title" <~~ data else { | |
return nil | |
} | |
title = _title | |
guard let _authors: [String] = "volumeInfo.authors" <~~ data else { | |
return nil | |
} | |
authors = _authors | |
// guard let _ISNB13: String = "volumeInfo.industryIdentifiers" <~~ data else { | |
// return nil | |
// } | |
// ISBN13 = _ISNB13 | |
guard let _id: String = "id" <~~ data else { | |
return nil | |
} | |
ID = _id | |
guard let _desc: String = "volumeInfo.description" <~~ data else { | |
return nil | |
} | |
desc = _desc | |
guard let _publisher: String = "volumeInfo.publisher" <~~ data else { | |
return nil | |
} | |
publisher = _publisher | |
guard let _publishedDate: String = "volumeInfo.publishedDate" <~~ data else { | |
return nil | |
} | |
publishedDate = _publishedDate | |
guard let _pageCount: Int = "volumeInfo.pageCount" <~~ data else { | |
return nil | |
} | |
pageCount = _pageCount | |
guard let _language: String = "volumeInfo.language" <~~ data else { | |
return nil | |
} | |
language = _language | |
guard let _categories: [String] = "volumeInfo.categories" <~~ data else { | |
return nil | |
} | |
categories = _categories | |
guard let _averageRating: Double = "volumeInfo.averageRating" <~~ data else { | |
return nil | |
} | |
averageRating = _averageRating | |
guard let _previewLink: String = "volumeInfo.previewLink" <~~ data else { | |
return nil | |
} | |
previewLink = _previewLink | |
} | |
} |
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
// | |
// BookViewController.swift | |
// WIMB | |
// | |
// Created by Gil Felot on 09/01/16. | |
// Copyright © 2016 gfelot. All rights reserved. | |
// | |
import UIKit | |
import AVFoundation | |
import Alamofire | |
protocol ScanBookDelegate{ | |
func didScanBook(scannedBook: Book) | |
} | |
class ScanBookViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { | |
var book:Book! | |
var delegate: ScanBookDelegate? | |
var captureSession: AVCaptureSession! | |
var previewLayer: AVCaptureVideoPreviewLayer! | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
view.backgroundColor = UIColor.blackColor() | |
captureSession = AVCaptureSession() | |
let videoCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) | |
let videoInput: AVCaptureDeviceInput | |
do { | |
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice) | |
} catch { | |
return | |
} | |
guard captureSession.canAddInput(videoInput) else { | |
alertPopUp("Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.") | |
captureSession = nil | |
return | |
} | |
captureSession.addInput(videoInput) | |
let metadataOutput = AVCaptureMetadataOutput() | |
guard captureSession.canAddOutput(metadataOutput) else { | |
alertPopUp("Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.") | |
captureSession = nil | |
return | |
} | |
captureSession.addOutput(metadataOutput) | |
metadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue()) | |
metadataOutput.metadataObjectTypes = [AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeEAN13Code] | |
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) | |
previewLayer.frame = view.layer.bounds | |
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill | |
view.layer.addSublayer(previewLayer) | |
captureSession.startRunning() | |
} | |
func alertPopUp(title:String, message:String) { | |
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) | |
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in | |
self.dismissViewControllerAnimated(true, completion: nil) | |
})) | |
self.presentViewController(alert, animated: true, completion: nil) | |
} | |
override func viewWillAppear(animated: Bool) { | |
super.viewWillAppear(animated) | |
if (captureSession?.running == false) { | |
captureSession.startRunning() | |
} | |
} | |
override func viewWillDisappear(animated: Bool) { | |
super.viewWillDisappear(animated) | |
if (captureSession?.running == true) { | |
captureSession.stopRunning() | |
} | |
} | |
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { | |
captureSession.stopRunning() | |
if let metadataObject = metadataObjects.first { | |
let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject | |
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) | |
foundCode(readableObject.stringValue) | |
} | |
dismissViewControllerAnimated(true, completion: nil) | |
} | |
func foundCode(code: String) { | |
let baseURL = "https://www.googleapis.com/books/v1/volumes?q=isbn=" | |
let APIKey = "&key=AIzaSyAFZQ2C65U-wkrX64UK48Q5WbGWXFZ-fKY" | |
let options = "&maxResults=1" | |
let myRequest = baseURL + "\(code)" + options + APIKey | |
// let requestTest = "https://www.googleapis.com/books/v1/volumes?q=isbn=2226319298&maxResults=1&key=AIzaSyCYXCU5syIlrZ9YyLMOrj-b1x6qylR7aQ4" | |
Alamofire.request(.GET, myRequest).responseJSON() { | |
(data) in | |
print("My JSON") | |
print(data) | |
self.book(data) | |
// let bookData = BookFromJSON(json: data) | |
// self.book.fillBook(bookData) | |
} | |
print("URL : \(myRequest)") | |
self.delegate?.didScanBook(book) //Call the delegate method | |
self.navigationController?.popViewControllerAnimated(true) | |
} | |
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { | |
if segue.identifier == "infoFinded" { | |
let bookVC: BookViewController = segue.destinationViewController as! BookViewController | |
bookVC.book = book | |
} | |
} | |
override func prefersStatusBarHidden() -> Bool { | |
return true | |
} | |
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { | |
return .Portrait | |
} | |
} |
func foundCode(code: String) {
let baseURL = "https://www.googleapis.com/books/v1/volumes?q=isbn="
let APIKey = "&key=AIzaSyAFZQ2C65U-wkrX64UK48Q5WbGWXFZ-fKY"
let options = "&maxResults=1"
let myRequest = baseURL + "\(code)" + options + APIKey
// let requestTest = "https://www.googleapis.com/books/v1/volumes?q=isbn=2226319298&maxResults=1&key=AIzaSyCYXCU5syIlrZ9YyLMOrj-b1x6qylR7aQ4"
Alamofire.request(.GET, myRequest).validate().responseJSON(completionHandler: { (response: Response<AnyObject, NSError>) -> Void in
switch response.result {
case .Success(let value):
if let json = value as? [String: AnyObject] {
//Parse ici
print("JSON: \(json)")
self.book = Book(json: json)
guard let _book = self.book else {
print("Error : book = nil")
}
self.delegate?.didScanBook(self.book!) //Call the delegate method
self.navigationController?.popViewControllerAnimated(true)
}
case .Failure(let err):
print("Error: \(err)")
}
})
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
🐒
Remplace la déclaration de la variable ?
TIP : Ensuite pour la requête 🐚
Test la valeur d'erreur, et laisse Alamofire déterminer les erreur en fonction du code avec validate:
C'est avec Result
📟 📦 Parser ton objet: