Rubyの標準ライブラリ net/http を使って cybozu.com の User API を叩いてみる

kintone(日本の) は cybozu.com という運用基盤の上で動いています。
kintone を設定するには、この運用基盤の理解が必要になってくるので、提供されている User API を Ruby から叩いて試してみました。

# エクスポート

* [cybozu.com共通管理者](https://jp.cybozu.help/general/ja/admin/list_administrator/list_type_of_administrator/administrator.html)のみ実行できます。

## ユーザーエクスポート API（JSON）

https://developer.cybozu.io/hc/ja/articles/202363040#step2

```users.rb
require 'rubygems'
require 'bundler/setup'
require 'dotenv/load'
require 'net/http'
require 'uri'
require 'json'
require 'base64'
require 'pp'

url = "https://#{ENV['SUBDOMAIN']}.cybozu.com/v1/users.json?size=100"
uri = URI.parse(url)
pass_auth = Base64.strict_encode64("#{ENV['UID']}:#{ENV['PASS']}")

Net::HTTP.start(uri.host, uri.port, :use_ssl => true) {|http|
  res = http.get("#{uri.path}?#{uri.query}", {'X-Cybozu-Authorization' => pass_auth})
  res.each_header do |name, val|
    puts "name=#{name}, val=#{val}"
  end
  case res.code.to_i
  when 200
    pp JSON.parse(res.body)
  else
    pp %Q(#{res.code} #{res.message})
    pp JSON.parse(res.body)
  end
}
```

## 役職エクスポートAPI

https://developer.cybozu.io/hc/ja/articles/202124764

* CSVのみです。

```csv_title.rb
url = "https://#{ENV['SUBDOMAIN']}.cybozu.com/v1/csv/title.csv"
uri = URI.parse(url)
pass_auth = Base64.strict_encode64("#{ENV['UID']}:#{ENV['PASS']}")

Net::HTTP.start(uri.host, uri.port, :use_ssl => true) {|http|
  res = http.get(uri.path, {'X-Cybozu-Authorization' => pass_auth})
  res.each_header do |name, val|
    puts "name=#{name}, val=#{val}"
  end
  case res.code.to_i
  when 200
    puts res.body
  else
    pp %Q(#{res.code} #{res.message})
    pp JSON.parse(res.body)
  end
}
```

## 組織エクスポート API(JSON）

https://developer.cybozu.io/hc/ja/articles/202124754#step2

```organizations.rb
url = "https://#{ENV['SUBDOMAIN']}.cybozu.com/v1/organizations.json?size=100"
uri = URI.parse(url)
pass_auth = Base64.strict_encode64("#{ENV['UID']}:#{ENV['PASS']}")

Net::HTTP.start(uri.host, uri.port, :use_ssl => true) {|http|
  res = http.get("#{uri.path}?#{uri.query}", {'X-Cybozu-Authorization' => pass_auth})
  res.each_header do |name, val|
    puts "name=#{name}, val=#{val}"
  end
  case res.code.to_i
  when 200
    pp JSON.parse(res.body)
  else
    pp %Q(#{res.code} #{res.message})
    pp JSON.parse(res.body)
  end
}
```

## グループエクスポート API（JSON）

https://developer.cybozu.io/hc/ja/articles/202363060#step2

```group.rb
url = "https://#{ENV['SUBDOMAIN']}.cybozu.com/v1/groups.json?size=100"
```

## ユーザーの所属組織エクスポート API(JSON)

https://developer.cybozu.io/hc/ja/articles/202124774#step2

* リクエストパラメーターにユーザーのコードを渡します。

```user_organizations.rb
url = "https://#{ENV['SUBDOMAIN']}.cybozu.com/v1/user/organizations.json?code=honda"
```

## ユーザーの所属グループエクスポート API(JSON)

https://developer.cybozu.io/hc/ja/articles/202124784#step2

* リクエストパラメーターにユーザーのコードを渡します。

```user_groups.rb
url = "https://#{ENV['SUBDOMAIN']}.cybozu.com/v1/user/groups.json?code=honda"
```

## 組織の所属ユーザーエクスポート API（JSON出力のみ）

https://developer.cybozu.io/hc/ja/articles/203881650

* リクエストパラメーターに組織のコードを渡します（必須）

```organization_users.rb
url = "https://#{ENV['SUBDOMAIN']}.cybozu.com/v1/organization/users.json?code=0001"
```



---

# 環境

* macOS 10.13.6
* ruby 2.5.0

# リンク

* [Ruby ドキュメント](https://www.ruby-lang.org/ja/documentation/)
* [標準添付ライブラリ紹介 【第 7 回】 net/http](https://magazine.rubyist.net/articles/0013/0013-BundledLibraries.html)
* [Ruby-Doc.org](https://ruby-doc.org/)
* [User API](https://developer.cybozu.io/hc/ja/articles/202111374)