Forum: Italian Ruby user group Script Instagram API da Shell

Posted by Alberto Bissacco (albyb)
on 2013-03-01 17:20
Attachment: instagram_from_shell.txt (1,91 KB)
Ciao ragazzi, sto provando a utilizzare le API di Instagram per fare uno
script che funzioni solo da shell.
Sto incontrando due problemi:

1) Non riesco/non so come fare una chiamata ad un url leggere un URL di
risposta da dove mi ricavo il "code" e per poi ottenere il token
2) Non riesco a capire dove sbaglio per ottenere la lista degli userd id
di chi seguo (follow) su instagram.

Di seguito vi copio il codice:


# instagram_from_shell.rb  ------------------------------------------

require 'oauth2'
require "instagram"

puts "Write your CONSUMER KEY:"
@consumer_key = gets.strip
puts "Write your CONSUMER SECRET:"
@consumer_secret = #gets.strip

CALLBACK_URL = "http://localhost:9393/oauth/callback"

client = OAuth2::Client.new(@consumer_key, @consumer_secret, {
      :site => "http://instagram.com/",
      :request_token_path => "/oauth/request_token",
      :access_token_path  => "/oauth/access_token",
      :authorize_path     => "/oauth/authenticate?response_type=code",})

# ??????????????????????????????????????????
# Come e dove inserisco le credenziali (username e psw) per accedere al
servizio e autorizzare l'app?
# ???????????????????????????????????????????

# autorizzare l'app
uri = client.auth_code.authorize_url(:redirect_uri => CALLBACK_URL)

# ??????????????????????????????????????????
# Come faccio a leggere l'url di risposta con il "code"?
# ???????????????????????????????????????????

# estrapolo il "code" dall' url
uri =
URI("http://localhost:9393/oauth/callback?code=xxxxxxxx...)
code = uri.query.split("=").last

# ??????????????????????????????????????????
# con il "code" devo chiedere il token e qui NON ho trovato il modo per
avercelo
# @access_token = client.auth_code.get_token(code, :redirect_uri =>
CALLBACK_URL )) #non corretto
# ??????????????????????????????????????????

Instagram.configure do |config|
  config.client_id = @consumer_key
  config.client_secret = @consumer_secret
  config.access_token = @access_token
end


 # Funzione/metodo
def get_followers_id

  following_ids = []
  next_cursor = 0

  while next_cursor
    page = Instagram.user_follows(:cursor => next_cursor).each do |user|
      following_ids << user.id
    end
    puts "valore next_cursor = #{page.pagination.next_cursor} , n° id
presenti = #{page.count} e #{following_ids.count} id salvati"
    next_cursor = page.pagination.next_cursor
  end

  puts("saved #{following_ids.count} users id")

end

#  --------------------------------------------------------------

Se faccio partire la funzione/metodo la console mi da questo risultato

valore next_cursor = 1356908804645 , n id presenti = 50 e 50 id salvati
valore next_cursor = 1353145392700 , n id presenti = 50 e 100 id salvati
valore next_cursor = 1347420191755 , n id presenti = 49 e 149 id salvati
valore next_cursor = 1330765947348 , n id presenti = 29 e 178 id salvati
valore next_cursor = 1311898349798 , n id presenti = 4 e 182 id salvati
valore next_cursor = 1299688462476 , n id presenti = 25 e 207 id salvati
valore next_cursor =  , n id presenti = 17 e 224 id salvati

Non riesco a capire perchè:
1) Io su Instagram seguo 321 utenti, invece qui me ne da solo 224 tot.
2)  perchè a volte le pagine sono composte da 50 risultati mentre alcune
ne hanno di meno (addirittura 4)

Avete mai usato le API di Instagram? Anche a voi avete notato questa
cosa?
Grazie in anticipo

Alberto (@albybisy)
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.