Cosenseへのimportが謎にこける問題
Cosenseへのimportが謎に転ける問題
のりしろnishio.icon
いまScrapbox(Cosense)からの自動英訳がGitHub Actionで動いてる
しかし翻訳後のScrapboxへのインポートでこけている
時々この現象が起きるんだけど不可解だし、もうなんだかめんどくさいなー、Scrapboxにインポートするのはやめようかなー、という気持ち
議論
あと、response.okがfalseでも、import自体は成功してることもある
とはいえこのあたりはもう調べてそうだから、別の現象かな
そうなると自分もわからないな
差分にするとこまでやってるnishio.icon
大体理解takker.icon
https://code2svg.vercel.app/svg/L20-34/https://raw.githubusercontent.com/nishio/etude-github-actions/e21e07e934496351ffb5780b1782bc52424874eb/import_to_scrapbox.ts#.svg https://github.com/nishio/etude-github-actions/blob/e21e07e934496351ffb5780b1782bc52424874eb/import_to_scrapbox.ts#L20-L34
scrapbox-userscript-stdのv0.14.0のimportPagesがエラーを吐いている
error.name === undefinedとなっている
この状況だと、HTTP Errorは4xxか5xxではあるけど、import自体は成功している可能性もありますねtakker.icon
88 pagesしかimportしていないから、ファイルサイズ超過によるerrorは起きてなさそう
status codeを見れればいいんだけどな……
Responseを内部で潰してしまっているから、情報を得られない
急場しのぎですが、これでimport_to_scrapbox.tsを差し替えてみてください
(Quartzでの公開に方針を切り替えているようなので、差し替えは必要になったときで構いません)
code:import_to_scrapbox.ts
import { cookie, getCSRFToken } from "jsr:@cosense/std@0.29/rest";
import { isErr, unwrapOk } from "npm:option-t@50/plain_result";
import { assert } from "jsr:@core/unknownutil@4/assert";
import { isString } from "jsr:@core/unknownutil@4/is/string";
import data from "./data_en_diff.json" with { type: "json" };
const sid = Deno.env.get("SID");
assert(sid, isString);
const importingProjectName = "nishio-en";
if (data.pages.length === 0) {
console.log("No page to be imported found.");
} else {
console.log(
Importing ${data.pages.length} pages to "/${importingProjectName}"...
);
// workaround: 生のResponseのstatusを見る機能が@cosense/std@0.29に無いので、直接REST APIを叩く
// TODO: エラー処理を握りつぶさずもうちょっとちゃんとする
const csrf = unwrapOk(await getCSRFToken({ sid }));
const formData = new FormData();
formData.append(
"import-file",
type: "application/octet-stream",
}),
);
formData.append("name", "undefined");
const res = await fetch(
https://scrapbox.io/api/page-data/import/${importingProjectName}.json,
{
method: "POST",
headers: {
Cookie: cookie(sid),
Accept: "application/json, text/plain, */*",
"X-CSRF-TOKEN": csrf,
},
body: formData,
},
);
どういうエラーが返ってきているのかわからないので、一旦全部成功扱いにし、HTTP Errorが来たらその内容も表示するように変えました
とりあえずこれで、import時に何が起きているかはわかるはずです
時間が取れれば、takker.icon側でもimport errorの詳細を調べてみますtakker.icon
code:import_to_scrapbox.ts
// 最近のimport pages APIの応答をちゃんと調べてないので、
// 本当にimportに失敗したときのresponseを判別する方法がわからない。
// とりあえずResponseが返ってきさえすれば成功したことにする。
if (!res.ok) {
console.warn(Importing may be failed. Please check "/${importingProjectName}".);
console.warn(Status code: ${res.status} ${res.statusText});
}
console.log(Import result: ${await res.text()});
}
(type check用のダミーjson)
code:data_en_diff.json
{
"pages": [
{
"title": "For visiter of /nishio-en",
"lines": [
"For visiter of /nishio-en",
"This project /nishio-en is auto-translated from /nishio written in Japanese. I reviewed some pages but not all, due to there're 10000+ pages.", "I'm very happy to spread my thought to non-Japanese readers."
]
},
{
"title": "small stature",
"lines": [
"\u003EThere is a paper that I call \"Kozane\". The size is B8, and the paper is of any quality. (p.76)",
"\u003EI call the resulting series of pieces of paper \"kozane\"... I call each piece of paper \"kozane\" and this method \"kozane-ho\" (p.203)",
]
}
]
}
(ここにコードブロック置くの邪魔かも……どこかで切り出そうtakker.icon)
切り出しありがとうございます!takker.icon