/instagram

social media instagram

Apache License 2.0Apache-2.0

instagram

i will need the fallower in social media instagram and i will verfiy my compte require 'faraday_middleware' require 'hashie/mash'

module Instagram module Configuration attr_accessor :client_id, :client_secret, :access_token, :cache

def configure
  yield self
end

end

class OAuthRequest < Faraday::Middleware def initialize(app, options) super(app) @config = options[:config] end

def call(env)
  unless env[:request][:oauth] == false
    params = %w[client_id client_secret access_token].each_with_object({}) do |key, hash|
      value = @config.send(key)
      hash[key] = value if value.present?
    end
    if env[:method] == :get
      url = env[:url]
      query_values = params.update Faraday::Utils.parse_query(url.query.to_s)
      url.query = Faraday::Utils.build_query query_values
      env[:url] = url
    else
      env[:body] = params.update(env[:body] || {})
    end
  end
  @app.call(env)
end

end

class PreserveRawBody < Faraday::Response::Middleware def on_complete(env) env[:raw_body] = env[:body] end end

module Connection def connection @connection ||= Faraday.new('https://api.instagram.com/v1/') do |conn| conn.use OAuthRequest, config: self conn.request :url_encoded conn.response :mashify conn.response :json, content_type: 'application/json' conn.use PreserveRawBody conn.response :caching, cache, ignore_params: %w[access_token client_id client_secret] unless cache.nil? conn.use :instrumentation conn.adapter Faraday.default_adapter

    conn.headers['User-Agent'] = 'instagram.heroku.com ruby client'
    conn.options[:timeout] = 6
    conn.options[:open_timeout] = 2
  end
end

def get(path, params = nil)
  connection.get(path) do |request|
    request.params.update(params) if params
  end
end

end

module OAuthMethods def authorization_url(options) connection.build_url '/oauth/authorize', client_id: client_id, redirect_uri: options[:return_to], response_type: 'code' end

def get_access_token(options)
  connection.post '/oauth/access_token', code: options[:code],
    grant_type: 'authorization_code', redirect_uri: options[:return_to]
end

end

class Error < RuntimeError attr_reader :response def initialize(response) @response = response super "Instagram responded with status #{response.status}" end end

module ApiMethods def get(path, params = nil) raw = params && params.delete(:raw) response = super raise Error.new(response) if response.status >= 500 body = raw ? response.env[:raw_body] : response.body body.singleton_class.class_eval <<-RUBY def body() self end def status() #{response.status} end def error!() raise Instagram::Error.new(self) end RUBY body end

def user(user_id, *args)
  get("users/#{user_id}", *args)
end

def user_recent_media(user_id, *args)
  get("users/#{user_id}/media/recent", *args)
end

def media_popular(*args)
  get("media/popular", *args)
end

def tag_search(query, params = {})
  get("tags/search", params.merge(:q => query))
end

def tag_recent_media(tag, *args)
  get("tags/#{tag}/media/recent", *args)
end

end

extend Configuration extend Connection extend OAuthMethods extend ApiMethods end