Я делаю почтовый запрос, где я хочу ввести вопрос и с почтовым запросом получить наиболее распространенный ответ - PullRequest
0 голосов
/ 19 апреля 2019

Я выполнил свой пост-запрос, но не уверен, как сделать возможным отправить полный вопрос и получить наиболее распространенные ответы обратно в мое приложение.

Мне очень нужен этот код в моей программе, поэтому я хотел бы получить несколько примеров, как заставить его работать

Попытались исправить вопрос в параметрах с помощью знака "+" вместо пробела, который ни к чему не привел.

 @IBAction func GetAnswer(_ sender: Any) {

        let myUrl = URL(string: "http://www.google.com/search?q=");

        var request = URLRequest(url:myUrl!)

        request.httpMethod = "POST"

        let postString = questionAsked;
        request.httpBody = postString.data(using: String.Encoding.utf8);
        let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in

            if error != nil
            {

                print("error=\(String(describing: error))")
                return
            }
            print("response = \(String(describing: response))")
            do {
                let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
                if let parseJSON = json {
                    let answer = parseJSON[" Answer "] as? String
                    self.AnswerView.text = ("Anwer: \(String(describing: answer))")
                }
            } catch {
                print(error)
            }
        }
        task.resume()
    }

1 Ответ

0 голосов
/ 20 апреля 2019

Вы не используете google.com/search, пожалуйста, проверьте документацию API

Вставьте после в Playground, должно дать хорошее начало

struct Constants {
    static let apiKey = "YOUR_API_KEY"
    static let bundleId = "YOUR_IOS_APP_BUNDLE_ID"
    static let searchEngineId = "YOUR_SEARCH_ENGINE_ID"
}

func googleSearch(term: String, callback:@escaping ([(title: String, url: String)]?) -> Void) {
    let urlString = String(format: "https://www.googleapis.com/customsearch/v1?q=%@&cx=%@&key=%@", term, Constants.searchEngineId, Constants.apiKey)
    let encodedUrl = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

    guard let url = URL(string: encodedUrl ?? urlString) else {
        print("invalid url \(urlString)")
        return
    }

    let request = NSMutableURLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10)
    request.httpMethod = "GET"
    request.setValue(Constants.bundleId, forHTTPHeaderField: "X-Ios-Bundle-Identifier")

    let session = URLSession.shared
    let datatask = session.dataTask(with: request as URLRequest) { (data, response, error) in
        guard
            error == nil,
            let data = data,
            let json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String : Any]
        else {
            // error handing here
            callback(nil)
            return
        }

        guard let items = json["items"] as? [[String : Any]], items.count > 0 else {
            print("no results")
            return
        }

        callback(items.map { ($0["title"] as! String, $0["formattedUrl"] as! String) })
    }

    datatask.resume()
}

Использование

googleSearch(term: "George Bush") { results in
    print(results ?? [])
}

Создать новую поисковую систему, используя следующий URL

https://cse.google.com/cse/create/new

Если вы хотите выполнить поиск по всей сети, выполните следующие действия

  1. отредактируйте свой двигатель, используя https://cse.google.com/cse/setup/basic?cx=SEARCH_ENGINE_ID
  2. удалить все страницы, перечисленные в Сайты для поиска
  3. включить Искать во всем Интернете
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...