48 lines
1002 B
JavaScript
48 lines
1002 B
JavaScript
const fetch = require('node-fetch');
|
|
|
|
// implemented from: https://github.com/HackerNews/API
|
|
|
|
const HN_PREFIX = 'https://hacker-news.firebaseio.com/v0/';
|
|
|
|
const TOP_STORIES = 'topstories';
|
|
const ITEM = 'item';
|
|
|
|
function hnFetch(type, id = '') {
|
|
const url = id
|
|
? `${HN_PREFIX}${type}/${id}.json`
|
|
: `${HN_PREFIX}${type}.json`;
|
|
return fetch(url, {
|
|
method: 'GET',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
})
|
|
.then(res => {
|
|
if (!isStatusOk(res.status)) {
|
|
throw res;
|
|
}
|
|
return res.json();
|
|
})
|
|
.then(res => res)
|
|
.catch(error => console.error(error));
|
|
}
|
|
|
|
function isStatusOk(statusCode) {
|
|
return statusCode === 200 || statusCode === 304;
|
|
}
|
|
async function main() {
|
|
const storyIds = await hnFetch(TOP_STORIES);
|
|
const stories = await Promise.all(
|
|
storyIds.slice(0, 20).map(storyId => hnFetch(ITEM, storyId))
|
|
);
|
|
|
|
console.log(
|
|
stories.map(story => {
|
|
delete story.kids;
|
|
return story;
|
|
})
|
|
);
|
|
}
|
|
|
|
main();
|