ScrapboxページにGyazoのOCRデータを追加する

ScrapboxページにGyazoのOCRデータを追加する

(2020/3/16)

ScrapboxページにGyazo画像があるときOCRテキストをページに追加する
Scrapboxプロジェクトのデータのエクスポートとインポートは手動でやる
Scrapbox上で画像内の文字列を検索できるようになるので便利
Gyazoのアクセストークンこちらから取得可能

(注) Gyazo PRO のアカウントが必要です


addocr.rb
Copied!
#
# ScrapboxページにGyazoが含まれているときOCRテキストを追加
#
# Gyazo APIのためのアクセストークンはあらかじめ取得しておき
# .bash_profileなどに書いておく
# export GYAZO_TOKEN="0123456..."
# アクセストークンは以下から取得
# https://gyazo.com/api?lang=ja
#
# 手順
# 1. ScrapboxプロジェクトのJSONデータをエクスポートする (origdata.json)
# 2. GyazoのOCRテキストをデータに追加する
# % ruby addocr.rb origdata.json > newdata.json
# 3. 作成されたJSONデータ(newdata.json)をインポートする
#
# 2020/3/16 Toshiyuki Masui

require 'json'
require 'gyazo'

jsonfile = ARGV[0]
unless jsonfile && File.exist?(jsonfile)
STDERR.puts "JSON file not found"
STDERR.puts "Usage: ruby addocr.rb orig.json > new.json"
exit
end

token = ENV['GYAZO_TOKEN']
gyazo = Gyazo::Client.new access_token: token

origdata = JSON.parse(File.read(jsonfile))

newdata = {}
newdata['pages'] = []

origdata['pages'].each { |origpage|
STDERR.puts origpage['title']
newpage = {}
newpage['title'] = origpage['title']
newpage['lines'] = []
gyazoids = []
ocr_done = false
origpage['lines'].each { |origline|
newpage['lines'] << origline
if origline =~ /gyazo\.com\/([0-9a-f]{32})/i
gyazoids << $1
end
if origline =~ /OCR text/
ocr_done = true
end
}
if gyazoids.length > 0 && !ocr_done
newpage['lines'] << ""
newpage['lines'] << "(OCR text)"
gyazoids.each { |gyazoid|
res = gyazo.image image_id: gyazoid
if res && res[:ocr]
res[:ocr][:description].split(/\n/).each { |ocrline|
newpage['lines'] << "> #{ocrline}"
}
end
}
newdata['pages'] << newpage
end
}

puts newdata.to_json
Powered by Helpfeel