Ошибка аутентификации API поиска Twitter с использованием oAuth 1.0
Я использую 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()
}