Class: Tumblr::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/tumblr.rb

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Client

Returns a new instance of Client.



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/tumblr.rb', line 7

def initialize(opts = {})
  @consumer_key = opts.delete(:consumer_key)
  consumer_secret = opts.delete(:consumer_secret)
  oauth_token = opts.delete(:oauth_token)
  oauth_token_secret = opts.delete(:oauth_token_secret)
  @consumer = OAuth::Consumer.new(@consumer_key, consumer_secret,
                                  {:site => "http://www.tumblr.com/"})
  token_hash = {:oauth_token => oauth_token,
    :oauth_token_secret => oauth_token_secret}
  @access_token = OAuth::AccessToken.from_hash(@consumer, token_hash)
end

Instance Method Details

#api_key_get(hostname, path, params = {}) ⇒ Object



63
64
65
66
67
68
# File 'lib/tumblr.rb', line 63

def api_key_get(hostname, path, params = {})
  params[:api_key] ||= @consumer_key
  query = URI.escape(params.collect{|k,v| "#{k}=#{v}"}.join('&'))
  uri = "http://api.tumblr.com/v2/blog/#{hostname}/#{path}?#{query}"
  open(uri).read
end

#followers(hostname) ⇒ Object



23
24
25
26
# File 'lib/tumblr.rb', line 23

def followers(hostname)
  response = @access_token.get("http://api.tumblr.com/v2/blog/#{hostname}/followers")
  JSON.parse(response.body)
end

#info(hostname) ⇒ Object



19
20
21
# File 'lib/tumblr.rb', line 19

def info(hostname)
  JSON.parse api_key_get(hostname, 'info')
end

#post_pages(hostname, opts = {}) {|{:result => result, :offset => offset, :page_number => page_number, :per_page => limit}| ... } ⇒ Object

Yields:

  • ({:result => result, :offset => offset, :page_number => page_number, :per_page => limit})


35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/tumblr.rb', line 35

def post_pages(hostname, opts = {})
  page_limit = opts.delete(:number_of_pages).to_i
  limit = opts.delete(:per_page) || 20
  offset = 0
  result = posts_page(hostname, opts.merge(:offset => offset,
                                          :limit => limit))
  total = result['response']['total_posts']
  total_pages = (total.to_f / limit.to_f).ceil
  page_number = 1
  yield({:result => result,
        :offset => offset,
        :page_number => page_number,
        :per_page => limit})
  if total_pages > 1
    while(page_number <= total_pages) do
      break if page_limit > 0 && page_number == page_limit
      offset = (offset + limit)
      result = posts_page(hostname, opts.merge(:offset => offset,
                                          :limit => limit))
      yield({:result => result,
            :offset => offset,
            :page_number => page_number,
            :per_page => limit})
      page_number += 1
    end
  end
end

#posts_page(hostname, opts = {}) ⇒ Object



28
29
30
31
32
33
# File 'lib/tumblr.rb', line 28

def posts_page(hostname, opts = {})
  defaults = {:offset => 0, :limit => 20}
  opts = defaults.merge(opts)
  response = api_key_get(hostname, 'posts', opts)
  JSON.parse(response)
end