Skip to content

Instantly share code, notes, and snippets.

@DuqueDeTuring
Created October 3, 2013 20:57
Show Gist options
  • Save DuqueDeTuring/6817014 to your computer and use it in GitHub Desktop.
Save DuqueDeTuring/6817014 to your computer and use it in GitHub Desktop.
:dependencies [ [google/oauth-client "1.16.0"]
[google/http-client "1.16.0"]
[google/oauth-client-java6 "1.16.0"]
[google/oauth-client-jetty "1.16.0"]
[gdata/gdata-base "1.0"]
[gdata/gdata-core "1.0"]
[gdata/docs "3.0"]
[gdata/docs-meta "3.0"]
[gdata/gdata-client "1.0"]
[gdata/gdata-client-meta "1.0"]
[gdata/gdata-spreadsheet "3.0"]
[gdata/gdata-spreadsheet-meta "3.0"]
[google/jackson-core "2.1.3"]
[google/api-client "1.16.0"]
[google/http-client-jackson "1.16.0"]
[google/http-client-jackson2 "1.16.0"]
[gdata/media "1.0"]]
(ns paqs-googledocs.google
(:import (com.google.api.client.auth.oauth2 AuthorizationCodeFlow)
(com.google.api.client.auth.oauth2 BearerToken)
(com.google.api.client.auth.oauth2 Credential)
(com.google.api.client.extensions.java6.auth.oauth2 AuthorizationCodeInstalledApp)
(com.google.api.client.extensions.jetty.auth.oauth2 LocalServerReceiver)
(com.google.api.client.http GenericUrl)
(com.google.api.client.http HttpRequest)
(com.google.api.client.http HttpRequestFactory)
(com.google.api.client.http HttpRequestInitializer)
(com.google.api.client.http HttpTransport)
(com.google.api.client.http.javanet NetHttpTransport)
(com.google.api.client.json JsonFactory)
(com.google.api.client.json JsonObjectParser)
(com.google.api.client.json.jackson2 JacksonFactory)
(com.google.api.client.util.store DataStoreFactory)
(com.google.api.client.util.store FileDataStoreFactory)
(com.google.api.client.googleapis.javanet GoogleNetHttpTransport)
(com.google.api.client.http GenericUrl)
(com.google.gdata.client.spreadsheet FeedURLFactory)
(com.google.api.client.googleapis.auth.oauth2 GoogleCredential)
(com.google.api.client.googleapis.auth.oauth2 GoogleCredential$Builder)
(com.google.gdata.client.spreadsheet SpreadsheetService)
(com.google.gdata.data.spreadsheet SpreadsheetFeed)
(com.google.gdata.data.spreadsheet WorksheetFeed)
(com.google.gdata.data.spreadsheet ListFeed)
(com.google.gdata.client.spreadsheet SpreadsheetQuery)))
(def factory (FeedURLFactory/getDefault))
(defn credentials [service-account-id private-key-file scope] (.build
(doto (.setTransport (new GoogleCredential$Builder) (new NetHttpTransport))
(.setJsonFactory (new JacksonFactory))
(.setServiceAccountId service-account-id)
(.setServiceAccountScopes (java.util.Collections/singleton scope))
(.setServiceAccountPrivateKeyFromP12File private-key-file))))
(defn spreadsheet-service [name]
(SpreadsheetService. name))
(defn service [service credentials]
(.setOAuth2Credentials service credentials)
service)
(defn get-title [entry]
(.getPlainText (.getTitle entry)))
(defn get-spreadsheets
"devuelve un mapa en donde las llaves son los nombres de cada spreadsheet"
[service]
(reduce merge
(map (fn [spreadsheet]
{(get-title spreadsheet) spreadsheet})
(.getEntries (.getFeed service (.getSpreadsheetsFeedUrl factory) SpreadsheetFeed)))))
(defn get-spreadsheet [title service]
((get-spreadsheets service)) title)
(defn get-worksheets [spreadsheet]
(.getWorksheets spreadsheet))
(defn get-rows [service worksheet]
(let [rows (.getEntries
(.getFeed service
(.getListFeedUrl worksheet)
ListFeed))
col-names (if (empty? rows) [] (.getTags (.getCustomElements (first rows))))]
(map (fn [r] (reduce merge
(map (fn [c]
{c (.getValue (.getCustomElements r)c)})
col-names)))
rows)))
(let [google-service (service (spreadsheet-service "servicename")
(credentials "gservice-account-credential"
pkey-file "https://spreadsheets.google.com/feeds"))
all-spreadsheets (get-spreadsheets google-service)])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment