Instagram API authentification Rails 2017请求access_token

时间:2017-05-18 17:46:56

标签: ruby-on-rails json instagram instagram-api

如何从网址下载数据而不会重定向到网址?

我已设法使用以下代码从Instagram API获取验证:

  1. 用户单击该按钮并登录Instagram登录页面。
  2. 用户被重定向到我的网址
  3. 由于网址中的代码参数,会触发一些javascript以将包含数据的表单提交给api
  4. 我使用json数据重定向到instagram api
  5. 这会将我重定向到带有Json数据的instagram api,但我不确定如何使用/下载信息。

    我确信这不是最好的方法,但我尝试过很多东西,这是我能让它发挥作用的唯一方法。

     <a href=<%="https://api.instagram.com/oauth/authorize/?client_id=#{ENV['CLIENT_ID']}&redirect_uri=http://localhost:3000/edit&response_type=code"%>>Link my instagram account</a>
                <% if params[:code] %>
                <form id="target" method="post" action="https://api.instagram.com/oauth/access_token">
                  <div>
                    <input type="text" name="client_id" value=<%= ENV['CLIENT_ID']%> hidden="true">
                    <input type="text" name="client_secret" value=<%= ENV['CLIENT_SECRET']%> hidden="true">
                    <input type="text" name="grant_type" value="authorization_code" hidden="true">
                    <input type="text" name="redirect_uri" value="http://localhost:3000/edit" hidden="true">
                    <input type="text" name="code" value=<%= params[:code]%> hidden="true" >
                  </div>
                </form>
                <% end %>
    

1 个答案:

答案 0 :(得分:1)

我确实使用了以下代码:

首先,您需要此请求才能获得第一个代码:

https://api.instagram.com/oauth/authorize/?client_id=#{ENV['CLIENT_ID']}&redirect_uri=http://localhost:3000&response_type=code

然后使用以下发布请求中的代码获取访问令牌和数据:

result = HTTParty.post("https://api.instagram.com/oauth/access_token",
  {
    :body =>  { "client_id" => ENV['CLIENT_ID'], "client_secret" => ENV['CLIENT_SECRET'],
    "grant_type" => "authorization_code",
    "redirect_uri" => 'http://localhost:3000', "code" => session[:code] },
    :headers => { 'Content-Type' => 'application/x-www-form-urlencoded', 'Accept' => 'application/json'}
  })

要查找用户ID,只需添加以下内容:

result.parsed_response["user"]["id"]

希望这会对某人有所帮助。我花了一些时间来理解这些请求是如何起作用的。