]> gitweb.factorcode.org Git - factor.git/commitdiff
Clean up extra/twitter a little bit
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sat, 14 Feb 2009 00:06:55 +0000 (18:06 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sat, 14 Feb 2009 00:06:55 +0000 (18:06 -0600)
extra/twitter/twitter.factor

index 2172d7cf81de7becb52394a859a7f02cc6384807..d70828b31062876c5cea93b60b8f929f0ece095f 100644 (file)
@@ -1,12 +1,41 @@
+! Copyright (C) 2009 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
 USING: accessors assocs combinators hashtables http
 http.client json.reader kernel macros namespaces sequences
-urls.secure urls.encoding ;
+urls.secure fry ;
 IN: twitter
 
+! Configuration
 SYMBOLS: twitter-username twitter-password twitter-source ;
 
 twitter-source [ "factor" ] initialize
 
+: set-twitter-credentials ( username password -- )
+    [ twitter-username set ] [ twitter-password set ] bi* ;
+
+<PRIVATE
+
+! Utilities
+MACRO: keys-boa ( keys class -- )
+    [ [ '[ _ swap at ] ] map ] dip '[ _ cleave _ boa ] ;
+
+! Twitter requests
+
+: twitter-url ( string -- url )
+    "https://twitter.com/statuses/" ".json" surround ;
+
+: set-request-twitter-auth ( request -- request )
+    twitter-username get twitter-password get set-basic-auth ;
+
+: twitter-request ( string quot -- data )
+    [ twitter-url ] dip call
+    set-request-twitter-auth
+    http-request nip ; inline
+
+PRIVATE>
+
+! Data types
+
 TUPLE: twitter-status
     created-at
     id
@@ -28,8 +57,7 @@ TUPLE: twitter-user
     protected?
     followers-count ;
 
-MACRO: keys-boa ( keys class -- )
-    [ [ \ swap \ at [ ] 3sequence ] map \ cleave ] dip \ boa [ ] 4sequence ;
+<PRIVATE
 
 : <twitter-user> ( assoc -- user )
     {
@@ -64,37 +92,40 @@ MACRO: keys-boa ( keys class -- )
 : json>twitter-status ( json-object -- tweet )
     json> <twitter-status> ;
 
-: set-twitter-credentials ( username password -- )
-    [ twitter-username set ] [ twitter-password set ] bi* ; 
+PRIVATE>
 
-: set-request-twitter-auth ( request -- request )
-    twitter-username twitter-password [ get ] bi@ set-basic-auth ;
+! Updates
+<PRIVATE
 
 : update-post-data ( update -- assoc )
-    "status" associate
-    [ twitter-source get "source" ] dip [ set-at ] keep ;
+    [
+        "status" set
+        twitter-source get "source" set
+    ] make-assoc ;
 
 : (tweet) ( string -- json )
-    update-post-data "https://twitter.com/statuses/update.json" <post-request>
-        set-request-twitter-auth 
-    http-request nip ;
+    update-post-data "update" [ <post-request> ] twitter-request ;
+
+PRIVATE>
 
 : tweet* ( string -- tweet )
     (tweet) json>twitter-status ;
 
 : tweet ( string -- ) (tweet) drop ;
 
+! Timelines
+<PRIVATE
+
+: timeline ( url -- tweets )
+    [ <get-request> ] twitter-request json>twitter-statuses ;
+
+PRIVATE>
+
 : public-timeline ( -- tweets )
-    "https://twitter.com/statuses/public_timeline.json" <get-request>
-        set-request-twitter-auth
-    http-request nip json>twitter-statuses ;
+    "public_timeline" timeline ;
 
 : friends-timeline ( -- tweets )
-    "https://twitter.com/statuses/friends_timeline.json" <get-request>
-        set-request-twitter-auth
-    http-request nip json>twitter-statuses ;
+    "friends_timeline" timeline ;
 
 : user-timeline ( username -- tweets )
-    "https://twitter.com/statuses/user_timeline/" ".json" surround <get-request>
-        set-request-twitter-auth
-    http-request nip json>twitter-statuses ;
+    "user_timeline/" prepend timeline ;