tumblr_clientを試す
ふと今年どのくらい記事を書いたのかなと考え、そういえば以前からTumblr APIをいじってみようと考えていたことも思い出したので、試しにちょっとやってみた。
まずはtumblr_client.gemをインストールする。
$ gem install tumblr_client
Fetching: multipart-post-2.0.0.gem (100%)
Successfully installed multipart-post-2.0.0
Fetching: faraday-0.9.2.gem (100%)
Successfully installed faraday-0.9.2
Fetching: faraday_middleware-0.9.2.gem (100%)
Successfully installed faraday_middleware-0.9.2
Fetching: simple_oauth-0.3.1.gem (100%)
Successfully installed simple_oauth-0.3.1
Fetching: oauth-0.5.1.gem (100%)
Successfully installed oauth-0.5.1
Fetching: tumblr_client-0.8.5.gem (100%)
Successfully installed tumblr_client-0.8.5
invalid options: -SHN
(invalid options are ignored)
Parsing documentation for multipart-post-2.0.0
Installing ri documentation for multipart-post-2.0.0
Parsing documentation for faraday-0.9.2
Installing ri documentation for faraday-0.9.2
Parsing documentation for faraday_middleware-0.9.2
Installing ri documentation for faraday_middleware-0.9.2
Parsing documentation for simple_oauth-0.3.1
Installing ri documentation for simple_oauth-0.3.1
Parsing documentation for oauth-0.5.1
Installing ri documentation for oauth-0.5.1
Parsing documentation for tumblr_client-0.8.5
Installing ri documentation for tumblr_client-0.8.5
Done installing documentation for multipart-post, faraday, faraday_middleware, simple_oauth, oauth, tumblr_client after 2 seconds
6 gems installed
簡単な動作を確認できるtumblrコマンドが用意されているので、おもむろに実行する。
$ tumblr
Register an application at: http://www.tumblr.com/oauth/apps
OAuth Consumer key: $KEY
OAuth Consumer secret: $SECRET
APIの利用にはアプリケーションの登録が必要となる。
https://www.tumblr.com/oauth/registerで必要な情報を入力する。入力値は後から変更できるので適当でよい。ただし登録したアプリケーションの削除は今のところできないようなので、お試しの際にはお試しとわかるような値にしておくほうがよいと思う。
- アプリケーション名: 適当に記入する。承認画面で表示される。
- アプリケーションウェブサイト、App Store URL、Google Play Store URL: このうちのどれか一つは記入しなければならない。
- アプリケーションの説明: 適当に記入する。
- 管理用の連絡先メール: デフォルト値が入っているので、よければそれで。
- デフォルトのコールバックURL: 記入が必要だが受け口が特にないのでlocalhostにリダイレクトさせておくことにした。
これでConsumer keyとConsumer secretを入手できる。tumblrコマンドからのプロンプトに対してそれぞれを入力する。
すると承認画面のURLが表示されるので、ブラウザでアクセスし、承認する。承認するとコールバックURLにリダイレクトされる。
リダイレクト先のURLにはQUERY文字列にoauth_verifierが含まれているので、その値を入力する。QUERY文字列は?oauth_token=$token&oauth_verifier=$verifier#_=_
のような形式。入力するのは$verifier
の部分。
http://www.tumblr.com/oauth/authorize?oauth_token=$token
Post-redirect, copy the oauth_verifier
OAuth Verifier: $verifier
するとロゴが表示されてirbのセッションが始まる。
. .o8 oooo
.o8 "888 `888
.o888oo oooo oooo ooo. .oo. .oo. 888oooo. 888 oooo d8b
888 `888 `888 `888P"Y88bP"Y88b d88' `88b 888 `888""8P
888 888 888 888 888 888 888 888 888 888
888 . 888 888 888 888 888 888 888 888 888 .o.
"888" `V88V"V8P' o888o o888o o888o `Y8bod8P' o888o d888b Y8P
irb(main):001:0> c = Tumblr::Client.new
=> #<Tumblr::Client:0x007fe068958a30 @consumer_key="$KEY", @consumer_secret="$SECRET", @oauth_token="$oauth_token", @oauth_token_secret="$oauth_secret", @client=nil, @api_scheme=nil>
irb(main):005:0> c.blog_info('aylog')['blog']['total_posts']
=> 282
tumblrコマンドで入力した認証情報は~/.tumblrに保存される。tumblrコマンドはこれを読み込んでいる。
同じように~/.tumblrを使ってTumblrにアクセスし、2016年に書いた記事をカウントしてみる。
require 'tumblr_client'
require 'pathname'
require 'yaml'
require 'time'
require 'pp'
# ~/.tumblrを読み込んで認証情報を設定する
config_path = Pathname.new('~/.tumblr').expand_path
config = YAML.load_file(config_path)
Tumblr.configure do |c|
config.each do |key, val|
next unless Tumblr::Config::VALID_OPTIONS_KEYS.include?(key.to_sym)
c.public_send(:"#{key}=", val)
end
end
# 記事数をカウントする
client = Tumblr::Client.new
blog_id = 'aylog'
info = Hash.new(0)
tags = []
offset = 0
catch do |tag|
res = client.posts(blog_id, offset: offset)
posts = res['posts']
throw tag if posts.empty?
posts.each do |post|
throw tag unless Time.parse(post['date']).localtime.year == 2016
info[post['type']] += 1
tags |= post['tags']
end
offset += posts.size
redo
end
# カウント結果の手抜き表示
pp info
p tags
p info.values.sum
実行結果によれば43個の記事を書いたらしい。ただし自分で書いたのは24個で、この記事はカウントされていない。
$ ruby tumblr_client_sample.rb
{"text"=>24, "link"=>12, "quote"=>4, "video"=>2, "photo"=>1}
["Ruby", "Chrome", "Homebrew", "コーヒー", "欲しい", "Rails", "Middleman", "pull request", "正規表現", "Unicode", "PC", "Debian", "ActiveRecrod", "OSS"]
43
- tumblr_client
- アプリケーションの登録
- 登録したアプリケーションの参照 (ダッシュボード→設定→アプリでも参照できる)
- Tumblr API