Могу ли я получить Instagram access_token в задаче rake rails?

Я хотел бы использовать жемчужину Instagram в рейк-задаче, которая запускается один раз в день, чтобы получать последние сообщения с определенным хэш-тегом.

При просмотре документации API Instagram вам нужен access_token, чтобы делать что-либо значимое.

В документации приведен пример использования curl для получения access_token, и мне интересно, как бы я перевел этот пример на ruby, чтобы, если в моем приложении rails еще нет токена, я мог получить его таким образом.

Вот пример curl, приведенный на следующей странице Instagram API.

    curl \-F 'client_id=CLIENT-ID' \
    -F 'client_secret=CLIENT-SECRET' \
    -F 'grant_type=authorization_code' \
    -F 'redirect_uri=YOUR-REDIRECT-URI' \
    -F 'code=CODE' \https://api.instagram.com/oauth/access_token

If successful, this call will return a neatly packaged OAuth Token that you can use to make authenticated calls to the API. We also include the user who just authenticated for your convenience:

{
    "access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d",
    "user": {
        "id": "1574083",
        "username": "snoopdogg",
        "full_name": "Snoop Dogg",
        "profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_1574083_75sq_1295469061.jpg"
    }
}

Я думал, что могу использовать что-то вроде URI.parse(), а затем open() в uri, но, похоже, это не помогает. Я получаю 404, когда пытаюсь это сделать.


person mattwallace    schedule 25.07.2012    source источник


Ответы (1)


Я считаю, что проблема зависит от используемого HTTP-глагола. Я полагаю, что open сделает запрос, используя GET, в то время как пример с curl отправляет значения POST.

У меня нет учетных данных API для Instagram, поэтому я не могу проверить это, но я полагаю, что если вы попытаетесь использовать Net::HTTPSession, в частности метод post_form, вам может повезти.

Что-то вроде:

require 'net/http'
require 'uri'

form_data = {
  'client_id' => 'CLIENT-ID',
  'client_secret' => 'CLIENT-SECRET',
  'grant_type' => 'authorization_code',
  'redirect_uri' => 'YOUR-REDIRECT-URI',
  'code' => 'CODE'
}

uri = URI('https://api.instagram.com/oauth/access_token')
res = Net::HTTP.post_form(uri, form_data)

puts res

В качестве альтернативы вы можете попробовать что-то вроде https://github.com/jnunemaker/httparty, чтобы позвонить.

person Nathan Fritz    schedule 25.07.2012
comment
Если я запускаю ваш пример в консоли rails, я получаю EOFError: конец файла достигнут из /Users/mwallace/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/protocol.rb :135:в `read_nonblock' - person mattwallace; 26.07.2012
comment
На самом деле URI () должен быть URI.parse (), я думаю, и если я это сделаю, я получаю следующую ошибку в консоли. Соединение сбрасывается одноранговым узлом - person mattwallace; 27.07.2012