diff --git a/extra/hacker-news/hacker-news.factor b/extra/hacker-news/hacker-news.factor index 692b5ce138..c22a77ba44 100644 --- a/extra/hacker-news/hacker-news.factor +++ b/extra/hacker-news/hacker-news.factor @@ -1,26 +1,26 @@ ! Copyright (C) 2012 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs classes.tuple colors.constants -colors.hex combinators formatting fry hashtables http.client io -io.styles json json.reader kernel make math math.parser -sequences splitting ui urls ; +colors.hex combinators concurrency.combinators formatting fry +hashtables http.client io io.styles json json.reader kernel make +math math.parser sequences splitting ui urls ; IN: hacker-news f ( obj -- obj/f ) - dup json-null = [ drop f ] when ; +: hacker-news-recent-ids ( -- seq ) + "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty" + http-get nip json> ; -: hacker-news-items ( n -- seq ) - [ - "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty" - http-get nip json> - ] dip head - [ - number>string - "https://hacker-news.firebaseio.com/v0/item/" ".json?print=pretty" surround - http-get nip json> - ] parallel-map ; +: hacker-news-id>json-url ( n -- url ) + number>string + "https://hacker-news.firebaseio.com/v0/item/" ".json?print=pretty" surround ; + +: hacker-news-items ( seq -- seq' ) + [ hacker-news-id>json-url http-get nip json> ] parallel-map ; + +: hacker-news-recent-items ( n -- seq ) + [ hacker-news-recent-ids ] dip head hacker-news-items ; : write-title ( title url -- ) '[ @@ -57,9 +57,13 @@ PRIVATE> [ dup "by" of [ " by " write-text [ "by" of ] [ post>user-url ] bi write-link ] [ drop ] if ] ! [ dup postedAgo>> [ " " write-text postedAgo>> write-text ] [ drop ] if ] [ - " | " write-text - [ "descendants" of [ "discuss" ] [ "%d comments" sprintf ] if-zero ] - [ post>comments-url ] bi write-link nl nl + dup "decendants" of [ + " | " write-text + [ "descendants" of [ "discuss" ] [ "%d comments" sprintf ] if-zero ] + [ post>comments-url ] bi write-link + ] [ + drop + ] if nl nl ] } cleave ; @@ -74,6 +78,6 @@ PRIVATE> } assoc-union format nl ; : hacker-news. ( -- ) - 25 hacker-news-items + 30 hacker-news-recent-items banner. [ 1 + post. ] each-index ;