Skip to main content

An unofficial but simple Python client for Hacker News Web API.

Project description

hackernews-client

CircleCI codebeat badge Open Source Love

Use this wrapper library to download Hacker News headlines into your Python program.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

You will need the python-requests library so we can make HTTP calls. Install with pip:

pip install requests

Installing

In your Terminal

git clone https://github.com/samisnotinsane/hackernews-client.git
cd hackernews-client

Run the example script: news.py

python news.py

this fetches:

  • Best stories
  • Search
    • story
    • comment
    • poll
    • job
  • Most recent items (last n items)

You may make another copy of this script

cp news.py ./my_copy_news.py
python my_copy_news.py

modifying it to suit your use case.

Running the tests

This package contains tests which verifies the integrity of the internal logic.

Unit tests

To run all unit tests, make sure you're in the root directory (hackernews-client). Use Python's built in unittest library

python -m unittest -v

If you have clone from master branch, these should always pass. At the time of testing, sometimes these tests failed with SSLErrors due to too many requests being made to the Hacker News API too quickly. Wait ~20 secs before running the unit tests again.

Alternatively, it could be that a breaking change was made to the Web API which would require updating this library. Feel free to raise an Issue or a Pull Request to remediate the problem.

Usage

Begin by importing the library. This example assumes you're working within news.py in the root directory of the repo.

from hackernews import hn

The client is then initialised in the following way

news_client = hn.NewsClient()

In this case, news_client object gives access to all available methods. The data contained in the methods and the instances returned all closely follow the HackerNews API.

You may retrieve a list of best 10 stories in the following way

news_client.get_best_story(fetchMax=10)

adjusting the value of fetchMax up to and including a maximum of 500.

For completeness, full documentation with examples are provided below.

Documentation

Class: NewsClient

  • get_item

Parameters:

Name Type Required Description Default
item_id int Yes unique item id of Hacker News story, comment etc None

Returns: a list of Item (each of type dict). See class documentation for Item which contains a full description of each property.

  • get_top_story

Parameters:

Name Type Required Description Default
fetchMax int Yes Number of stories to fetch, max value = 500 500

Returns: a list of top stories as Item from the url https://hacker-news.firebaseio.com/v0/topstories.json

  • get_ask_story

Parameters:

Name Type Required Description Default
fetchMax int Yes Number of stories to fetch, max value = 200 200

Returns: a list of Ask HN stories as Item from the url https://hacker-news.firebaseio.com/v0/askstories.json

  • get_new_story

Parameters:

Name Type Required Description Default
fetchMax int Yes Number of stories to fetch, max value = 500 500

Returns: a list of new stories as Item from the url https://hacker-news.firebaseio.com/v0/newstories.json

  • get_show_story

Parameters:

Name Type Required Description Default
fetchMax int Yes Number of stories to fetch, max value = 200 200

Returns: a list of Show HN stories as Item from the url https://hacker-news.firebaseio.com/v0/showstories.json

  • get_best_story

Parameters:

Name Type Required Description Default
fetchMax int Yes Number of stories to fetch, max value = 200 200

Returns: a list of best stories as Item from the url https://hacker-news.firebaseio.com/v0/beststories.json

  • get_job_story

Parameters:

Name Type Required Description Default
fetchMax int Yes Number of stories to fetch, max value = 200 200

Returns: a list of job stories as Item from the url https://hacker-news.firebaseio.com/v0/jobstories.json

  • get_max_item_id

Parameters: None

Returns: int of the largest item id from the url: https://hacker-news.firebaseio.com/v0/maxitem.json

  • get_item_by_id

Parameters:

Name Type Required Description Default
id int Yes unique Item id of Hacker News story None

Returns: Item representing the Hacker News story with given id fetched from url: https://hacker-news.firebaseio.com/v0/item/<item_id>.json

  • get_user_by_id

Parameters:

Name Type Required Description Default
id int Yes unique Item id of Hacker News story None

Returns: User representing the Hacker News user with given id fetched from url: https://hacker-news.firebaseio.com/v0/user/<user_id>.json

Class: Item

Stories, comments, jobs, Ask HNs and even polls are just items. They're identified by their ids, which are unique integers.

Field Description
id The item's unique id.
deleted true if the item is deleted.
type The type of item. One of "job", "story", "comment", "poll", or "pollopt".
by The username of the item's author.
time Creation date of the item, in Unix Time.
text The comment, story or poll text. HTML.
dead true if the item is dead.
parent The comment's parent: either another comment or the relevant story.
poll The pollopt's associated poll.
kids list of Item of this item's comments, in ranked display order.
url The URL of the story.
score The story's score, or the votes for a pollopt.
title The title of the story, poll or job.
parts A list of related pollopts, in display order.
descendants In the case of stories or polls, the total comment count.

Class: User

Users are identified by case-sensitive ids. Only users that have public activity (comments or story submissions) on the site are available through the API.

Field Description
id The user's unique username. Case-sensitive. Required.
delay Delay in minutes between a comment's creation and its visibility to other users.
created Creation date of the user, in Unix Time.
karma The user's karma.
about The user's optional self-description. HTML.
submitted List of the user's stories, polls and comments.

Screenshot

Hacker News Client

Authors

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

  • Author of haxor whose library inspired me to make my first Python library
  • Author of python-packaging whose tutorial helped me get my head around the Python import system

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hackernews-client-0.1.2b1.tar.gz (8.1 kB view details)

Uploaded Source

File details

Details for the file hackernews-client-0.1.2b1.tar.gz.

File metadata

  • Download URL: hackernews-client-0.1.2b1.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.34.0 CPython/3.7.3

File hashes

Hashes for hackernews-client-0.1.2b1.tar.gz
Algorithm Hash digest
SHA256 854e9a97808bdff4cd5acfbdf07644f0ddd0ba9136a521a3c42ac587fc02524d
MD5 5d70ce23b27893f8505f3508334f4adb
BLAKE2b-256 d2c58cb8d095743698272937551b1bed0b79d899d8c8f9d550407e499c3d5abf

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page