解決済み: inoue2002がpull request出してくれた Scrapbox-Duplicator を GitHub Action で使う
設定していく
>Importing 5978 pages to "/***"...
> error: Uncaught (in promise) undefined when importing pages: import failed
> const error = new Error();
> at file:///home/runner/work/Scrapbox-Duplicator/Scrapbox-Duplicator/index.ts:52:19
> at eventLoopTick (ext:core/01_core.js:189:11)
> Error: Process completed with exit code 1.
なんでだろう?env系は正しそう
/tkgshn-private
から引っ張ってくるところまではいけてるけど、 /tkgshn
に入れることはできてないっぽい
他のプロジェクトでやってみると、動いた。
/tkgshn-stuff
(ほぼページがない)から引っ張ってきて、
/tkgshn
に流すのはいけた

ローカルで実行する方法がわからなかったため、

の環境でdebugは出来ていない。
仮説としては、「importする量が多すぎる」気がする
>
既存のDESTINATION_PROJECT_NAMEと、SOURCE_PROJECT_NAMEの差分がある場合はそれを反映して、ない場合は何もしないようにコードを書き換えて欲しい。
>
既存の DESTINATION_PROJECT_NAME
と SOURCE_PROJECT_NAME
の差分を確認し、差分がある場合のみ反映するようにコードを変更するには、まず両方のプロジェクトからページをエクスポートして、それらを比較する機能を追加する必要があります。以下に、そのための基本的なアプローチを示します。
> 1. **両プロジェクトからページをエクスポート**:
> まず、 exportPages
関数を使用して、 SOURCE_PROJECT_NAME
と DESTINATION_PROJECT_NAME
からページをエクスポートします。
> エクスポートされたページを比較して、 SOURCE_PROJECT_NAME
に存在し、 DESTINATION_PROJECT_NAME
に存在しないページを特定します。
> 差分があるページのみを importPages
関数を使用して DESTINATION_PROJECT_NAME
にインポートします。
> 以下は、このプロセスを実装するための疑似コードです。実際のコードには、エラーハンドリングやAPIの制限に対応するための追加のロジックが必要になる場合があります。
> async function exportProjectPages(projectName: string): Promise<Page[]> {
> const result = await exportPages(projectName, { sid, metadata: true });
> throw new Error( Error exporting pages from ${projectName}
);
> return result.value.pages;
> async function findNewPages(sourcePages: Page[], destinationPages: Page[]): Promise<Page[]> {
> const destinationTitles = new Set(destinationPages.map(page => page.title));
> return sourcePages.filter(page => !destinationTitles.has(page.title));
> const sourcePages = await exportProjectPages(exportingProjectName);
> const destinationPages = await exportProjectPages(importingProjectName);
> const newPages = await findNewPages(sourcePages, destinationPages);
> if (newPages.length === 0) {
> console.log("No new pages to import.");
> console.log( Importing ${newPages.length} new pages to "${importingProjectName}"...
);
> このコードは、 SOURCE_PROJECT_NAME
と DESTINATION_PROJECT_NAME
の両方からページをエクスポートし、タイトルを基にして新しいページを特定し、それらのページのみをインポートします。実際の実装では、ページの内容も比較する必要があるかもしれませんが、これはAPIの提供する情報と、どの程度の差分を重要とみなすかに依存します。
これを適用したかったけど、denoとかがよくわからんくてローカルで実行できていない。
まじか

なんだろう
ソースコード自体はいじってないからなぁ
特定のpublic先に送れないってことか
特定の~というよりかは、自分の場合だと
/tkgshn
には入る。でも、ページ数が多いプロジェクトから引っ張ってくると(多分反映する数が多くなると)動かない

あと今思ったんだけど、スクリプトのlogのせいで、非公開のページのタイトルもGitHubActionsで他人に見られてしまうな
消しちゃってもいいかもね

あー、
importproject/***
になるけど、タイトルは見れるようになってるのね

入れる枚数の問題かな? youkan-brain
から inoue2002
に移動してるんだけど、非公開3700で、そこから公開しているのが300ぐらいしかないから、二人との違いでいうとそこな気がする?
これは試したけど違うみたい

「
/blu3moの中身をコピーしたプロジェクトA → プロジェクトB」のケースでduplicatorはうまく動いた
なので、原因はページ数でもページ内容でもない
原因は部分的に分かった

titles[CMU](Carnegie Mellon University)
-.icon
[NYU](New York University)
https://www.mitpressjournals.org › doi
/icons/わかる.icon
nota kyoto [N34.7433886,E135.7677893,Z17] https://dl.acm.org/doi/pdf/10.1145/2598153.2598170 https://www.teenvogue.com/story/digital-blackface-reaction-gifs
これらのタイトルは、①何かしらのハックを狙って作ったもの ② https://
を含むURL のどちらか
確認したこと
これらのタイトルを持つページを今作ろうとすると、何かしらのフォーマットの処理がされる
( [ ]
を外すとか、 .icon
を消すとか、 https://
を消すとか)
手動でexport → importした場合も同様に、何かしらの処理がされる
予想
これらのページは、昔(フォーマットの処理がscrapboxに実装するより前)に作られたillegalなタイトル
APIを叩く形でexport → importした場合に、その処理が入らない代わりにエラーが起きるのだと思う
案1. https://
から始まるタイトルから https://
を削除する

が勝手に編集してそれらを削除したので、
一旦まずduplicator実行してみて欲しいダメなら2へ
あ、そういうことか。


案2. タイトルに [ ]
が含まれるページのタイトルを編集する
この辺
消してみた

>Uncaught (in promise) undefined when importing pages: import failed
を見るにどこか特定のページが悪さをしている説ある?
importしようとしたページがundefinde的な
追記
> const res = await fetch(
> at async mainFetch (ext:deno_fetch/26_fetch.js:277:12)
> at async fetch (ext:deno_fetch/26_fetch.js:504:7)
> at async file:///home/runner/work/Scrapbox-Duplicator/Scrapbox-Duplicator/index.ts:46:18
> Error: Process completed with exit code 1.
Scrapboxのリミットに引っかかったと思ったら、
/tkgshn
には反映されていた

これは多分問題ないはず

なぜかconnection closedになってしまうけど、scrapbox側でのimport処理は問題なく行われているかと思う

つまり、同じerror?

connection closed before message completed
は僕の環境でも今も発生するけど、動いているので一旦よしとする

了解、終戦とします!!

終戦ナイス!お疲れ様でした!

