Gyazoの情報をScrapboxに移す
Scrapboxの1ページにGyazoの1画像(+メタ情報)が書き込まれているようにしたい
画像
タイトル(title)
説明(desc)
OCRの内容
など
なぜそうしたいのか
Gyazoの検索機能が使い方がわからない
title, desc, OCRに登録されているはずなのに検索で表示される画像と表示されない画像がある
どう検索すれば引っかかるのか未だによくわからない
一方でScrapboxの検索はしっくりくる
Gyazoの関連画像表示がわからない
なぜその画像が関連にあがるの?と感じることが多かった
More(もうちょい関連表示して)ができない
関連 > 関連と辿っていくと現在位置を見失う
一方でScrapboxのリンクはしっくりくる
トップページ表示が重い
画像上げすぎ疑惑
でも増えることはあっても減ることはないし…
一方でScrapboxはページ増やしてもそんなに重くない
よく表示する画像を知りたい
特にOCR系がうまく効かない画像は何回も探すことになる
Gyazoにそういう機能はないっぽい
一方でScrapboxはMost Viewedソートできる
どうやるか
Scrapboxは画像溜め込み用のプロジェクトを用意してそこに突っ込むだけ
イメージ
code:mmd
sequenceDiagram
autonumber
スマホ・タブレット ->> スマホ・タブレット: スクショなど
スマホ・タブレット ->> PC: 写真同期
loop scriptで実行
PC ->> Gyazo: 写真アップロード(1つまたは複数)
Gyazo ->> PC: Gyazo Permalinkを取得(1つまたは複数)
end
note right of PC: GyazoのPermalinkリスト
critical この処理はこちらから見えない
Gyazo ->> Gyazo: OCR
end
loop scriptで実行
PC ->> Gyazo: アップロードしたPermalink ListのOCR結果を要求
Gyazo ->> PC: OCR結果のListを取得
PC ->> PC: OCR結果のListをScrapbox Import用のjsonに整形
PC ->> PC: 量が多ければ1つにまとめる
end
note right of PC: Scrapboxインポート用json
PC ->> Scrapbox: jsonをImport
Scrapbox ->> Scrapbox: import処理
Scrapbox ->> PC: 成功
PC ->> Scrapbox: OCR結果で検索
Scrapbox ->> PC: 結果返却
スマホ・タブレット ->> Scrapbox: OCR結果で検索
Scrapbox ->> スマホ・タブレット: 結果返却
ここから必要な情報を残す
code:response.json
[
{
"image_id": "8980c52421e452ac3355ca3e5cfe7a0c",
"type": "png",
...
"ocr": {
"description": "Gyazo\n",
}
},
...
]
Scrapboxインポート用のjsonに整形する
上記のresponse.jsonをscrapbox用に変換
Scrapbox > Project Settings > Page Data > Import Pagesからインポートする
とりあえずこれができるかどうか
できないこともなかった
同じページをimportする場合(可能性はある)
Overwriteのチェックをオン(デフォルトがオン)にしたままimportすると、importしたページに何か書き込んでいた場合消えてしまう
本当はGyazoにアップロードしたら(=OCR情報が登録されたら)勝手にScrapboxに登録されてほしい
すでにやっている人がいると思う
実際にやってみたが、結構面倒くさい
既存の画像情報のインポート
Gyazo APIの/imagesへのGETを繰り返して各データの情報を取得する
これはできる
ただし、Scrapboxへインポートするjsonはサイズ制限があるので細かく刻まないといけない
インポートできるサイズの上限は30MBとなっています。これ以上大きい場合は分割してください。
インポート時
jsonのサイズ制限ギリギリのファイルだとタイムアウト(60000ms?)する
サイズじゃなくて回線の問題かも
Gyazo APIと違ってやりすぎの基準がわからない
help-jpにも書いてない?
「API 制限」「rate limit」などで検索してみたが見つけられない
やりすぎて止められると他のPOST操作も使えなくなる…
全プロジェクト検索など
待てば復活するんだが、何度もやりすぎると…
新しく追加した画像のインポート
追加した分、最新の一覧を取得してインポートすればとりあえずよさそう
/imagesに:page 1 :per_page: 100...
既存の画像を編集した場合
1つずつ追うのは無理
/imagesで「更新時間順にソートした一覧取得」をしたい…
こういうjsonが欲しい
code:diff
{
"pages": [
{
"id": "1234...", // これいる?
"title": "タイトル", // そのまま
"updated": 1693028226, // 更新するなら変える?
"lines": [
{ "id": "2222...", "text": "テキスト", "userId": "3333...", "created": 1693028226, "updated": 1693028226 }, // 変化しない行はそのまま
...
{
"id": "4444...", // これいる?
- "text": "https://example.com/img.jpg",
"userId": "3333...", // これいる?
"created": 1693028226,
"updated": 1693028226
},
...
]
}
]
}