1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { iframeHandler } from "https://esm.town/v/nbbaier/iframeHandler";
import { hololiveAnniversaryData } from "https://esm.town/v/stu43005/hololiveAnniversaryData";
import process from "node:process";
import { createEvents, EventAttributes } from "npm:ics";
export async function hololiveAnniversaryIcs(req: Request) {
// if (
// req.url
// && new URL(req.url).searchParams.get("token")
// !== process.env.apiSecretToken
// ) {
// return new Response(null, {
// status: 401,
// });
// }
const data = hololiveAnniversaryData;
const { error, value } = createEvents(data.map((item): EventAttributes => {
const [mm, dd] = item.日付.split("/").map((v) => parseInt(v, 10));
const start = new Date();
start.setMonth(mm - 1);
start.setDate(dd);
const end = new Date(start);
end.setDate(end.getDate() + 1);
const title = `${item.メンバー} ${item["出来事 活動歴"]}`;
const description = Object.entries(item).map((v) => `${v[0]}${v[1]}`).join(
"\n",
);
return {
calName: "ホロライブ記念日",
title,
description,
url: "https://seesaawiki.jp/hololivetv/d/%B5%AD%C7%B0%C6%FC",
start: [start.getFullYear(), start.getMonth() + 1, start.getDate()],
end: [end.getFullYear(), end.getMonth() + 1, end.getDate()],
recurrenceRule: "FREQ=YEARLY",
};
}));
if (error) {
return new Response(JSON.stringify(error), {
status: 500,
});
}
return new Response(value, {
headers: {
"Content-Type": "text/calendar",
},
});
}
export default iframeHandler(hololiveAnniversaryIcs);