[](http://travis-ci.org/avinassh/haxor)
[](https://coveralls.io/r/avinassh/haxor?branch=master)
[](https://pypi.python.org/pypi/haxor/)
[](https://pypi.python.org/pypi/haxor/)

Unofficial Python wrapper for official Hacker News API.
Installation
============
```python
pip install haxor
```
Usage
=====
import and initialization:
```python
from hackernews import HackerNews
hn = HackerNews()
```
Get certain user info by user id (i.e. username on Hacker News)
```python
user = hn.get_user('pg')
# >>> user.user_id
# pg
# >>> user.karma
# 155040
```
Stories, comments, jobs, Ask HNs and even polls are just items and they
have unique item id. To get info of an item by item id:
```python
item = hn.get_item(8863)
# >>> item.title
# "My YC app: Dropbox - Throw away your USB drive"
# >>> item.type
# story
# >>> item.kids
# [ 8952, 9224, 8917, ...]
```
To get item ids of current top stories:
```python
top_story_ids = hn.top_stories()
# >>> top_story_ids
# [8432709, 8432616, 8433237, ...]
```
To get current largest item id:
```python
max_item = hn.get_max_item()
# >>> max_item
# 8433746
```
Examples
========
Get top 10 stories:
```python
for story_id in hn.top_stories(limit=10):
print hn.get_item(story_id)
# <hackernews.Item: 8432709 - Redis cluster, no longer vaporware>
# <hackernews.Item: 8432423 - Fluid Actuators from Disney Research Make Soft, Safe Robot Arms>
# <hackernews.Item: 8433237 - Is Capturing Carbon from the Air Practical?>
# ...
# ...
```
Find all the 'jobs' post from Top Stories:
```python
for story_id in hn.top_stories():
story = hn.get_item(story_id)
if story.item_type == 'job':
print story
# <hackernews.Item: 8437631 - Lever (YC S12) hiring JavaScript experts, realtime systems engineers, to scale DerbyJS>
# <hackernews.Item: 8437036 - Product Designer (employee #1) to Organize the World's Code – Blockspring (YC S14)>
# <hackernews.Item: 8436584 - Django and iOS Hackers Needed – fix healthcare with Drchrono>
# ...
# ...
```
Find Python jobs from monthly who is hiring thread:
```python
# Who is hiring
# https://news.ycombinator.com/item?id=8394339
who_is_hiring = hn.get_item(8394339)
for comment_id in who_is_hiring.kids:
comment = hn.get_item(comment_id)
if 'python' in comment.text.lower():
print comment.item_id
# 8395568
# 8394964
# ...
# ...
```
API Reference
=============
Class: `HackerNews`
===================
**Parameters:**
| Name | Type | Required | Description | Default
| ---------- | ------ | --------- | ------------------------------------- | --------
| `version` | string | No | specifies Hacker News API version | `v0`
`get_item`
----------
Description: Returns `Item` object
**Parameters:**
| Name | Type | Required | Description | Default
| ---------- | --------- | -------- | ----------------------------------- | -------
| `item_id` | string/int| Yes | unique item id of Hacker News story, comment etc | None
`get_user`
----------
Description: Returns `User` object
**Parameters:**
| Name | Type | Required | Description | Default
| ------------ | -------- | ---------- | ------------------------------- | ---------
| `user_id` | string | Yes | unique user id of a Hacker News user | None
`top_stories`
-------------
Description: Returns list of item ids of current top stories
**Parameters:**
| Name | Type | Required | Description | Default
| --------- | ----- | --------- | ------------------------------------- | --------
| `limit` | int | No | specifies the number of stories to be returned | None
`new_stories`
-------------
Description: Returns list of item ids of current new stories
**Parameters:**
| Name | Type | Required | Description | Default
| --------- | ----- | --------- | ------------------------------------- | --------
| `limit` | int | No | specifies the number of stories to be returned | None
`ask_stories`
-------------
Description: Returns list of item ids of latest Ask HN stories
**Parameters:**
| Name | Type | Required | Description | Default
| --------- | ----- | --------- | ------------------------------------- | --------
| `limit` | int | No | specifies the number of stories to be returned | None
`show_stories`
-------------
Description: Returns list of item ids of latest Show HN stories
**Parameters:**
| Name | Type | Required | Description | Default
| --------- | ----- | --------- | ------------------------------------- | --------
| `limit` | int | No | specifies the number of stories to be returned | None
`job_stories`
-------------
Description: Returns list of item ids of latest Job stories
**Parameters:**
| Name | Type | Required | Description | Default
| --------- | ----- | --------- | ------------------------------------- | --------
| `limit` | int | No | specifies the number of stories to be returned | None
`updates`
--------------
Description: Returns list of item ids and user ids that have been changed/updated recently.
`get_max_item`
--------------
Description: Returns current largest item id
Class: `Item`
=============
From [Official HackerNews
Item](https://github.com/HackerNews/API/blob/master/README.md#items):
| Property | Description
| ----------- | ------------------------------------------------------------
| item_id | The item’s unique id.
| deleted | `true` if the item is deleted.
| item_type | The type of item. One of “job”, “story”, “comment”, “poll”, or “pollopt”.
| by | The username of the item’s author.
| submission_time | Creation date of the item, in Python `datetime`.
| text | The comment, Ask HN, or poll text. HTML.
| dead | `true` if the item is dead.
| parent | The item’s parent. For comments, either another comment or the relevant story. For pollopts, the relevant poll.
| kids | The ids of the 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 or poll.
| parts | A list of related pollopts, in display order.
| raw | original JSON response.
Class: `User`
=============
From [Official HackerNews
User](https://github.com/HackerNews/API/blob/master/README.md#users):
| Property | Description
| --------- | -------------------------------------------------------------
| user_id | The user’s unique username. Case-sensitive.
| delay | Delay in minutes between a comment’s creation and its visibility to other users.
| created | Creation date of the user, in Python `datetime`.
| karma | The user’s karma.
| about | The user’s optional self-description. HTML.
| submitted | List of the user’s stories, polls and comments.
| raw | original JSON response.
Development
===========
For local development do `pip` installation of `requirements-dev.txt`:
pip install -r requirements-dev.txt
LICENSE
=======
The mighty MIT license. Please check `LICENSE` for more details.
Metadata
Release files for hacker 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| hacker-0.3.1.tar.gz | 7.5 kB | Without provenance | Details for hacker-0.3.1.tar.gz |
Release files / hacker-0.3.1.tar.gz
| Download URL | hacker-0.3.1.tar.gz |
|---|---|
| Size | 7.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
99dde5752785f0fd496046dd92a7ad07755d3295ffb2c19ace442e61ed443677
|
|
BLAKE2b-256 checksum How to use checksums |
e68da7fbb6176d08f6c8d77bf0b97cf2be99d0a9fa4f641da8c093931d24b200
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for hacker 0.3.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.