Project

tiny_hnews

0.0
No release in over 3 years
A command-line tool to fetch and display top stories from Hacker News, including comments and article content.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

>= 0
>= 0
>= 0

Runtime

 Project Readme

TinyHNews

A Ruby wrapper for the Hacker News API that fetches and displays top stories with comments and article content.

Features

  • Fetch top stories, new stories, and best stories from Hacker News
  • Extract story details including title, author, score, comments
  • Scrape and convert article content to Markdown
  • Fetch nested comments with configurable depth and limits
  • Command-line interface for easy terminal usage
  • Support for concise output mode

Installation

Add this line to your application's Gemfile:

gem 'tiny_hnews'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install tiny_hnews

Usage

Command Line Interface

The gem provides a tinyhn command for terminal usage:

# Fetch 5 top stories with default settings
$ tinyhn

# Fetch 10 stories with deeper comments
$ tinyhn -n 10 -d 3 -l 20

# Show concise output (titles and metadata only)
$ tinyhn -c

# Show only first 100 lines of each article
$ tinyhn --lines 100

Command Line Options

  • -n, --number NUMBER: Number of top stories to fetch (default: 5)
  • -d, --depth DEPTH: Depth of comments to fetch (default: 2)
  • -l, --limit LIMIT: Limit number of comments per story (default: 10)
  • -c, --concise: Only show titles and metadata
  • --lines NUMBER: Number of lines of the article to show (default: 50)
  • -v, --version: Show version
  • -h, --help: Show help

Ruby API

Fetch Top Stories

require 'tiny_hnews'

# Create a TopStories instance with custom options
top_stories = TinyHNews::TopStories.new(
  number_of_stories: 10,
  comments_depth: 2,
  comments_limit: 20
)

# Fetch the stories
top_stories.fetch

# Access the stories
top_stories.stories.each do |story|
  puts "Title: #{story.title}"
  puts "Author: #{story.by}"
  puts "Score: #{story.score}"
  puts "URL: #{story.url}"
  puts "Comments: #{story.comments.size}"
  puts "Article preview: #{story.article&.split("\n")&.first}"
  puts "---"
end

Fetch Individual Stories

# Fetch a specific story by ID
story =
  TinyHNews::Story.new(
    id: 12345,
    comments_depth: 3,
    comments_limit: 50
  ).wrap

puts story.title
puts story.article
story.comments.each { |comment| puts "- #{comment}" }

Story Object Properties

Each Story object provides access to the following properties:

  • id: Story ID
  • title: Story title
  • by: Author username
  • url: Story URL
  • text: Story text (for Ask HN, etc.)
  • score: Story score
  • time: Unix timestamp
  • descendants: Number of descendants (comments)
  • type: Item type (story, comment, etc.)
  • kids: Array of comment IDs
  • comments: Array of formatted comment texts
  • article: Scraped article content in Markdown format

Dependencies

  • faraday: HTTP client for API requests
  • json: JSON parsing
  • reverse_markdown: HTML to Markdown conversion

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Testing

Run the test suite with:

$ bundle exec rake test

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/fguillen/TinyHNews.

License

The gem is available as open source under the terms of the MIT License.