esa esa APIを利用してチームのユーザーからランダムで一人を選出します。
今のところMembers APIみたいなものは提供されていなそうなので全投稿をほじくって
そこからユーザーの情報を取得します。かなり力技。
前提
- esaのAPIの仕様は以下で確認すること
- esaのAPI Clint Library(Ruby)
- 環境変数の利用
- dotenv gemを利用
プログラム
こんな感じの出力結果を何かと連携させたら、esaのユーザーから抽選で1名を選出して
何かに指名する、とかできると思います。
例えば、ポエム担当をこれでランダムにきめてその人の名前でポエム記事のテンプレートを投稿したりとか。
.env
例のごとく公式チームで試行させていただきます。
ESA_API_TOKEN=your api token
TEAM=docs
esa-random_choose.rb
require 'dotenv'
require 'esa'
Dotenv.load
client = Esa::Client.new(access_token: ENV['ESA_API_TOKEN'], current_team: ENV['TEAM'])
page_unit = 100
post_count = client.posts(per_page: page_unit).body['total_count']
results = (1..((post_count / page_unit) + 1)).each_with_object([]) do |i, results|
results << client.posts(per_page: post_count, page: i).body["posts"].map{|e|
{
name: e["created_by"]["name"],
screen_name: e["created_by"]["screen_name"],
icon: e["created_by"]["icon"]
}
}
end
user = results.flatten.uniq.sample
puts <<-EOS
#{user[:icon]}
Name: #{user[:name]}
Screen Name: #{user[:screen_name]}
EOS
出力
- 1回目
$ ruby esa_random_choose.rb
https://img.esa.io/uploads/production/users/1/icon/thumb_m_402685a258cf2a33c1d6c13a89adec92.png
Name: Atsuo Fukaya
Screen Name: fukayatsu
- 2回目
$ ruby esa_random_choose.rb
https://img.esa.io/uploads/production/users/83/icon/thumb_m_1bca40cedfd2cfd0f636f2ac9c0bbad6.jpg
Name: esa_bot
Screen Name: esa_bot
- 3回目
$ ruby esa_random_choose.rb
https://img.esa.io/uploads/production/users/2/icon/thumb_m_2690997f07b7de3014a36d90827603d6.jpg
Name: TAEKO AKATSUKA
Screen Name: taea
応用
例えば最後の出力部分をMarkdownに変えてみます。
# ここより前は同じ
puts <<-EOS
![#{user[:name]}](#{user[:icon]})
## Name
#{user[:name]}
## Screen Name
#{user[:screen_name]}
EOS
- 出力されたMarkdown
![Atsuo Fukaya](https://img.esa.io/uploads/production/users/1/icon/thumb_m_402685a258cf2a33c1d6c13a89adec92.png)
## Name
Atsuo Fukaya
## Screen Name
fukayatsu
- 出力されたMarkdownをこの記事に貼り付けてみる
Name
Atsuo Fukaya
Screen Name
fukayatsu
・・・とここで終わるはずだった。
今のところMembers APIみたいなものは提供されていなそうなので全投稿をほじくって
そこからユーザーの情報を取得します。かなり力技。
この件があったので、esaへフィードバックを送りました。
すると 6分 で返信があって 約2時間半後には Members API が提供されているという神展開。
Members APIを追加しました - docs.esa.io
プログラム
新API版のプログラム。
今回はメンバーだけを取得しているのでとってもシンプル。
$ gem update esa
.env
自分のチームしか確認できない。(公式チームの情報も見ることはできない)
ESA_API_TOKEN=your api token
TEAM=your team
esa-random_choose_new_api.rb
すごく楽になったし、処理もすぐに終わるようになった。
require 'dotenv'
require 'esa'
Dotenv.load
client = Esa::Client.new(access_token: ENV['ESA_API_TOKEN'], current_team: ENV['TEAM'])
user = client.members.body["members"].sample
puts <<-EOS
#{user["icon"]}
Name: #{user["name"]}
Screen Name: #{user["screen_name"]}
EOS
出力
$ ruby random_choose_new_api.rb
# 適当なパスに変えてます
https://img.esa.io/uploads/production/users/some.jpg
Name: てぃーびー
Screen Name: tbpgr
外部資料
(\( ⁰⊖⁰)/) 明日のesa Advent Calendar
6日のAdvent Calendar担当は、なんと!中の人「ふかやつさん」です!