読者です 読者をやめる 読者になる 読者になる

めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

instagram の API を Ruby で使ってみました

instagram の APIRuby で使ってみました。

登録が必要

instagram の API を使うには、instagram に登録することが必要です。
これが、なんだか、ちょっと面倒なんですけれど、上手く書けない…。

認証の基本は、OAuth

認証の基本は、OAuth です。ですが、投稿したりする以外は、認証がなくても使えるようです。人気のある写真とか、場所を指定して写真取得などは、認証がなくても使えます。なので、JavaScript でも、情報取得するような処理であれば、気になるところはあるものの、使えそうでした(試してないから、わからないけれど)。
ユーザー情報が必要なときだけ、OAuth 認証を行います。

RubyPython の人はライブラリがある

でも、情報がある、とは言いがたいような。でも、github で、公開されているのでソースを見てみると、コメントで使い方がアレコレ書いてあるので、「ソース読め」で何とかなりそうです。

$ gem install instagram

Sinatra で使ってみる

久々に、Sinatraを使ったので、色々忘れてました(Sinatra は、気軽に色々と試せていいツールだと思います)。

使ってみて

あっさり使えます。で、送られてくるデーターが凄くボリュームがあります。表示されているデーターがほとんど来るんです。
ただ、位置に関するというか、建物情報とひも付けようと思うと、困ります。というのも、建物情報(foursquare と同じらしい)を取得して、そこからさらに画像取得となります。そのため、画像情報取得までに、API の通信が多いんです。そのため、建物情報のキャッシュ(保存)が欲しいところです(したらダメな気がするけれど)。ということは、UI に一工夫いりそうですね。

画面

ソース
require "rubygems"
require "sinatra"
require "sinatra/reloader" if development?
require "instagram"
require 'pp'

enable :sessions

Instagram.configure do |config|
  config.client_id       = "xxxxx"
  config.client_secret = "xxxxx"
end

get "/test" do
  media_items = Instagram.location_recent_media(560231)

  html = "test"

  for media_item in media_items.data
     pp media_item
     if media_item.caption
       html << "<p>#{media_item.caption.text}</p>"
     end
     html << "<p><a href='#{media_item.link}'>link</a></p>"
    html << "<p><img src='#{media_item.images.low_resolution.url}'></p>"
  end
  html
end

get "/geo" do
  client = Instagram.location_search("43.06326", "142.631582")

  html = ""
  for client_data in client
    html << "<h2>" + client_data.name + "/" + client_data.id + "</h2>"

     media_items = Instagram.location_recent_media(client_data.id)

     for media_item in media_items.data
      html << "<p><img src='#{media_item.images.thumbnail.url}'></p>"
     end
  end

  html
end