hac

hacker

Unofficial Python wrapper for official Hacker News API

Showing:

Popularity

Downloads/wk

0

GitHub Stars

137

Maintenance

Last Commit

5mos ago

Contributors

17

Package

Dependencies

0

License

MIT

Categories

Readme

haxor

travis coverall version supported license

Unofficial Python wrapper for official Hacker News API.

Installation

pip install haxor

Usage

Import and initialization:

from hackernews import HackerNews
hn = HackerNews()

Items

Stories, comments, jobs, Ask HNs and even polls are just items with unique item id.

To query item information by id:

item = hn.get_item(8863)
# >>> item.title
# 'My YC app: Dropbox - Throw away your USB drive'
# >>> item.item_type
# 'story'
# >>> item.kids
# [ 8952, 9224, 8917, ...]

Since most results are returned as integer IDs (like item.kids above), these results require further iteration. Instead of doing this yourself, use the expand flag to get object-oriented, detailed item info by id:

item = hn.get_item(8863, expand=True)
# >>> item.kids
# [<hackernews.Item: 9224 - None>, <hackernews.Item: 8952 - None>, ...]
# >>> item.by
# <hackernews.User: dhouston>

To query a list of Item IDs:

items = hn.get_items_by_ids([8863, 37236, 2345])
# >>> items
# [<hackernews.Item: 8863 - My YC app: Dropbox - Throw away your USB drive>, <hackernews.Item:
# 37236 - None>, <hackernews.Item: 2345 - The Best Buy Scam.>]

Use the item_type filter to specifically select 'story', 'comment', 'job', or 'poll' items:

items = hn.get_items_by_ids([8863, 37236, 2345], item_type='story')
# >>> items
# [<hackernews.Item: 8863 - My YC app: Dropbox - Throw away your USB drive>, <hackernews.Item: # 2345 - The Best Buy Scam.>]

Stories

The HN API allows for real-time querying for New, Top, Best, Ask HN, Show HN, and Jobs stories.

As an example, to get Item objects of current top stories:

top_stories = hn.top_stories()
# >>> top_stories
# [<hackernews.Item: 16924667 - Ethereum Sharding FAQ>, ...]

Useful Item Queries

To get current largest Item id (most recent story, comment, job, or poll):

max_item = hn.get_max_item()
# >>> max_item
# 16925673

Once again, use the expand flag to get an object-oriented, detailed Item representation:

max_item = hn.get_max_item(expand=True)
# >>> max_item
# <hackernews.Item: 16925673 - None>

To get the x most recent Items:

last_ten = hn.get_last(10)
# >>> last_ten
# [<hackernews.Item: 16925688 - Show HN: Eventbot – Group calendar for Slack teams>, ...]

Users

HN users are also queryable.

To query users by user_id (i.e. username on Hacker News):

user = hn.get_user('pg')
# >>> user.user_id
# 'pg'
# >>> user.karma
# 155040

Use the expand flag to get an object-oriented, detailed Item representation for User attributes:

user = hn.get_user('dhouston', expand=True)
# >>> user.stories
# [<hackernews.Item: 1481914 - Dropbox is hiring a Web Engineer>, ...]
# >>> user.comments
# [<hackernews.Item: 16660140 - None>, <hackernews.Item: 15692914 - None>, ...]
# >>> user.jobs
# [<hackernews.Item: 3955262 - Dropbox seeking iOS and Android engineers>, ...]

To query a list of users:

users = hn.get_users_by_ids(['pg','dhouston'])
# >>> users
# [<hackernews.User: pg>, <hackernews.User: dhouston>]

Examples

Get top 10 stories:

hn.top_stories(limit=10)

# [<hackernews.Item: 16924667 - Ethereum Sharding FAQ>, <hackernews.Item: 16925499 - PipelineDB # v0.9.9 – One More Release Until PipelineDB Is a PostgreSQL Extension>, ...]

Find all the 'jobs' post from Top Stories:

stories = hn.top_stories()
for story in stories:
    if story.item_type == 'job':
        print(story)

# <hackernews.Item: 16925047 - Taplytics (YC W14) is solving hard engineering problems in
# Toronto and hiring>
# ...
# ...

Find Python jobs from monthly who is hiring thread:

# Who is hiring - April 2018
# https://news.ycombinator.com/item?id=16735011

who_is_hiring = hn.get_item(16735011, expand=True)

for comment in who_is_hiring.kids:
    if 'python' in comment.text.lower():
        print(comment)

