Skip to content

Instantly share code, notes, and snippets.

@hiredman
Created November 23, 2008 19:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hiredman/28174 to your computer and use it in GitHub Desktop.
Save hiredman/28174 to your computer and use it in GitHub Desktop.
(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