缺少client_id或access_token URL参数。 (InstagramApi :: BadRequest)

时间:2019-06-06 20:55:29

标签: ruby api rubygems access-token instagram-api

我的代码返回InstagramApi :: BadRequest我的客户ID并获得令牌的权限!我希望通过网站和正常流程来对令牌进行认证!

require 'instagram_api_client'
require 'dotenv'

Dotenv.load
def login_insta

    client.new = InstagramApi.config do |config|
        config.access_token = ENV["INSTA_ACCESS_TOKEN"]
        config.client_id = ENV["INSTA_CLIENT_ID"]
        config.client_secret = ENV["INSTA_CLIENT_SECRET"]
    end
    return client
end

def auto_follow_test
    #ary = Array.new

      search_user = InstagramApi.user.search('75')

    #ary << search


   # puts ary[0]
   return search_user
end

auto_follow_test

Traceback (most recent call last):
        4: from lib/app.rb:28:in `<main>'
        3: from lib/app.rb:19:in `auto_follow_test'
        2: from /home/mhd/.rvm/gems/ruby-2.5.1/gems/instagram_api_client-0.2.1/lib/instagram_api/common.rb:10:in `search'
        1: from /home/mhd/.rvm/gems/ruby-2.5.1/gems/instagram_api_client-0.2.1/lib/instagram_api/client.rb:37:in `make_request'
/home/mhd/.rvm/gems/ruby-2.5.1/gems/instagram_api_client-0.2.1/lib/instagram_api/client.rb:53:in `parse_failed': Missing client_id or access_token URL parameter. (InstagramApi::BadRequest)

1 个答案:

答案 0 :(得分:0)

您的代码示例有点混乱:

  1. 您定义了方法login_insta来配置凭据,但是您从未调用该方法来运行配置。

  2. 如果您确实调用了login_insta,则由于调用client.new仍然无法正常工作,这在您的代码示例中没有解释,并且违反了the instructions from the gem author配置凭据。

在这种情况下,将代码简化为minimal, complete, verifiable example可能会解决问题:

require 'instagram_api_client'
require 'dotenv'

Dotenv.load

# Set the global configuration for the gem per the instructions at:
# https://github.com/agilie/instagram_api_gem#usage
InstagramApi.config do |config|
  config.access_token = ENV["INSTA_ACCESS_TOKEN"]
  config.client_id = ENV["INSTA_CLIENT_ID"]
  config.client_secret = ENV["INSTA_CLIENT_SECRET"]
end

InstagramApi.user.search('75')

由于我没有Instagram API访问权限,因此我无法独立验证是否可以解决此问题,但是鉴于自述文件中关于gem的说明,这应该是解决方案。

当您将此解决方案合并到您的代码中时,只需确保对InstagramApi.config的调用仅运行一次且在进行任何API调用之前即可。它不需要包装在方法调用中。 (并且不应该,因为它只需要运行一次,并且在运行一次之后,它将在Ruby进程的整个生命周期内保持有效)