I used the Algolia search API, it has extremely generous rate limits and page limits.
[0]: https://github.com/HackerNews/API [1]: https://hn.algolia.com/api [2]: https://console.cloud.google.com/bigquery?p=bigquery-public-...
There's also a Google dataset but I don't know the URL for it or if it's up to date.
What's missing precisely? Seems to be good enough for every use I could think of.
One time I even downloaded every single item from it, with a threaded fetcher of I think 16 threads, iterating from 1 up to latest ID and it was done in some like 2 hours I think.
Pseudo-code to show how simple it would be:
function get_thread(id) {
let item = http.get(`{api}/?id={id}`).body
if item.childs {
item.fetched_children = item.childs.map((id) => {
return get_thread(id)
})
}
return item
}
(untested, but you don't really need more than that, besides checking if the item was deleted)Which is why it would be preferable for the API itself to support these features.