2017-02-21 9 views
2

Я пытаюсь подключить свое приложение к API Twitter. Я не уверен, но я думаю, что моя проблема исходит от oauth_signature. Итак, я прочитал эту документацию: https://dev.twitter.com/oauth/overview/creating-signaturesRoR Twitter API oAuth: «Не удалось аутентифицировать вас».

Я думаю, что я сделал все так, как они говорят, но это не работает, и у меня нет никаких подсказок, почему.

Вот мой код:

def build_url_api(parameters, token, account, secret_token) 
 
    consumer_key = 'xxx' 
 
    secret_consumer_key = 'xxx' 
 

 
    oauth_consumer_key = consumer_key 
 
    oauth_signature_method = "HMAC-SHA1" 
 
    oauth_timestamp = Time.zone.now.to_i.to_s 
 
    oauth_nonce = Digest::SHA256.hexdigest(oauth_timestamp)[0..16] 
 
    oauth_version = "1.0" 
 
    oauth_token = token 
 
    url = 'https://api.twitter.com/1.1/statuses/user_timeline.json' 
 

 
    parameters = 'oauth_consumer_key=' + 
 
    oauth_consumer_key + 
 
    '&oauth_nonce=' + 
 
    oauth_nonce + 
 
    '&oauth_signature_method=' + 
 
    oauth_signature_method + 
 
    '&oauth_timestamp=' + 
 
    oauth_timestamp + 
 
    '&oauth_token=' + 
 
    oauth_token + 
 
    '&oauth_version=' + 
 
    oauth_version 
 

 
    base_string = 'GET&' + CGI.escape(url) + '&' + CGI.escape(parameters) 
 
    secret_key = secret_consumer_key + '&' +secret_token 
 
    oauth_signature = CGI.escape(Base64.encode64("#{OpenSSL::HMAC.digest('sha1',secret_key, base_string)}").chomp) 
 
    url = url + '?' + parameters + '&oauth_signature=' + oauth_signature 
 
end

Exemple из URL я созданный благодаря моему коду:

https://api.twitter.com/1.1/statuses/user_timeline.json?oauth_consumer_key=xxx&oauth_nonce=4f8f5638b6aa6e132&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1487703144&oauth_token=15028214-zk3HGlrA7zYOv2DGasrL9MJMXNqFsk1g6q4TEOS9V&oauth_version=1.0&oauth_signature=iNVkhyCCFBXP2He6LfCFL0ukwxQ%3D

Заранее спасибо для любой, кто может дать мне идею!

PS: конечно я заменить здесь CONSUMER_KEY и secret_key ти «ххх»

ответ

0

Позор на меня я нашел решение:

Я просто был старый CONSUMER_KEY.

Мой пример кода хорошо работает.

0

параметры OAuth имеют имена, как oauth_* и отличаются от параметров URL. Вам необходимо отправить их в HTTP-заголовок Authorization, а не в строку запроса в URL-адресе. Формат значения заголовка авторизации выглядит так: OAuth pe_name1="pe_value1", pe_name2="pe_value2",… pe_name_last="pe_value_last". Здесь pe_ означает процентов закодировано.

Также обратите внимание, что в общем случае вам необходимо также использовать фактические URL-адреса для генерации базовой строки. В противном случае он будет производить неправильную подпись для запросов с параметрами URL (например, count=39).

+0

Спасибо за ответ, на самом деле я использовал два источника информации: https://dev.twitter.com/oauth/overview/authorizing-requests и https://dev.twitter.com/rest/tools/ консоль Благодаря консоли апи я удается создать URL, как этот https://api.twitter.com/1.1/statuses/mentions_timeline.json?oauth_consumer_key=xxx&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1487711170&oauth_nonce=720447845&oauth_version=1.0&oauth_token= 15028214-5IY5DII03nc5THEeZSuVFnqHIkA9iJoIG0p96w3xG & oauth_signature = CP2ZXQmdTLCBF82hbo6r% 2BwAENAw% 3D Это хорошо работает, не создавая ничего в заголовке. – Katagena