-
Notifications
You must be signed in to change notification settings - Fork 1
/
server.js
122 lines (104 loc) · 2.6 KB
/
server.js
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
import compression from "compression";
import express from "express";
const app = express();
const keys = require("./keys.json");
const port = process.env.PORT || 8080;
const snoowrap = require("snoowrap");
app.use(compression());
app.enable("trust proxy");
const reddit = new snoowrap(keys);
let current = 0;
let length = 0;
let newStories = [];
let stories = [];
const getComments = story => {
reddit
.getSubmission(story.id)
.fetch()
.then(post => {
current += 1;
for (let comment of post.comments) {
if (comment.author.name === "autotldr") {
const description = comment.body_html.substr(
comment.body_html.indexOf("<blockquote>") + 13,
comment.body_html.indexOf("</blockquote>") -
comment.body_html.indexOf("<blockquote>") -
13
);
const image =
post.preview && post.preview.images && post.preview.images[0]
? post.preview.images[0].resolutions[3]
: [];
newStories = [
...newStories,
{
description,
domain: post.domain,
id: post.id,
image,
position: post.position,
title: post.title,
url: post.url
}
];
}
if (current >= length && length > 0) {
current = 0;
length = 0;
if (newStories.length < 5) {
newStories.concat(stories.slice(0, 5 - newStories.length));
}
stories = newStories;
}
}
});
};
const getStories = () => {
reddit
.getSubreddit("worldnews")
.getHot({
limit: 50
})
.then(posts => {
newStories = [];
length = posts.length;
for (var i = 0; i < posts.length; i++) {
getComments({
...posts[i],
position: i
});
}
});
};
getStories();
setInterval(() => {
getStories();
}, 60000);
app.get("/worldnews", (req, res) => {
res.send({ stories });
});
app.use((req, res, next) => {
if (
req.secure ||
req.headers.host === `localhost:${port}` ||
req.url.includes("/.well-known/acme-challenge/")
) {
next();
} else {
res.redirect(`https://${req.headers.host}${req.url}`);
}
});
app.get(
`/.well-known/acme-challenge/${process.env.LETS_ENCRYPT_ROUTE}`,
(req, res) => {
res.send(process.env.LETS_ENCRYPT_VERIFICATION);
}
);
app.use(express.static("./build"));
app.listen(port, err => {
if (err) {
console.log(err);
return;
}
console.log(`App and API is live at http://localhost:${port}`);
});