Help us understand the problem. What is going on with this article?

Dropbox PaperにMarkdownファイルをアップロードする

More than 1 year has passed since last update.

概要

Dropbox APIがV2になってAPIを使ってDropboxPaperのドキュメントの作成ができるようになりました!
esaなどの別のサービスからエクスポートしたmdファイルを簡単にDropboxPaperにインポートできそうなので試してみました。

これはDropbox Paperへの移行が捗りそう\(^o^)/

事前準備

https://www.dropbox.com/developers/apps
上のページからappを作成し、アクセス トークンを生成、取得します。

スクリプト

特定のフォルダにアップロードするには、Dropbox-API-Argで parent_folder_id を指定します。
HTTPクライアントにFaradayを使ってrubyスクリプトを書いてみました。

conn = Faraday.new(url: 'https://api.dropboxapi.com') do |faraday|
    faraday.authorization :Bearer, '**token**'
    faraday.response :logger
    faraday.adapter Faraday.default_adapter
end

conn.post do |req|
    req.url '/2/paper/docs/create'
    req.headers['Dropbox-API-Arg'] = { 'import_format': 'markdown', 'parent_folder_id': 'e.iXXXXXXXXXXXXXXXXX12345XXXXXXXXXXXXXXXX' }.to_json
    req.headers['Content-Type'] = 'application/octet-stream'
    req.body = File.binread('hoge.md')
end

注意点として

一度に大量にはアップロードできません。
100件ほど連続してアップロードするとAPI利用回数制限のエラーが返ってきます。(100回/日の利用制限)

アップロードしたmdファイルが数100件あったので、実際には以下のような感じの実装になりました。

Dir.glob("/**/*.md").each do |file_name|
  begin
    response = conn.post do |req|
      req.url '/2/paper/docs/create'
      req.headers['Dropbox-API-Arg'] = { 'import_format': 'markdown', 'parent_folder_id': 'e.iXXXXXXXXXXXXXXXXX12345XXXXXXXXXXXXXXXX' }.to_json
      req.headers['Content-Type'] = 'application/octet-stream'
      req.body = File.binread(file_name)
    end

    if response.status == 429
      duration = response.headers['retry-after'].to_i
      puts "RateLimit!! sleep...#{duration}"
      sleep duration
      fail RateLimitError
    end
  rescue RateLimitError
    puts "Retry!!"
    retry
  end
end

参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away