]> gitweb.factorcode.org Git - factor.git/commitdiff
hacker-news: use new hackernews api on firebase.
authorDoug Coleman <doug.coleman@gmail.com>
Thu, 30 Jul 2015 04:05:20 +0000 (21:05 -0700)
committerDoug Coleman <doug.coleman@gmail.com>
Thu, 30 Jul 2015 04:05:20 +0000 (21:05 -0700)
extra/hacker-news/hacker-news.factor

index e7faaccf38a2779778b1ed1d0c4f046e49b85a08..692b5ce138fb214bb83d4f5860e7e00b7294fe50 100644 (file)
@@ -6,27 +6,21 @@ io.styles json json.reader kernel make math math.parser
 sequences splitting ui urls ;
 IN: hacker-news
 
-TUPLE: post title postedBy points id url commentCount postedAgo ;
-
 <PRIVATE
 
 : json-null>f ( obj -- obj/f )
     dup json-null = [ drop f ] when ;
 
-: items> ( seq -- seq' )
+: hacker-news-items ( n -- seq )
     [
-        \ post from-slots
-        [ json-null>f ] change-postedAgo
-        [ json-null>f ] change-postedBy
-        dup url>> "/comments" head? [
-            dup url>> "/" split last string>number >>id
-            "self" >>url
-        ] when
-    ] map ;
-
-: hacker-news-items ( -- seq )
-    "http://api.ihackernews.com/page" http-get nip
-    json> "items" of items> ;
+        "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 ;
 
 : write-title ( title url -- )
     '[
@@ -44,31 +38,27 @@ TUPLE: post title postedBy points id url commentCount postedAgo ;
     H{ { foreground HEXCOLOR: 888888 } } format ;
 
 : post>user-url ( post -- user-url )
-    postedBy>> "http://news.ycombinator.com/user?id=" prepend >url ;
+    "by" of "http://news.ycombinator.com/user?id=" prepend >url ;
 
 : post>comments-url ( post -- user-url )
-    id>> "http://news.ycombinator.com/item?id=%d" sprintf >url ;
+    "id" of "http://news.ycombinator.com/item?id=%d" sprintf >url ;
 
 ! Api is funky, gives id=0 and /comment/2342342 for self-post ads
 : post>url ( post -- url )
-    dup url>> "self" = [
-        post>comments-url
-    ] [
-        url>> >url
-    ] if ;
+    dup "url" of "self" = [ post>comments-url ] [ "url" of >url ] if ;
 
 PRIVATE>
 
 : post. ( post index -- )
     "%2d. " sprintf write-text {
-        [ [ title>> ] [ post>url ] bi write-title ]
+        [ [ "title" of ] [ "url" of ] bi write-title ]
         [ post>url host>> " (" ")" surround write-text nl ]
-        [ points>> "    %d points" sprintf write-text ]
-        [ dup postedBy>> [ " by " write-text [ postedBy>> ] [ post>user-url ] bi write-link ] [ drop ] if ]
-        [ dup postedAgo>> [ " " write-text postedAgo>> write-text ] [ drop ] if ]
+        [ "score" of "    %d points" sprintf write-text ]
+        [ 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
-            [ commentCount>> [ "discuss" ] [ "%d comments" sprintf ] if-zero ]
+            [ "descendants" of [ "discuss" ] [ "%d comments" sprintf ] if-zero ]
             [ post>comments-url ] bi write-link nl nl
         ]
     } cleave ;
@@ -84,5 +74,6 @@ PRIVATE>
     } assoc-union format nl ;
 
 : hacker-news. ( -- )
-    hacker-news-items banner.
+    25 hacker-news-items
+    banner.
     [ 1 + post. ] each-index ;