インポートスクリプト例 [esa.io]
<span style="color: #ee6f0b; font-size: 155%;">**管理画面からインポートできるようになりました！**</span>

詳しい方法は下記のメモをご参照ください。

#{583280}


## esaインポートスクリプト例
```ruby:ruby-2.3.1
require 'json'
require 'net/http'
require 'time'
require 'yaml'

EXPORTED_DIR_PATH = 'esa.ioからエクスポートしたディレクトリパス'
ACCESS_TOKEN      = '自分のアクセストークン'
TEAM_DOMAIN       = 'チームのドメイン'
GROUP_ID          = 投稿先のグループID

BASE_URL       = URI.parse('https://api.docbase.io')
REQUEST_HEADER = {'X-DocBaseToken' => ACCESS_TOKEN, 'X-Api-Version' => 1, 'Content-Type' => 'application/json'}

def wait
  # 1時間に300回を超えるリクエストは無効のため待つ
  start_at = Time.now
  yield
  sleep_sec = [3600 / 300.0 - (Time.now - start_at), 0].max
  sleep(sleep_sec)
end

def post(request_path, data)
  http = Net::HTTP.new(BASE_URL.host, BASE_URL.port)
  http.use_ssl = BASE_URL.scheme == 'https'

  request = Net::HTTP::Post.new(request_path)
  request.body = data
  REQUEST_HEADER.each { |key, value| request.add_field(key, value) }

  response = http.request(request)
  response_body = JSON.parse(response.body)

  if response.code == '201'
    response_body
  else
    message = response_body['messages'].join("\n")
    puts "Error: #{message}"
    nil
  end
end

Dir.glob "#{EXPORTED_DIR_PATH}/**/*.md" do |path|
  open path do |file|
    text = file.read

    data = YAML.load(text)
    body = text.sub(/\A---$.*?^---$/m, '')

    tags = data['tags'].to_s.split(',')
    tags << 'template' if data['category'].to_s.start_with?('templates')

    post_json = {
      title:  "#{data['category']} #{data['title']}",
      body:   body,
      tags:   tags,
      scope:  'group',
      groups: [GROUP_ID],
      draft:  false,
      notice: false,
      published_at: data['created_at'].iso8601,
    }.to_json

    wait do
      print "Create post "
      created_post = post("/teams/#{TEAM_DOMAIN}/posts", post_json)
      puts created_post['url'] if created_post
    end
  end
end
```