見出し画像

FetchAPI入門(その3)解決編

先週までfetchに失敗していたのですが、「kintoneのファイルダウンロードAPIのURLが違うので404なのかも?」とpiyoさんにヒントをいただいて解決できました!うれしい!!


幸せになるための準備(まだ続きます)

piyoさんにいただいたコメントを見て、APIの使い方を間違えていたことに気がついたので、修正して実行しました。

APIURLの修正

さて、どこを間違えていたかというと、APIのURLの"file.json"の部分に、取得したいファイル名を指定したいたところです。

    const resp = await fetch(`https://<your domain>.cybozu.com/k/v1/${name}?fileKey=${fileKey}`, {

ここは、"file.json"のまま、パラメータのfileKeyに取得したいファイルのキーを設定すればOKだったのです。${name}と、取得したファイル名を指定していた箇所を、下記のように修正しました。

    const resp = await fetch(`https://<your domain>.cybozu.com/k/v1/file.json?fileKey=${fileKey}`, {

実行

実行してみると、PDFはダウンロードできたのですが、テスト用のレコードのうち、manifest.jsonを添付した方は、ステータス520で取得に失敗しました。そういえば、APIのURLを間違えていたときも、manifest.jsonの方はfetchのstatusが520でした。

pdfはfetchできたが、jsonはfetchに失敗した
実行結果
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

メッセージを見た感じnodeのタスクキューでエラーが発生しているようです。前のタスクのキューが終わっていなかったのかな?業務PCで実行したときには問題なく全レコードのファイルをダウンロードできたので、実行環境の違いによるものかもしれません。試しにmanifest.jsonの代わりにPDFファイルを添付して実行してみると、今度は成功しました。他のテキストファイルでも試してみたいと思い、README.mdファイルを添付したレコードを追加して実行してみるとすべて成功しました。一見タイミングの問題のように見えるんですが、正しく対策するためにはタスクキューについての理解が必要な気がします。「JavaScriptがブラウザでどのように動くのか」や「タスクキューとマイクロタスクキュー」が参考になりそうなので、読みます。

message.json,manifest.json,readme.md,Chrome拡張MV3について.pdfのダウンロードに成功
今度はすべてダウンロードに成功

pdffontsの実行

fetch実行結果のstatus520が再現できなくなったので、調査を継続しつつ、pdffontsの実行を試します。

$ pdffonts temp/Chrome拡張MV3について.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
BCDEEE+YuGothic-Light                TrueType          WinAnsi          yes yes no       6  0
BCDFEE+YuGothic-Light                CID TrueType      Identity-H       yes yes yes      9  0
BCDGEE+YuGothic-Regular              TrueType          WinAnsi          yes yes no      14  0
ArialMT                              CID TrueType      Identity-H       yes no  yes     18  0
BCDHEE+YuGothic-Regular              CID TrueType      Identity-H       yes yes yes     23  0

YuGothic-LightとYuGothic-Regularが複数登場していて、unicode変換もyesとnoの両方があります。これは、うまくTranscriptできるんでしょうか?

docswellのTranscriptを確認してみる

さて、公開したスライドの文字起こしを確認してみます。

各ページのテキスト
1.

Chrome拡張MV3について 2024-02-18 JMLT vol6

2.

こんにちは! • Jnkykn • サイボウズ株式会社の開発本部で技術広報っぽいことをやって います • 今日は、プライベートでご飯を食べたり、もくもくしたりする ために釧路まで来ました。 • SL湿原号にも乗れたので、優勝です。 • 先週、無期雇用社員になりました

3.

はなすこと • 最近ハマっていること • SLたのしかった

4.

最近のハマりどころ • kintoneのネタとして、ChatGPTを使ってみるの面白そう • kintoneのプラグインサンプルを写経してみたら、Chromeに拒 否られた • プラグインのマニフェストのバージョンは、2か3にしないと いけないらしい • マニフェストをV1からV3に移行しないと • その前に、Chrome拡張開発やったことないぞ • Chrome拡張開発に入門しよう • 段階的にV1からV3に移行してみる←イマココ

5.

今後の進捗は、noteを見てね! • kintoneカスタマイズ https://note.com/_tetrapod/m/mfd8b5d418aab

    https://note.com/_tetrapod/m/mfd8b5d418aab

6.

Chrome拡張MV3について 2024-02-18 JMLT vol6

7.

Chrome拡張MV3について 2024-02-18 JMLT vol6

8.

SL冬の湿原号満喫のために 2024-02-18 JMLT vol6

9.

SL冬の湿原号満喫のために • https://www.jrhokkaido.co.jp/travel/sl/guid.html • 満喫ポイント • 出遅れても満喫ポイントはある! • 満喫のために 予約競争参戦に完全に出遅れ たので、指定席を確保するだ けでせいいっぱいでした!
正しく文字起こしされている

文字起こしはうまくいっているようです。PDFからテキストを抽出する際に起きる文字化けについては、「PDFをコピペするとなぜ“文字化け”が起きてしまうのか 変換テーブル“ToUnicode CMap”が原因だった」に詳しいので読んでみると、PDFのCID→Unicodeの変換のためのToUnicode CMapが正しく定義されていれば文字化けは起きないということなので、YuGothic-RegularとYuGothic-LightのType CID TrueTypeのToUnicodeがyesであれば文字化けしないのかもしれません。現時点ではサンプル数が足りないので、改めて、できるだけ多くのPDFファイルのpdffonts実行結果を集めて分析したいと思いました。

図書館でPDF構造解説を借りてきました

pdffontsでPDFをチェックするのも大切なのですが、PDFそのものの構造も知りたいと思い、図書館で「PDF構造解説」を借りてきました。

とにかく読んで、理解したいと思います。

まとめ

ひとまず、FetchAPIでkintoneのレコードに添付されたファイルのダウンロードができました。今日はここまでにして、次は、ダウンロードしたファイルのpdffonts実行結果を対象レコードに書き戻す処理を実装したいと考えています。pdffontsを実行して、結果はテキストファイルに一旦保存しておいて、それを読み出してレコードのpdffontsの結果に反映すると良いかな?続きは、次の週末に試す予定です。

この記事が気に入ったらサポートをしてみませんか?