Created
November 23, 2008 19:34
-
-
Save hiredman/28174 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(import '(org.xlightweb.client HttpClient) | |
'(java.net URL URLEncoder) | |
'(javax.net.ssl SSLContext) | |
'(java.util Date) | |
'(org.xlightweb PostRequest GetRequest)) | |
(def base-url "https://www.google.com/notebook/") | |
(def params {"service" "notebook" | |
"continue" base-url | |
"source" "clj-notebook-1.0"}) | |
(def auth-url "https://www.google.com/accounts/ServiceLoginAuth?service=notebook") | |
(defn params-to-formps [x] | |
(into-array (loop [[[n v] & r] (seq x) q []] | |
(if n | |
(recur r (conj q (str n "=" v))) | |
q)))) | |
(defn http-client [] | |
(doto (HttpClient. (.getDefault SSLContext)) | |
(setAutoHandleCookies true) | |
(setFollowsRedirect true))) | |
(defn caller [client] | |
(fn [& x] | |
(if x | |
(. client (call (first x))) | |
client))) | |
(defn metat-kyd-str [x] | |
(if (keyword? x) | |
(apply str (drop 1 (str x))) | |
x)) | |
(defn header | |
([x] (. x (getHeaderNameSet))) | |
([x y] (seq (. x (getHeaderList (metat-kyd-str y)))))) | |
(defn K [& x] (first x)) | |
(defn cookie-method [method cookie] | |
(reduce #(K %1 (. %1 (addHeader "Cookie" %2))) (conj cookie method))) | |
(defn get-token [h] | |
(let [b (. (. ((h :client) (cookie-method (GetRequest. (str base-url "token?&pv=2")) (h :cookie))) (getBlockingBody)) (readString))] | |
(. b (substring 2 (dec (dec (count b))))))) | |
(defn login [username password] | |
(let [param (params-to-formps (assoc params "Email" username "Passwd" password)) | |
method (PostRequest. auth-url param) | |
client (caller (http-client)) | |
response (client method) | |
cookie (header response :Set-Cookie) | |
next (first (header response :Location)) | |
method (cookie-method (GetRequest. next) cookie) | |
response (client method) | |
method (cookie-method (GetRequest. base-url) cookie) | |
hh {:cookie cookie :client client}] | |
(client method) | |
(assoc hh :token (get-token hh)))) | |
(defn notebooks [session] | |
((session :client) (cookie-method (GetRequest. (str base-url | |
"read?pv=2&ident=fp&tok=" | |
(session :token) | |
"&cmd=u&zx=" | |
(. (Date.) | |
(getTime)))) | |
(session :cookie)))) | |
(def nid "BDQgjIgoQlsLxtcAi") | |
(defn notes [session] | |
((session :client) (cookie-method (GetRequest. (str base-url | |
"read?pv=2&ident=fp&tok=" | |
(session :token) | |
"&cmd=b&nbid=" | |
(session :nbid) | |
"&zx=" | |
(. (Date.) | |
(getTime)))) | |
(session :cookie)))) | |
(format "http://google.com/notebook/read?pv=1.1&i=&tok=%1$s&cmd=u&zx=%2$d" "foo" (.getTime (java.util.Date.))) | |
;http://google.com/notebook/read?pv=5083893976283701674&ident=fp&hl=en&tok=vGvBNuY57ygulQjTbhS6EvpXVrU%3A1227069847100&cmd=b&nbid=BDQgjIgoQlsLxtcAi&start=0&num=20&zx=1229665598536-4 | |
;"read?pv=5083893976283701674&ident=fp&hl=en&tok=%1$s%3A1227069847100&cmd=b&nbid=BDQgjIgoQlsLxtcAi&start=0&zx=1229665598536-4" token) | |
; | |
(format "%1$s" "token") | |
(format "read?pv=5083893976283701674&ident=fp&hl=en&tok=%1$s&cmd=b&nbid=%2$s&start=0&zx=%3$d" "token" "nbid" 0000) | |
(defn notebooks [session] | |
((session :client) | |
(cookie-method | |
(GetRequest. | |
(format (str base-url | |
"read?cmd=gl&hl=en&ident=fp&nbid=BDQgjIgoQlsLxtcAi&pv=1") | |
(session :token) | |
(.getTime (java.util.Date.)))) | |
(session :cookie)))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment