Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What is going on with this article?
@norikt

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

More than 3 years have 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

参考

14
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
norikt

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
14
Help us understand the problem. What is going on with this article?