5 // Created by Hori,Masaki on 2017/01/20.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 fileprivate extension Data {
12 var utf8String: String? { return String(data: self, encoding: .utf8) }
14 fileprivate extension Dictionary {
15 func apended(_ keyValue: (Key, Value) ) -> Dictionary {
17 dict[keyValue.0] = keyValue.1
22 fileprivate func splitJSON(_ data: Data) -> Data? {
23 let prefix = "svdata="
24 guard let string = data.utf8String,
25 let range = string.range(of: prefix)
27 print("data is wrong")
30 return string[range.upperBound..<string.endIndex].data(using: .utf8)
32 fileprivate func parseJSON(_ data: Data?) -> [String: Any]? {
33 guard let data = data,
34 let j = try? JSONSerialization.jsonObject(with: data, options: [.allowFragments]),
35 let json = j as? [String: Any]
40 fileprivate func parseParameter(_ request: URLRequest) -> [String: String]? {
44 .removingPercentEncoding?
45 .components(separatedBy: "&")
46 .map { $0.components(separatedBy: "=") }
47 .filter { $0.count == 2 }
48 .map { ($0[0], $0[1]) }
49 .reduce([String: String]()) { $0.apended($1) }
54 let parameter: [String: String]
55 let json: [String: Any]
58 if let r = json["api_result"] as? Int { return r == 1 }
62 init?(request: URLRequest, data: Data) {
65 guard let json = parseJSON(splitJSON(data))
67 print("Can not parse JSON")
72 guard let parameter = parseParameter(request)
74 print("Can not parse Parameter")
77 self.parameter = parameter
79 guard let api = request.url?.path
81 print("URLRequest is wrong")