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でした。
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
メッセージを見た感じnodeのタスクキューでエラーが発生しているようです。前のタスクのキューが終わっていなかったのかな?業務PCで実行したときには問題なく全レコードのファイルをダウンロードできたので、実行環境の違いによるものかもしれません。試しにmanifest.jsonの代わりにPDFファイルを添付して実行してみると、今度は成功しました。他のテキストファイルでも試してみたいと思い、README.mdファイルを添付したレコードを追加して実行してみるとすべて成功しました。一見タイミングの問題のように見えるんですが、正しく対策するためにはタスクキューについての理解が必要な気がします。「JavaScriptがブラウザでどのように動くのか」や「タスクキューとマイクロタスクキュー」が参考になりそうなので、読みます。
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を確認してみる
さて、公開したスライドの文字起こしを確認してみます。
文字起こしはうまくいっているようです。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の結果に反映すると良いかな?続きは、次の週末に試す予定です。