# <hackernews.Item: 16735358 - None>
# <hackernews.Item: 16737152 - None>
# ...
# ...

API Reference

Class: HackerNews

Parameters:

NameTypeRequiredDescriptionDefault
versionstringNospecifies Hacker News API versionv0

get_item

Description: Returns Item object

Parameters:

NameTypeRequiredDescriptionDefault
item_idstring/intYesunique item id of Hacker News story, comment etcNone
expandboolNoflag to indicate whether to transform all IDs into objectsFalse

get_items_by_ids

Description: Returns list of Item objects

Parameters:

NameTypeRequiredDescriptionDefault
item_idslist of string/intYesunique item ids of Hacker News stories, comments etcNone
item_typestringNoitem type to filter results withNone

get_user

Description: Returns User object

Parameters:

NameTypeRequiredDescriptionDefault
user_idstringYesunique user id of a Hacker News userNone
expandboolNoflag to indicate whether to transform all IDs into objectsFalse

get_users_by_ids

Description: Returns list of User objects

Parameters:

NameTypeRequiredDescriptionDefault
user_idslist of string/intYesunique user ids of Hacker News usersNone

top_stories

Description: Returns list of Item objects of current top stories

Parameters:

NameTypeRequiredDescriptionDefault
rawboolNoindicate whether to represent all objects in raw jsonFalse
limitintNospecifies the number of stories to be returnedNone

new_stories

Description: Returns list of Item objects of current new stories

Parameters:

NameTypeRequiredDescriptionDefault
rawboolNoindicate whether to represent all objects in raw jsonFalse
limitintNospecifies the number of stories to be returnedNone

ask_stories

Description: Returns list of Item objects of latest Ask HN stories

Parameters:

NameTypeRequiredDescriptionDefault
rawboolNoindicate whether to represent all objects in raw jsonFalse
limitintNospecifies the number of stories to be returnedNone

show_stories

Description: Returns list of Item objects of latest Show HN stories

Parameters:

NameTypeRequiredDescriptionDefault
rawboolNoindicate whether to represent all objects in raw jsonFalse
limitintNospecifies the number of stories to be returnedNone

job_stories

Description: Returns list of Item objects of latest Job stories

Parameters:

NameTypeRequiredDescriptionDefault
rawboolNoindicate whether to represent all objects in raw jsonFalse
limitintNospecifies the number of stories to be returnedNone

updates

Description: Returns list of Item and User objects that have been changed/updated recently.

Parameters: N/A

get_max_item

Description: Returns current largest item id or current largest Item object

Parameters:

NameTypeRequiredDescriptionDefault
expandboolNoflag to indicate whether to transform ID into objectFalse

get_all

Description: Returns all Item objects from HN

Parameters: N/A

get_last

Description: Returns list of num most recent Item objects

Parameters:

NameTypeRequiredDescriptionDefault
numintNonumbr of most recent records to pull from HN10

Class: Item

From Official HackerNews Item:

PropertyDescription
item_idThe item’s unique id.
deletedtrue if the item is deleted.
item_typeThe type of item. One of “job”, “story”, “comment”, “poll”, or “pollopt”.
byThe username of the item’s author.
submission_timeCreation date of the item, in Python datetime.
textThe comment, Ask HN, or poll text. HTML.
deadtrue if the item is dead.
parentThe item’s parent. For comments, either another comment or the relevant story. For pollopts, the relevant poll.
pollThe ids of poll's.
kidsThe ids of the item’s comments, in ranked display order.
urlThe URL of the story.
scoreThe story’s score, or the votes for a pollopt.
titleThe title of the story or poll.
partsA list of related pollopts, in display order.
descendantsIn the case of stories or polls, the total comment count.
raworiginal JSON response.

Class: User

From Official HackerNews User:

PropertyDescription
user_idThe user’s unique username. Case-sensitive.
delayDelay in minutes between a comment’s creation and its visibility to other users.
createdCreation date of the user, in Python datetime.
karmaThe user’s karma.
aboutThe user’s optional self-description. HTML.
submittedList of the user’s stories, polls and comments.
raworiginal JSON response.

Additional properties when expand is used

PropertyDescription
storiesThe user’s submitted stories.
commentsThe user's submitted comments.
jobsThe user's submitted jobs.
pollsThe user's submitted polls.
polloptsThe user's submitted poll options.

Development

For local development do pip installation of requirements-dev.txt:

pip install -r requirements-dev.txt

Testing

Run the test suite by running:

python setup.py develop
pytest tests

LICENSE

The mighty MIT license. Please check LICENSE for more details.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100