プログラミングは初心者。
現在書籍のバーコードを読み取って書籍の情報(タイトル・著者名・本の画像・あらすじ)を取得する機能の実装に挑戦しています。
GoogleのAPIを使って、JSONデータを取得し、その中から情報を取り出そうとしているのですが、情報が入っているはずなのに、コンソールで確認するとnilと返って来てしまいます。
swift
1import UIKit 2import AVFoundation 3 4class CodeReaderVC: UIViewController, AVCaptureMetadataOutputObjectsDelegate { 5 6 private let session = AVCaptureSession() 7var itemInfo: [[String: Any]] = [] 8 9//ここまでにカメラでバーコードを読み取る処理を記述 10 11var isbnCode: String = "" 12 13 func metadataOutput(_ output:AVCaptureMetadataOutput, didOutput metadataObjects:[AVMetadataObject],from connection: AVCaptureConnection){ 14 for metadata in metadataObjects as! [AVMetadataMachineReadableCodeObject]{ 15 if metadata.stringValue == nil{ 16 continue 17 } 18 19 print(metadata.type) 20 print(metadata.stringValue!) 21 22 self.isbnCode = "(metadata.stringValue!)" 23 print(isbnCode) 24 let alert: UIAlertController = UIAlertController(title: "バーコードを取得しました", message: metadata.stringValue,preferredStyle: UIAlertController.Style.alert) 25 26 let cancel: UIAlertAction = UIAlertAction(title:"OK", style: UIAlertAction.Style.cancel, handler: nil) 27 alert.addAction(cancel) 28 present(alert,animated: true,completion: nil) 29 } 30 31 print(isbnCode) 32 33 let sturl = ("https://www.googleapis.com/books/v1/volumes?q=9784087455915") 34 print(sturl) 35 let url = URL(string: sturl)! 36 let task: URLSessionTask = URLSession.shared.dataTask(with: url, completionHandler: { data, response, error in 37 do { 38 39 let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any] 40 41 let items = json["items"] as? [Any] 42 let itemsfirst = items?[0] as? [String: Any] 43 print(String(describing: itemsfirst)) 44 45 let volumeInfo = itemsfirst?["volumeInfo"] as? [String: Any] 46 //現在ここからとnilの結果が帰ってきます 47 print("volumeInfo: (String(describing: volumeInfo))") 48 49 //volumeInfoの中からタイトル・著者名・あらすじを取り出したい 50 let title = volumeInfo?["title"] as? [String: Any] 51 let authors = volumeInfo?["authors"] as? [String: Any] 52 let description = volumeInfo?["description"] as? [String: Any] 53 54 print(String(describing: title)) 55 56 //volumeInfoの中からthumbnailを取り出したい 57 let imageLinks = volumeInfo?["imageLinks"] as? [String: Any] 58 let thumbnail = imageLinks?["thumbnail"] as? [String: Any] 59 print(String(describing: thumbnail)) 60 61 //取り出した3つの要素を配列に入れたい 62 let itemInfoArray = [title, authors, description] as? [[String: Any]] 63 print(String(describing: itemInfoArray)) 64 65 }catch{ 66 print("error") 67 } 68 }) 69 task.resume() 70 71 } 72
さまざまな書籍のバーコードを読み取って試してみましたがそのそのどれもnilという結果が返って来ました。
エラー文も出ていないので何が原因が検討がつきません。
どのようにしたら入っているものを取れるようになるのか、教えてくださると嬉しいです。
作業環境
MacOS High Sierra バージョン10.13.6
メモリ8GB
Xcode10.1
Swift4.2.1
現在キャリア契約の切れたiPhone5s(iOS10.3.3) Deployment Target10.3に設定してWi-Fiで繋いで実機テストしています。
重ねてよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/01/16 09:00
2019/01/16 09:07
退会済みユーザー
2019/01/16 09:22
退会済みユーザー
2019/01/16 09:44
2019/01/16 09:47 編集
退会済みユーザー
2019/01/16 10:51
2019/01/17 00:11