diff --git a/extra/twitter/twitter.factor b/extra/twitter/twitter.factor index 2172d7cf81..d70828b310 100644 --- a/extra/twitter/twitter.factor +++ b/extra/twitter/twitter.factor @@ -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* ; + + + +! 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 ; + ( assoc -- user ) { @@ -64,37 +92,40 @@ MACRO: keys-boa ( keys class -- ) : json>twitter-status ( json-object -- tweet ) json> ; -: 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 + - set-request-twitter-auth - http-request nip ; + update-post-data "update" [ ] twitter-request ; + +PRIVATE> : tweet* ( string -- tweet ) (tweet) json>twitter-status ; : tweet ( string -- ) (tweet) drop ; +! Timelines + ] twitter-request json>twitter-statuses ; + +PRIVATE> + : public-timeline ( -- tweets ) - "https://twitter.com/statuses/public_timeline.json" - set-request-twitter-auth - http-request nip json>twitter-statuses ; + "public_timeline" timeline ; : friends-timeline ( -- tweets ) - "https://twitter.com/statuses/friends_timeline.json" - 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 - set-request-twitter-auth - http-request nip json>twitter-statuses ; + "user_timeline/" prepend timeline ;