Ошибка аутентификации API поиска Twitter с использованием oAuth 1.0 - PullRequest
0 голосов
/ 18 января 2019

Я использую API поиска в Твиттере для получения последних твитов на основе ключевых слов, введенных пользователем, в ответе появляется следующая ошибка,

 {"errors":[{"code":215,"message":"Bad Authentication data."}]}

Я следовал этому и этому для следования протоколу oAuth. Пожалуйста, укажите мне, где я делаю неправильно.

У меня проблема с аутентификацией заголовка для API с использованием oAuth 1.0

func getRecentTweets(query : String)
{

    // The below are the oAuth Parameters for header
    let timeStamp = Date().toMillis()
    let oauthNonce = Utils.randomString(length: 32)
    let urlEncodedQuery = query.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? ""
    var paramterString = "q=\(urlEncodedQuery)&result_type=recent&lang=en&oauth_consumer_key=\(oauthConsumerKey)&oauth_nonce=\(oauthNonce )&oauth_timestamp=\(timeStamp ?? 0)&oauth_token=\(oauthToken)&oauth_version=\(oauthVersion)"

    paramterString = paramterString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? ""
    var baseUrl = "https://api.twitter.com/1.1/search/tweets.json"
    baseUrl = baseUrl.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? ""
    let signature_base_string = "GET&\(baseUrl)&\(paramterString)"
    let consumerSecretEncoded = oauthConsumerSecret.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? ""
    let tokenSecretEncoded = oauthAccessSecret.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? ""
    let signing_key = "\(consumerSecretEncoded)&\(tokenSecretEncoded)"

    let oauthSignature = signature_base_string.hmac(key: signing_key)



    let headers = [
        "Authorization": "OAuth oauth_consumer_key=\"\(oauthConsumerKey)\",oauth_token=\"\(oauthToken)\",oauth_signature_method=\"\(oauthSignatureMethod)\",oauth_timestamp=\"\(timeStamp ?? 0)\",oauth_nonce=\"\(oauthNonce )\",oauth_version=\"\(oauthVersion)\",oauth_signature=\"\(oauthSignature)\""
    ]

    let request = NSMutableURLRequest(url: NSURL(string: "https://api.twitter.com/1.1/search/tweets.json?q=\(urlEncodedQuery)&result_type=recent&lang=en")! as URL)

    request.httpMethod = "GET"
    request.allHTTPHeaderFields = headers
    let session = URLSession.shared
    let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
        if (error != nil) {

        } else {
            self.parseData(data)
        }
    })

    dataTask.resume()
}
...