diff options
| -rw-r--r-- | scripts/fetch-logoform-events.mjs | 82 | ||||
| -rw-r--r-- | src/data/schedule/events.json | 4 |
2 files changed, 84 insertions, 2 deletions
diff --git a/scripts/fetch-logoform-events.mjs b/scripts/fetch-logoform-events.mjs new file mode 100644 index 0000000..f499d47 --- /dev/null +++ b/scripts/fetch-logoform-events.mjs @@ -0,0 +1,82 @@ +// LoGoフォーム(小平市)の手続き一覧を取得する。 +// +// LoGoフォームのページ自体は自動アクセス防止(TRUSTBANKの確認画面)で +// ブラウザから開けないことがある。一方、一覧のAPIは直接呼べる。 +// ただし Node の fetch では 403 になるため、curl を使って取得している。 +// +// 使い方: +// node scripts/fetch-logoform-events.mjs # イベント情報(procedure id 49006) +// node scripts/fetch-logoform-events.mjs 48668 # 電子申請(手続き一覧) +// node scripts/fetch-logoform-events.mjs 49006 --json +// +// procedure id は、手続きページの設定に "id" として入っている。 +// 2517(イベント情報)は 49006、666(電子申請)は 48668。 + +import { execFileSync } from 'node:child_process'; + +const DEFAULT_ID = '49006'; +const args = process.argv.slice(2); +const asJson = args.includes('--json'); +const procedureId = args.find((a) => /^\d+$/.test(a)) ?? DEFAULT_ID; + +const PAGE = procedureId === '48668' + ? 'https://logoform.jp/procedure/exdH/666' + : 'https://logoform.jp/procedure/exdH/2517'; + +const UA = + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'; + +const curlArgs = [ + '-s', + '--max-time', + '30', + '-X', + 'POST', + '-H', + 'Content-Type: application/json', + '-H', + 'Accept: application/json', + '-H', + `Referer: ${PAGE}`, + '-H', + `User-Agent: ${UA}`, + // 空のオブジェクトで全件返る。page などの項目を足すと「不明な項目」で弾かれる。 + '-d', + '{}', + `https://logoform.jp/api/procedure/branch/detail/search/${procedureId}`, +]; + +let raw; +try { + raw = execFileSync('curl', curlArgs, { encoding: 'utf8', maxBuffer: 20 * 1024 * 1024 }); +} catch (error) { + console.error('curl の実行に失敗しました。curl が使えるか確認してください。'); + console.error(String(error).slice(0, 300)); + process.exit(1); +} + +let data; +try { + data = JSON.parse(raw); +} catch { + console.error('JSONとして読めませんでした(自動アクセス防止の画面が返っている可能性があります)。'); + console.error(raw.slice(0, 300)); + process.exit(1); +} + +const items = Array.isArray(data.items) ? data.items : []; + +if (asJson) { + console.log(JSON.stringify(items, null, 2)); + process.exit(0); +} + +console.log(`procedure_id=${procedureId} 件数=${items.length}`); +for (const item of items) { + const description = (item.description ?? '').replace(/\s+/g, ' ').trim(); + console.log( + `- [${item.category_name}] ${item.procedure_name}` + + (description ? `\n ${description.slice(0, 120)}` : '') + + `\n https://logoform.jp${item.form_url ?? ''}`, + ); +} diff --git a/src/data/schedule/events.json b/src/data/schedule/events.json index 380b42d..b556efc 100644 --- a/src/data/schedule/events.json +++ b/src/data/schedule/events.json @@ -582,10 +582,10 @@ "source": "市報こだいら10月20日号6面" }, { - "date": "12月15日(火)", + "date": "11月25日(水)", "title": "📚 小平市事業承継セミナー「事業承継への第一歩」", "place": "午後3時から午後4時30分まで/中央公民館 講座室1", - "note": "事業を営んでいる方や従業員・ご家族の方。定員25人(先着順)。11月20日(金)までに<a href=\"https://logoform.jp/form/exdH/1775138\">申込みフォーム</a>または産業振興課 042-346-9534へ", + "note": "事業を営んでいる方や従業員・ご家族の方。定員25人(先着順)。事業承継のリアルから見る準備の大切さ、支援策の紹介。11月20日(金)までに<a href=\"https://logoform.jp/form/exdH/1775138\">申込みフォーム</a>または産業振興課 042-346-9534へ。共催は東京都多摩地域事業承継・引継ぎ支援センター、小平商工会", "source": "<a href=\"https://logoform.jp/form/exdH/1775138\">LoGoフォーム</a>" }, { |
