]> gitweb.factorcode.org Git - factor.git/commitdiff
twitter: update to use OAuth
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 6 Jul 2010 02:17:16 +0000 (22:17 -0400)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 6 Jul 2010 02:17:16 +0000 (22:17 -0400)
extra/twitter/authors.txt [new file with mode: 0644]
extra/twitter/twitter.factor

diff --git a/extra/twitter/authors.txt b/extra/twitter/authors.txt
new file mode 100644 (file)
index 0000000..ad5b35d
--- /dev/null
@@ -0,0 +1,2 @@
+Joe Groff
+Slava Pestov
index 48388de382b7a3f32665585360851f5010da20c4..8c16eec32cf9bc0901f44aad1a76920335ebabe6 100644 (file)
@@ -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* ;
+<PRIVATE
+
+: with-twitter-oauth ( quot -- )
+    [
+        twitter-consumer-token get consumer-token set
+        twitter-access-token get access-token set
+        call
+    ] with-scope ; inline
+
+PRIVATE>
+
+! 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"
+        <request-token-params>
+        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
+        <access-token-params>
+            swap >>verifier
+            swap >>request-token
+        obtain-access-token
+    ] with-twitter-oauth ;
 
 <PRIVATE
 
@@ -20,12 +52,11 @@ 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 ;
+    [ <oauth-request-params> 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