zveropasen
@zveropasen
Начинающий программист

Как заставить работать API Upwork?

Здравствуйте,
Появилась необходимость получения необходимой информации с аккаунта Upwork. Пройдя по ссылкам, наткнулся на API UPwork https://developers.upwork.com/?lang=ruby#getting-s... Далее выбрав нужную мне версию (язык Ruby), скачал, установил необходимые gems и попробовал запустить пример myapp.rb, указав в нем заведомо известные мне 'consumer_key' и 'consumer_secret'. В результате работы скрипта меня отправили по ссылке для проведения авторизации нового устройства, которая завершилась успешно.
На этом этапе и возникли проблемы.
1) После авторизации нового устройства, на вкладке https://www.upwork.com/UserSettings/linked-accounts выяснилось, что ничего там нету.
2) После включения параметра debug в config исходного кода, в логе выявился ряд исключений:
  • Exception `OpenSSL::SSL::SSLErrorWaitReadable' at C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/openssl/buffering.rb:182 - read would block
  • Exception `OAuth::Unauthorized' at C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/oauth-0.5.1/lib/oauth/consumer.rb:217 - 401 Unauthorized

Обратившись на форум Upwork меня отправили писать письмо в тех поддержку Upwork, ответ которой был в духе "все должно работать, вся проблемы в openssl, вас необходимо настроить свою систему". Не совсем ясно, что конкретно настраивать. Использовал я RubyInstaller, подразумевавшийся, изначально, готовым к использованию.
Код примера я не много уменьшил (ошибки были по каждому запросу).
Возможно, кто-то уже сталкивался с этим. Поиск по гуглу результатов не принес. Многократное прочтение документации тоже. Ниже приведу исходный код и лог. Заранее спасибо.

Исходный код:
#!/usr/bin/ruby

$:.unshift '../lib'

$LOAD_PATH << File.dirname(__FILE__)

require 'upwork/api'
require 'upwork/api/routers/auth'
require 'upwork/api/routers/mc'
require 'upwork/api/routers/reports/time'
require 'upwork/api/routers/freelancers/search'
require 'pry'

# initiate config
config = Upwork::Api::Config.new({
  'consumer_key'    => '98993*****',
  'consumer_secret' => 'daddf*****',
  #'access_token'    => 'cb0d5******',# assign if known
  #'access_secret'   => '27538*******',# assign if known
  'debug'           => true #false
})
# setup client
client = Upwork::Api::Client.new(config)
# run authorization in case we haven't done it yet
# and do not have an access token-secret pair
if !config.access_token and !config.access_secret
  authz_url = client.get_authorization_url

  puts "Visit the authorization url and provide oauth_verifier for further authorization"
  puts authz_url
  verifier = gets.strip
  puts verifier
  @token = client.get_access_token(verifier)
  # store access token data in safe place!
end
# get my auth data
auth = Upwork::Api::Routers::Auth.new(client)
info = auth.get_user_info


Лог:
$ ruby myapp.rb
Exception `OpenSSL::SSL::SSLErrorWaitReadable' at C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/openssl/buffering.rb:182 - read would block
> initializing client
> requesting autorization token
> got request token pair
<< dump-begin >>
#<OAuth::RequestToken:0x3097350 @token="****", @secret="****", @consumer=#<OAuth::Consumer:0x302a240 @key="****", @secret="****", @options={:signature_method=>nil, :request_token_path=>"/api/auth/v1/oauth/token/request", :authorize_path=>"/services/api/auth", :access_token_path=>"/api/auth/v1/oauth/token/access", :proxy=>nil, :scheme=>:header, :http_method=>:post, :oauth_version=>"1.0", :site=>"https://www.upwork.com"}, @http_method=:post, @http=#<Net::HTTP www.upwork.com:443 open=false>>, @params={:oauth_callback_confirmed=>"true", "oauth_callback_confirmed"=>"true", :oauth_token=>"****", "oauth_token"=>"****", :oauth_token_secret=>"****", "oauth_token_secret"=>"****"}>
<< dump-end >>
> building authorization url, which is
<< dump-begin >>
"https://www.upwork.com/services/api/auth?oauth_token=****"

Exception `OpenSSL::SSL::SSLErrorWaitReadable' at C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/openssl/buffering.rb:182 - read would block
Exception `OAuth::Unauthorized' at C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/oauth-0.5.1/lib/oauth/consumer.rb:217 - 401 Unauthorized
C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/oauth-0.5.1/lib/oauth/consumer.rb:217:in `token_request': 401 Unauthorized (OAuth::Unauthorized)
        from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/oauth-0.5.1/lib/oauth/tokens/request_token.rb:20:in `get_access_token'
        from C:/RailsProject/ruby-upwork/lib/upwork/api/client.rb:67:in `get_access_token'
        from myapp.rb:33:in `<main>'
<< dump-end >>
Visit the authorization url and provide oauth_verifier for further authorization
https://www.upwork.com/services/api/auth?oauth_token=****
> getting access token pair


Владимир.
  • Вопрос задан
  • 2564 просмотра
Пригласить эксперта
Ответы на вопрос 3
b0nn1e
@b0nn1e
Alcohol & Ruby on Rails
Если я всё правильно понял, то вам нужно всего-лишь перейти по ссылке которая в последнем абзаце, а потом попробовать запустить заного скрипт.
Ответ написан
opium
@opium
Просто люблю качественно работать
так у вас написано все в оши бке если не можете сами перевести сходите в гугл транслейт
Ответ написан
@mirosas
У вас проблема мне кажется не с Апворк, а с чтением данных по протоколу https. Попробуйте прочитать любой https сайт и сохранить то, что прочитали.

Проблема решается правильной настройкой сервера. х.з. как, но как-то решал как-то давно для другой программной платформы, не руби.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы