summaryrefslogtreecommitdiff
path: root/feed.ts
blob: c30c179c2934edc1c9f8df43538efb1843ecf709 (plain) (blame)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*** IMPORT ------------------------------------------- ***/

import { ATOM, JSON, RSS } from "src/utility/feed/index.ts";
import { join } from "dep/std.ts";

/*** UTILITY ------------------------------------------ ***/

import {
  author,
  description,
  email,
  feedDirectory,
  memoDirectory,
  title,
  url
} from "src/utility/constant.ts";

import { default as headerParser, type DocumentMeta } from "src/helper/parse-header.ts";

import getDocuments from "src/helper/get-documents.ts";
import populateDocument from "src/helper/populate-document.ts";

const atomFeed = new ATOM({
  authors: [
    {
      email,
      name: author
    }
  ],
  description,
  id: `${url}/feed/atom`,
  link: `${url}/feed/atom`,
  title,
  updated: undefined
});

const jsonFeed = new JSON({
  authors: [
    {
      email,
      name: author
    }
  ],
  description,
  feed: `${url}/feed/json`,
  link: url,
  title
});

const rssFeed = new RSS({
  authors: [
    {
      email,
      name: author
    }
  ],
  description,
  id: `${url}/feed/rss`,
  link: `${url}/feed/rss`,
  title
});

/*** PROGRAM ------------------------------------------ ***/

createFeeds();

async function createFeeds() {
  await Deno.mkdir(feedDirectory, { recursive: true });

  const feedPosts: DocumentMeta[] = [];
  const filenames = await getDocuments(memoDirectory);

  if (!filenames)
    return;

  for await (const filename of filenames) {
    const document = await populateDocument({ filename });
    const postInfo = headerParser(document);

    feedPosts.push(postInfo);

    if (document) {
      const fullUrl = `${url}/${filename.split(".txt")[0]}`;
      const postDate = new Date(new Date(postInfo.date).setHours(24, 0, 0, 0));

      atomFeed.addItem({
        content: { body: postInfo.abstract },
        id: fullUrl,
        link: fullUrl,
        summary: postInfo.abstract,
        title: postInfo.title,
        updated: postDate
      });

      jsonFeed.addItem({
        content_html: postInfo.abstract,
        date_published: postDate,
        id: fullUrl,
        title: postInfo.title,
        url: fullUrl
      });

      rssFeed.addItem({
        content: { body: postInfo.abstract },
        description: postInfo.abstract,
        id: fullUrl,
        link: fullUrl,
        title: postInfo.title,
        updated: postDate
      });
    }
  }

  // const latestPostDate = feedPosts[0].date;
  // atomFeed.updated = new Date(latestPostDate);
  // rssFeed.updated = new Date(latestPostDate);

  Deno.writeTextFileSync(join(feedDirectory, "index.xml"), atomFeed.build());
  Deno.writeTextFileSync(join(feedDirectory, "index.json"), jsonFeed.build());
  Deno.writeTextFileSync(join(feedDirectory, "index.rss"), rssFeed.build());

  console.log("Feeds written");
}