Created
October 26, 2016 13:41
-
-
Save non117/5676d1fcf3bab869d1af269098f00df1 to your computer and use it in GitHub Desktop.
OCRくん
This file contains hidden or 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
// | |
// OCRClient.swift | |
// ReceiptManager | |
// | |
// Created by non on 2016/10/10. | |
// Copyright © 2016年 non. All rights reserved. | |
// | |
import Foundation | |
import Alamofire | |
public class OCRClient { | |
let HOST = "https://vision.googleapis.com" | |
let ANNOTATE_API = "/v1/images:annotate" | |
var api_key: String | |
init(api_key: String){ | |
self.api_key = api_key | |
} | |
// MARK: - main request method | |
func annotate(image: Data) -> AnnotatedResponse? { | |
let parameters: Parameters = [ | |
"requests": [ | |
"image": [ | |
"content": image.base64EncodedString() | |
], | |
"features": [ | |
[ | |
"type": "TEXT_DETECTION", | |
"maxResults": 2 | |
] | |
] | |
] | |
] | |
let url = HOST + ANNOTATE_API + "?key=" + api_key | |
var annotatedResonse: AnnotatedResponse? | |
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).validate().responseJSON { | |
response in | |
print(response) | |
if let json = response.result.value { | |
annotatedResonse = try? AnnotatedResponse.decodeValue(json) | |
} | |
} | |
return annotatedResonse | |
} | |
// MARK: - convenience request | |
func annotate(imagePath: URL) -> AnnotatedResponse? { | |
let image = try! Data.init(contentsOf: imagePath) | |
return annotate(image: image) | |
} | |
} |
NSURLSession
の簡単な話をすると、NSURL
を放り込むと色々と OS がキューイングとか QoS とかややこしいことを肩代わりしてレスポンスを返してくれるよ、ってやつで、 iOS では 7 以降から、 macOS では 10.9 以降から使えるようになったもの。
それまで古代人達は NSURLRequest
ってやつを使って、それに NSURL
を放り込んでた。
NSURLSession
になってややこしいことを割と OS 側に投げられるようになってみんなハッピーになったという過去がある。
んで、 NSURLSession
や NSURLRequest
は別に HTTP に限定されてなくて、バイナリとかも放り投げられるしソケット通信も出来る(はず、あまり使わないから忘れた)。
現代人は概ね HTTPS による通信で安全にテキストをやり取りするだろうから、古代人のようにバイナリをソケット通信で投げ合うなんて野蛮なことはしないので、NSURLSession
の中の http
や ssl
に関する一部の機能が上手く使えれば良い、という気持ちでドキュメントを読むとすんなり理解出来そうな気はする
ネットワークライブラリ使わずに自作ネットワークライブラリつくって自分で脆弱性つくり込むより、メンテナンスされたライブラリ使った方がいいとも思いますけどね
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
厳しい。。。
この程度の規模のAPIなら題材としても楽だし、今コスト払って公式ライブラリ使えるようになっていたほうが良さそうだね。