An API over Hacker News http://stillmaintained.com/bolthar/ruby-hackernews.png == Requirements mechanize (>= 1.0.0) require_all (>= 1.1.0) == Installation gem install ruby-hackernews then, in your script: require 'ruby-hackernews' before using it. == Entries You can get entries on the main page with: Entry.all # returns the main page's entries as an array You can provide a number of pages: Entry.all(3) # will return the entries on the first 3 pages There are methods for getting specific entry types: Entry.questions # gets the first page of questions (ask NH) Entry.newest # gets the first page of new links (new) Entry.jobs # gets the first page of job offerts (jobs) Each Entry instance has the following data: entry = Entry.all.first # gets the top entry on the mainpage entry.number # the entry's position on HN entry.link.title # the link's name on HN entry.link.href # the actual link entry.link.site # the referring site, if any entry.voting.score # the entry's score on HN entry.user.name # the submitter's user name entry.time # the elapsed time from submission After you've logged in (see below) you can do the following entry.upvote # votes the entry entry.write_comment("mycomment") # adds a comment to the entry Entry.submit("mytitle", "myurl") # submit a new link Entry.submit("myquestion", "question text") # submit a new question user.submissions.first.comments_url # returns the url to the current user's comments == Comments You get an entry's comments with: entry.comments Note that the method above will send a request to HN. If you just need the comments' count or url, you can instead use: entry.comments_count and entry.comment_url Either of which will not issue a request to HN's site. You can also get the newest comments on HN with: Comments.newest Comments.newest(3) # gets the first 3 pages of new comments Each Comment instance has the following data: comment = Entry.all.first.comments.first # gets the first comment of the first entry on HN's main page comment.text # comment's body comment.user.name # poster's user name on HN comment.voting.score # comment's score Comments are enumerable and threaded, so you can do like: comment[2][0] # gets the third reply to this comment, then the first reply to the reply comment.first # gets the first reply to this comment comment.select do |c| # gets all the comment replies which text contains "test" text ~= /test/ end comment.parent # gets the comment's parent (nil if no parent) Once you're logged in (see below), you can do the following: comment.upvote comment.downvote comment.reply("mycomment") == Logging in You define a user with: user = User.new("username") Then, you log in with: user.login("password") Or, you can create a new use with that name: user.signup("password") # don't abuse this! You will be also logged in with the new user. So, no need to call user#login after user#signup. You can log out with: user.logout You have to log out before logging in with a different user. You can also get the current users submission list by doing this: user.submissions This will return a new Entry instance. For example: user.submissions.first.comment_url Will return the HN comment url of the last submitted story of that user == TO DO Get user info (comments, saved) Change user info/settings == THANKS TO - Mike Kelly ( https://github.com/mikekelly ) for fixing a bug in TimeInfo.time - Marc Köhlbrugge ( http://github.com/marckohlbrugge ) fox fixing and formatting the documentation - Peter Cooper ( http://github.com/peterc ) for bug reports - Peter Boctor ( http://github.com/boctor ) for fixing a bug about authentication - Josh Ellington ( http://github.com/joshellington ) for reporting a bug about job entries - Wayne ( http://github.com/BlissOfBeing ) for adding User.submissions, Entry.comments_url and cleaning up the Rakefile - Daniel Da Cunha ( http://github.com/ddacunha ) for a fix on Entry#comments_count