]> gitweb.factorcode.org Git - factor.git/commitdiff
hacker-news: Add more endpoints to api.
authorDoug Coleman <doug.coleman@gmail.com>
Sat, 2 Mar 2019 04:26:14 +0000 (22:26 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Sat, 2 Mar 2019 04:26:14 +0000 (22:26 -0600)
extra/hacker-news/hacker-news.factor

index 7baa71d490077864e2d923ae30737945c66f62e0..66f33f109e8784d34cba4492de9ea4c3168a19c9 100644 (file)
@@ -9,20 +9,34 @@ kernel make math math.parser sequences ui urls vocabs ;
 IN: hacker-news
 
 <PRIVATE
-
-: hacker-news-recent-ids ( -- seq )
-    "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"
+: hacker-news-ids ( endpoint -- ids )
+    "https://hacker-news.firebaseio.com/v0/%s.json?print=pretty" sprintf
     http-get nip json> ;
 
 : hacker-news-id>json-url ( n -- url )
-    number>string
-    "https://hacker-news.firebaseio.com/v0/item/" ".json?print=pretty" surround ;
+    "https://hacker-news.firebaseio.com/v0/item/%d.json?print=pretty" sprintf ;
 
-: hacker-news-items ( seq -- seq' )
+: hacker-news-items ( n endpoint -- seq' )
+    hacker-news-ids swap short head
     [ 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 ;
+: hacker-news-top-stories ( n -- seq )
+    "topstories" hacker-news-items ;
+
+: hacker-news-new-stories ( n -- seq )
+    "newstories" hacker-news-items ;
+
+: hacker-news-best-stories ( n -- seq )
+    "beststories" hacker-news-items ;
+
+: hacker-news-ask-stories ( n -- seq )
+    "askstories" hacker-news-items ;
+
+: hacker-news-show-stories ( n -- seq )
+    "showstories" hacker-news-items ;
+
+: hacker-news-job-stories ( n -- seq )
+    "jobstories" hacker-news-items ;
 
 : write-title ( title url -- )
     '[
@@ -69,8 +83,7 @@ PRIVATE>
         ]
     } cleave ;
 
-: banner. ( -- )
-    "Hacker News"
+: banner. ( str -- )
     "http://news.ycombinator.com" >url presented associate
     H{
         { font-size 20 }
@@ -79,7 +92,39 @@ PRIVATE>
         { foreground COLOR: black }
     } assoc-union format nl ;
 
-: hacker-news. ( -- )
-    30 hacker-news-recent-items
-    banner.
+: hacker-news-feed. ( seq -- )
     [ 1 + post. ] each-index ;
+
+: hacker-news. ( str seq -- )
+    [ banner. ]
+    [ hacker-news-feed. ] bi* ;
+
+: hacker-news-top. ( -- )
+    "Hacker News - Top"
+    30 hacker-news-top-stories
+    hacker-news. ;
+
+: hacker-news-new. ( -- )
+    "Hacker News - New"
+    50 hacker-news-new-stories
+    hacker-news. ;
+
+: hacker-news-best. ( -- )
+    "Hacker News - Best"
+    50 hacker-news-best-stories
+    hacker-news. ;
+
+: hacker-news-ask. ( -- )
+    "Hacker News - Ask"
+    50 hacker-news-ask-stories
+    hacker-news. ;
+
+: hacker-news-show. ( -- )
+    "Hacker News - Show"
+    50 hacker-news-show-stories
+    hacker-news. ;
+
+: hacker-news-job. ( -- )
+    "Hacker News - Job"
+    50 hacker-news-job-stories
+    hacker-news. ;