Avatar

akkartik

Building programs that are useful, easy to install, easy to run, easy to modify, easy to share.
14 public vals
Joined September 17, 2022
1
2
3
import { testHNAlert } from "https://esm.town/v/akkartik/testHNAlert";
export let testHNEmail = JSON.stringify(testHNAlert, null, 2);
1
2
3
4
5
6
7
8
9
10
11
import { postprocessHNitem } from "https://esm.town/v/akkartik/postprocessHNitem";
import { hnfollow } from "https://esm.town/v/akkartik/hnfollow";
import { hnSearch } from "https://esm.town/v/stevekrouse/hnSearch?v=16";
export let getNewHNPosts = async (timeInterval) => {
let results = await hnSearch({
tags: hnfollow,
numericFilters: `created_at_i>${(Date.now() - timeInterval) / 1000}`,
});
return Promise.all(results.hits.map(postprocessHNitem));
};
1
2
3
4
5
6
7
export let postprocessHNitem = (x) => {
x.story_hn_url = "<https://news.ycombinator.com/item?id=" + x.story_id + ">";
delete x._highlightResult;
delete x.created_at_i;
delete x._tags;
return x;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { email } from "https://esm.town/v/std/email?v=9";
import { hnEmail } from "https://esm.town/v/akkartik/hnEmail";
import { hnFollowLastSyncTime } from "https://esm.town/v/akkartik/hnFollowLastSyncTime";
import { hnAuthors } from "https://esm.town/v/akkartik/hnAuthors";
import { hnLatestPosts } from "https://esm.town/v/stevekrouse/hnLatestPosts?v=18";
export const hnFollow = async () => {
// poll using @stevekrouse's helper function
let posts = await hnLatestPosts({
authors: hnAuthors,
lastSyncTime: hnFollowLastSyncTime,
search_by_date: true,
});
// if there are results, email yourself
if (!posts?.length) {
return;
}
let { text, subject } = await hnEmail({ posts });
await email({ html: text, subject });
};
Next