Scrapbox-Duplicator
projectから別のprojectにpublic.iconがついてるページを複製する
mouii.iconはtsどころかjavascriptもわかんない素人なので気をつけてね
結局Herokuって金がかかるし手元にサーバあるじゃんという結論になり、ローカルで実施することになった。
わかりやすいので参照
1. Denoのインストール
2. git clone
3. index.tsを直接イジるかenvにSIDなどをいれる
4. 実行コマンド
$ deno run --allow-net=scrapbox.io --allow-read=/ --allow-write=/ --allow-env index.ts
定期実行用script
code:sb-duplicator.sh
# ログと日時定義
log_file="/var/log/sb_duplicator.log"
date=$(TZ='Asia/Tokyo' date +%Y%m%d-%H%M)
# git cloneした先かな?自分のindex.tsがある場所にすればいい
INSTALL_DIR="/root/Scrapbox-Duplicator"
backup_result=0
# 開始宣言
echo "${date}: duplicate start!" >> "$log_file"
backup_result=$?
# 移動(なんでディレクトリ移動してるんだろうね)
cd "$INSTALL_DIR" 2>> "$log_file"
backup_result=$((backup_result + $?))
# 複製処理
deno run --allow-net=scrapbox.io --allow-read --allow-write --allow-env index.ts 2>> "$log_file"
backup_result=$((backup_result + $?))
# 結果を報告
echo "${date}: Duplication succeeded!" >> "$log_file"
else
echo "${date}: Duplication failed!" >> "$log_file"
fi
exit $backup_result
mouii.iconはfailedのときはメール通知とかも入れているけど要らないかもね
$ crontab e
0 3 * * * /root/sb-duplicator.sh
2024/7/28
勝手にclaudeに改造してもらって任意のパスにexportしたデータを保存するようにした
つまりバックアップ兼用とした
ローカル専用ということ
License関連の記載見つからず&誰か使うかなということで公開していますが何かあれば即消します
code:index.ts
import { assertString, exportPages, importPages } from "./deps.ts";
const sid = "直接突っ込むか参照させる";
const exportingProjectName = "同上"; //インポート元(本来はprivateプロジェクト)
const importingProjectName = "同上"; //インポート先(publicプロジェクト)
const shouldDuplicateByDefault =
Deno.env.get("SHOULD_DUPLICATE_BY_DEFAULT") === "False"; //Falseにしないと全部見えちゃう
assertString(sid);
assertString(exportingProjectName);
assertString(importingProjectName);
console.log(Exporting a json file from "/${exportingProjectName}"...);
const result = await exportPages(exportingProjectName, {
sid,
metadata: true,
});
if (!result.ok) {
const error = new Error();
error.name = ${result.value.name} when exporting a json file;
error.message = result.value.message;
throw error;
}
const { pages } = result.value;
console.log(Export ${pages.length} pages:);
for (const page of pages) {
console.log(\t${page.title});
}
// added 24-07-23 for saving backup to local
const backupDir = "バックアップ保存先のパス";
await ensureDir(backupDir);
const backupPath = ${backupDir}/${exportingProjectName}_backup_${Date.now()}.json;
await Deno.writeTextFile(backupPath, JSON.stringify(result.value, null, 2));
console.log(Backup saved to ${backupPath});
const importingPages = pages.filter(({ lines }) => {
if (lines.some((line) => line.text.includes("private.icon"))) {
return false;
} else if (lines.some((line) => line.text.includes("public.icon"))) {
return true;
} else {
return shouldDuplicateByDefault;
}
});
if (importingPages.length === 0) {
console.log("No page to be imported found.");
} else {
console.log(
Importing ${importingPages.length} pages to "/${importingProjectName}"...,
);
const result = await importPages(importingProjectName, {
pages: importingPages,
}, {
sid,
});
if (!result.ok) {
const error = new Error();
error.name = ${result.value.name} when importing pages;
error.message = result.value.message;
throw error;
}
console.log(result.value);
}
old
Herokuへの導入手順
1. githubでblu3mo氏のレポジトリをforkする
2. レポジトリのsettingsでsecret3種を追加する
3. herokuを開く
アカウント作ってカードとか入れとく
4. アプリを作成からデプロイ…
できない!
原因:Denoのビルドがデフォルトだと有効になっとらん。 5. 再度ビルドを試みるとできるはず
7. github actionからテスト、github actionでcronの設定
だったのだがmouii.iconはローカルで動かしている
public.icon