views:

163

answers:

2

I decided to write an app like: http://michaelgrinich.com/hackernews/ but for Android devices, my idea will use a web application backend (because I rather code in Python and for the web than completely in Java for Android devices).

What I have right now implemented is something like this:

$ curl -i http://localhost:8080/stories.json?page=1\&stories=1
HTTP/1.0 200 OK
Date: Sun, 25 Apr 2010 07:59:37 GMT
Server: WSGIServer/0.1 Python/2.6.5
Content-Length: 296
Content-Type: application/json

[{"title": "Don\u2019t talk to aliens, warns Stephen Hawking", "url": "http://www.timesonline.co.uk/tol/news/science/space/article7107207.ece?", "unix_time": 1272175177, "comments": 15, "score": 38, "user": "chaostheory", "position": 1, "human_time": "Sun Apr 25 01:59:37 2010", "id": "1292241"}]

The next step (and final I think) is voting, my design is doing something like this:

$ curl -i http://localhost:8080/stories/1 -d "vote=up" -u username:password

Will vote up and:

$ curl -i http://localhost:8080/stories/1 -d "vote=down" -u username:password

Vote down.

I have no idea how to do it though... I was planning to use Twill but the login link is always different, e.g.:

http://news.ycombinator.com/x?fnid=7u89ccHKln

Later the Android app will consume this API.

Any experience with programmatically browsing Hacker News?

+2  A: 

Hi. I'm the developer of http://michaelgrinich.com/hackernews/ .

It's some black magic that all happens on the device, scraping the HTML directly from news.yc. A little tricky to figure out, but not that bad. Just some cleverness and cookie management.

I decided not to use a backend server for a couple of reasons, the largest one being security. I'm certain that users wouldn't want their authentication credentials passed through a 3rd party-- especially the kinds of people around HN.

Michael Grinich
+2  A: 

Twill has a way to list all the links, and you get the links as an objects:

login_url = ''
for link in showlinks():
    if link.text == "login":
        login_url = link.url

go(login_url)

So link will be something like: http://news.ycombinator.com/x?fnid=SvdNlGQoqo

igorgue