46 lines
981 B
JavaScript
46 lines
981 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()
|