esa APIを利用してチームのユーザーからランダムで一人を選出する

esa esa APIを利用してチームのユーザーからランダムで一人を選出します。
今のところMembers APIみたいなものは提供されていなそうなので全投稿をほじくって
そこからユーザーの情報を取得します。かなり力技。

## 前提
* esaのAPIの仕様は以下で確認すること
    * <i class="fa fa-external-link" style="font-size:1em;"></i> [esa API v1](https://docs.esa.io/posts/102)
* esaのAPI Clint Library(Ruby)
    * <i class="fa fa-external-link" style="font-size:1em;"></i> [esa - ruby](https://github.com/esaio/esa-ruby)
* 環境変数の利用
    * dotenv gemを利用
        * <i class="fa fa-external-link-square" style="font-size:1em;"></i> [dotenv gem で環境変数をスマートに管理](http://qiita.com/tbpgr/items/b7126c3d2d8f0329b11c)

## <i class="fa fa-code" style="font-size:1em;"></i> プログラム
こんな感じの出力結果を何かと連携させたら、esaのユーザーから抽選で1名を選出して
何かに指名する、とかできると思います。
例えば、ポエム担当をこれでランダムにきめてその人の名前でポエム記事のテンプレートを投稿したりとか。

### .env
例のごとく公式チームで試行させていただきます。

```
ESA_API_TOKEN=your api token
TEAM=docs
```

### esa-random_choose.rb
```ruby
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
```

## <i class="fa fa-play-circle" style="font-size:1em;"></i> 出力
* 1回目

```bash
$ 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回目

```bash
$ 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回目

```bash
$ ruby esa_random_choose.rb
https://img.esa.io/uploads/production/users/2/icon/thumb_m_2690997f07b7de3014a36d90827603d6.jpg
Name: TAEKO AKATSUKA
Screen Name: taea
```

## <i class="fa fa-refresh" style="font-size:1em;"></i> 応用
例えば最後の出力部分をMarkdownに変えてみます。

```ruby
# ここより前は同じ

puts <<-EOS
![#{user[:name]}](#{user[:icon]})

## Name
#{user[:name]}

## Screen Name
#{user[:screen_name]}
EOS
```

* 出力されたMarkdown

```markdown
![Atsuo Fukaya](https://img.esa.io/uploads/production/users/1/icon/thumb_m_402685a258cf2a33c1d6c13a89adec92.png)

## Name
Atsuo Fukaya

## Screen Name
fukayatsu
```

* 出力されたMarkdownをこの記事に貼り付けてみる

---

![Atsuo Fukaya](https://img.esa.io/uploads/production/users/1/icon/thumb_m_402685a258cf2a33c1d6c13a89adec92.png)

## Name
Atsuo Fukaya

## Screen Name
fukayatsu

---

## ・・・とここで終わるはずだった。
>今のところMembers APIみたいなものは提供されていなそうなので全投稿をほじくって
>そこからユーザーの情報を取得します。かなり力技。

この件があったので、esaへフィードバックを送りました。
すると **6分** で返信があって **約2時間半後には** Members API が提供されているという神展開。

<a href="https://docs.esa.io/posts/159" target="_blank">Members APIを追加しました - docs.esa.io</a>

## <i class="fa fa-code" style="font-size:1em;"></i> プログラム
新API版のプログラム。
今回はメンバーだけを取得しているのでとってもシンプル。

```bash
$ gem update esa 
```

### .env
自分のチームしか確認できない。（公式チームの情報も見ることはできない）

```
ESA_API_TOKEN=your api token
TEAM=your team
```

### esa-random_choose_new_api.rb
すごく楽になったし、処理もすぐに終わるようになった。

```ruby
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
```

## <i class="fa fa-play-circle" style="font-size:1em;"></i> 出力
```bash
$ ruby random_choose_new_api.rb
# 適当なパスに変えてます
https://img.esa.io/uploads/production/users/some.jpg
Name: てぃーびー
Screen Name: tbpgr
```

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [esa API v1](https://docs.esa.io/posts/102)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [esa - ruby](https://github.com/esaio/esa-ruby)

## (\\( ⁰⊖⁰)/)　明日のesa Advent Calendar
6日のAdvent Calendar担当は、なんと！中の人「ふかやつさん」です！