Hmmm, I can’t get the method describe on that link to work (in the sources, I don’t find the url with the “amp;” part, for instance)… Maybe Google changed its way to submit responses?
openURL(link)~~~
Safari is called as expected when the code runs, and I get a "your answer has been recorded" message, but the cell stays empty.
I must have been doing something wrong with my form...
Cheers.
I made some small attempts using OAuth, but it was a bit messy, and seemed to assume access to a web browser. But if it is usable, here is my code for logging in an storing and loading data from a spreadsheet.
Sheet = class()
function Sheet:init()
end
function Sheet:withToken(callback)
-- Currently assume that a device code exists
end
function Sheet:getDeviceCode()
local deviceCodeUrl = "https://accounts.google.com/o/oauth2/device/code"
local data = "client_id=" .. CLIENT_ID .. "&scope=https://spreadsheets.google.com/feeds"
http.request(deviceCodeUrl, function (data)
local jsonData = json.decode(data)
-- print("user code is " .. jsonData.user_code)
saveGlobalData("deviceCode", jsonData.device_code)
saveGlobalData("userCode", jsonData.user_code)
-- openURL("http://www.google.com/device")
openURL("http://social-layer.herokuapp.com/deviceCode/" .. jsonData.user_code)
end, function (error)
print("Error " .. error)
end, {
method = "POST",
data = data,
headers = {
["Content-Type"] = "application/x-www-form-urlencoded"
}
})
end
function Sheet:getAuthToken(callback)
local getTokenUrl = "https://accounts.google.com/o/oauth2/token"
local deviceCode = readGlobalData("deviceCode")
local data = "client_id=" .. CLIENT_ID ..
"&client_secret=" .. CLIENT_SECRET .. "&code=" ..
deviceCode .. "&grant_type=http://oauth.net/grant_type/device/1.0"
print("getAuthToken " .. data)
http.request(getTokenUrl, function (data)
-- print(data)
local jsonData = json.decode(data)
-- print("access token is " .. jsonData.access_token)
-- print("refresh token is " .. jsonData.refresh_token)
saveGlobalData("accessToken", jsonData.access_token)
saveGlobalData("refreshToken", jsonData.refresh_token)
if callback then callback() end
end, function (error)
print("Error " .. error)
end, {
method = "POST",
data = data,
headers = {
["Content-Type"] = "application/x-www-form-urlencoded"
}
})
end
function Sheet:refreshAuthToken(callback)
local getTokenUrl = "https://accounts.google.com/o/oauth2/token"
local refreshToken = readGlobalData("refreshToken")
local data = "client_id=" .. CLIENT_ID ..
"&client_secret=" .. CLIENT_SECRET ..
"&refresh_token=" .. refreshToken ..
"&grant_type=refresh_token"
print("refreshToken")
http.request(getTokenUrl, function (data)
-- print(data)
local jsonData = json.decode(data)
-- print("access token is " .. jsonData.access_token)
saveGlobalData("accessToken", jsonData.access_token)
if callback then callback() end
end, function (error)
print("Error " .. error)
end, {
method = "POST",
data = data,
headers = {
["Content-Type"] = "application/x-www-form-urlencoded"
}
})
end
function Sheet:availableSheets()
local accessToken = readGlobalData("accessToken")
local url = "https://spreadsheets.google.com/feeds/spreadsheets/private/full?" ..
"alt=json&" ..
"access_token=" .. accessToken
print("get sheets")
http.request(url, function (data)
print(data)
end)
end
function Sheet:getCells() -- from my spreadsheet with specified key
local accessToken = readGlobalData("accessToken")
local key = "0AsDhnQgjRtV2dEVPQXkwWlRTWW5CM2RkWGJPSVNnUkE"
local url = "https://spreadsheets.google.com/feeds/cells/" ..
key ..
"/od6/private/full?min-row=1&min-col=1&max-col=2&" ..
"alt=json&" ..
"access_token=" .. accessToken
print("get cells ")
http.request(url, function (data)
local jsonData = json.decode(data)
local cells = {}
for k,cell in pairs(jsonData.feed.entry) do
-- print(cell.id["$t"])
-- print(cell.title["$t"] .. " - " .. cell.content["$t"])
table.insert(cells, List(cell.content["$t"]))
end
theList = List{
name = "Remember",
items = cells
}
end, function (error)
print(error)
end)
end
function Sheet:set(col, row, value)
local key = "0AsDhnQgjRtV2dEVPQXkwWlRTWW5CM2RkWGJPSVNnUkE"
local cellurl = "https://spreadsheets.google.com/feeds/cells/" .. key .. "/od6/private/full/R" .. row .. "C" .. col
local data = [[<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gs="http://schemas.google.com/spreadsheets/2006">
<id>]] .. cellurl .. [[</id>
<link rel="edit" type="application/atom+xml"
href="]] .. cellurl .. [["/>
<gs:cell row="]] .. row .. [[" col="]] .. col .. [[" inputValue="]] .. value ..[["/>
</entry>]]
local accessToken = readGlobalData("accessToken")
local url = "https://spreadsheets.google.com/feeds/cells/" ..
key ..
"/od6/private/full/R" .. row .. "C" .. col .. "?" ..
"access_token=" .. accessToken
print("set cell data")
http.request(url, function (data)
-- print(data)
end, function (error)
print("Error " .. error)
end, {
method = "PUT",
data = data,
headers = {
["Content-Type"] = "application/atom+xml",
["If-Match"] = "*" -- what does this do?
}
})
end
@Briarfox, would you mind pasting the url you use to add text to a spreadsheet? I still can’t manage to make it work and I suspect it’s something little I’m overseeing. You can replace your key by xxxxxxxx’s of course