diff --git a/extra/twitter/authors.txt b/extra/twitter/authors.txt new file mode 100644 index 0000000000..ad5b35d60a --- /dev/null +++ b/extra/twitter/authors.txt @@ -0,0 +1,2 @@ +Joe Groff +Slava Pestov diff --git a/extra/twitter/twitter.factor b/extra/twitter/twitter.factor index 48388de382..8c16eec32c 100644 --- a/extra/twitter/twitter.factor +++ b/extra/twitter/twitter.factor @@ -1,17 +1,49 @@ -! Copyright (C) 2009 Joe Groff. +! Copyright (C) 2009, 2010 Joe Groff, Slava Pestov. ! 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 fry ; +urls.secure fry oauth urls ; IN: twitter ! Configuration -SYMBOLS: twitter-username twitter-password twitter-source ; +SYMBOLS: twitter-source twitter-consumer-token twitter-access-token ; twitter-source [ "factor" ] initialize -: set-twitter-credentials ( username password -- ) - [ twitter-username set ] [ twitter-password set ] bi* ; + + +! obtain-twitter-request-token and obtain-twitter-access-token +! should use https: URLs but Twitter sends a 301 Redirect back +! to the same URL. Twitter bug? + +: obtain-twitter-request-token ( -- request-token ) + [ + "http://twitter.com/oauth/request_token" + + obtain-request-token + ] with-twitter-oauth ; + +: twitter-authorize-url ( token -- url ) + "https://twitter.com/oauth/authorize" >url + swap key>> "oauth_token" set-query-param ; + +: obtain-twitter-access-token ( request-token verifier -- access-token ) + [ + [ "http://twitter.com/oauth/access_token" ] 2dip + + swap >>verifier + swap >>request-token + obtain-access-token + ] with-twitter-oauth ; set-oauth ] with-twitter-oauth ; : twitter-request ( request -- data ) set-request-twitter-auth @@ -45,6 +76,7 @@ TUPLE: twitter-status in-reply-to-user-id favorited? user ; + TUPLE: twitter-user id name