Skip to content

Instantly share code, notes, and snippets.

@mbmccormick
Last active August 29, 2015 14:16
Show Gist options
  • Save mbmccormick/bcb6b3f0913e03061f64 to your computer and use it in GitHub Desktop.
Save mbmccormick/bcb6b3f0913e03061f64 to your computer and use it in GitHub Desktop.
local jsondata = [[
[
{
"id": 7914216,
"date": {
"year": 2015,
"month": 3,
"day": 2
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 1"
},
{
"id": 7914217,
"date": {
"year": 2015,
"month": 3,
"day": 5
},
"status": "planned",
"activity_type": "Medium",
"sport_type": "running",
"day_name": "Day 2"
},
{
"id": 7914218,
"date": {
"year": 2015,
"month": 3,
"day": 7
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 3"
},
{
"id": 7914219,
"date": {
"year": 2015,
"month": 3,
"day": 8
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 4"
},
{
"id": 7914220,
"date": {
"year": 2015,
"month": 3,
"day": 10
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 5"
},
{
"id": 7914221,
"date": {
"year": 2015,
"month": 3,
"day": 12
},
"status": "planned",
"activity_type": "Interval",
"sport_type": "running",
"day_name": "Day 6"
},
{
"id": 7914222,
"date": {
"year": 2015,
"month": 3,
"day": 14
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 7"
},
{
"id": 7914223,
"date": {
"year": 2015,
"month": 3,
"day": 15
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 8"
},
{
"id": 7914224,
"date": {
"year": 2015,
"month": 3,
"day": 17
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 9"
},
{
"id": 7914225,
"date": {
"year": 2015,
"month": 3,
"day": 19
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 10"
},
{
"id": 7914226,
"date": {
"year": 2015,
"month": 3,
"day": 22
},
"status": "planned",
"activity_type": "Test Race",
"sport_type": "running",
"day_name": "Day 11"
},
{
"id": 7914227,
"date": {
"year": 2015,
"month": 3,
"day": 24
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 12"
},
{
"id": 7914228,
"date": {
"year": 2015,
"month": 3,
"day": 26
},
"status": "planned",
"activity_type": "Medium",
"sport_type": "running",
"day_name": "Day 13"
},
{
"id": 7914229,
"date": {
"year": 2015,
"month": 3,
"day": 28
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 14"
},
{
"id": 7914230,
"date": {
"year": 2015,
"month": 3,
"day": 29
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 15"
},
{
"id": 7914231,
"date": {
"year": 2015,
"month": 3,
"day": 31
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 16"
},
{
"id": 7914232,
"date": {
"year": 2015,
"month": 4,
"day": 2
},
"status": "planned",
"activity_type": "Interval",
"sport_type": "running",
"day_name": "Day 17"
},
{
"id": 7914233,
"date": {
"year": 2015,
"month": 4,
"day": 5
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 18"
},
{
"id": 7914234,
"date": {
"year": 2015,
"month": 4,
"day": 7
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 19"
},
{
"id": 7914235,
"date": {
"year": 2015,
"month": 4,
"day": 9
},
"status": "planned",
"activity_type": "Tempo Run",
"sport_type": "running",
"day_name": "Day 20"
},
{
"id": 7914236,
"date": {
"year": 2015,
"month": 4,
"day": 11
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 21"
},
{
"id": 7914237,
"date": {
"year": 2015,
"month": 4,
"day": 12
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 22"
},
{
"id": 7914238,
"date": {
"year": 2015,
"month": 4,
"day": 14
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 23"
},
{
"id": 7914239,
"date": {
"year": 2015,
"month": 4,
"day": 16
},
"status": "planned",
"activity_type": "Interval",
"sport_type": "running",
"day_name": "Day 24"
},
{
"id": 7914240,
"date": {
"year": 2015,
"month": 4,
"day": 18
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 25"
},
{
"id": 7914241,
"date": {
"year": 2015,
"month": 4,
"day": 19
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 26"
},
{
"id": 7914242,
"date": {
"year": 2015,
"month": 4,
"day": 21
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 27"
},
{
"id": 7914243,
"date": {
"year": 2015,
"month": 4,
"day": 23
},
"status": "planned",
"activity_type": "Medium",
"sport_type": "running",
"day_name": "Day 28"
},
{
"id": 7914244,
"date": {
"year": 2015,
"month": 4,
"day": 26
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 29"
},
{
"id": 7914245,
"date": {
"year": 2015,
"month": 4,
"day": 28
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 30"
},
{
"id": 7914246,
"date": {
"year": 2015,
"month": 4,
"day": 30
},
"status": "planned",
"activity_type": "Interval",
"sport_type": "running",
"day_name": "Day 31"
},
{
"id": 7914247,
"date": {
"year": 2015,
"month": 5,
"day": 2
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 32"
},
{
"id": 7914248,
"date": {
"year": 2015,
"month": 5,
"day": 3
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 33"
},
{
"id": 7914249,
"date": {
"year": 2015,
"month": 5,
"day": 5
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 34"
},
{
"id": 7914250,
"date": {
"year": 2015,
"month": 5,
"day": 7
},
"status": "planned",
"activity_type": "Tempo Run",
"sport_type": "running",
"day_name": "Day 35"
},
{
"id": 7914251,
"date": {
"year": 2015,
"month": 5,
"day": 9
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 36"
},
{
"id": 7914252,
"date": {
"year": 2015,
"month": 5,
"day": 10
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 37"
},
{
"id": 7914253,
"date": {
"year": 2015,
"month": 5,
"day": 12
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 38"
},
{
"id": 7914254,
"date": {
"year": 2015,
"month": 5,
"day": 14
},
"status": "planned",
"activity_type": "Interval",
"sport_type": "running",
"day_name": "Day 39"
},
{
"id": 7914255,
"date": {
"year": 2015,
"month": 5,
"day": 16
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 40"
},
{
"id": 7914256,
"date": {
"year": 2015,
"month": 5,
"day": 17
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 41"
},
{
"id": 7914257,
"date": {
"year": 2015,
"month": 5,
"day": 19
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 42"
},
{
"id": 7914258,
"date": {
"year": 2015,
"month": 5,
"day": 21
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 43"
},
{
"id": 7914259,
"date": {
"year": 2015,
"month": 5,
"day": 24
},
"status": "planned",
"activity_type": "Test Race",
"sport_type": "running",
"day_name": "Day 44"
},
{
"id": 7914260,
"date": {
"year": 2015,
"month": 5,
"day": 26
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 45"
},
{
"id": 7914261,
"date": {
"year": 2015,
"month": 5,
"day": 28
},
"status": "planned",
"activity_type": "Medium",
"sport_type": "running",
"day_name": "Day 46"
},
{
"id": 7914262,
"date": {
"year": 2015,
"month": 5,
"day": 30
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 47"
},
{
"id": 7914263,
"date": {
"year": 2015,
"month": 5,
"day": 31
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 48"
},
{
"id": 7914264,
"date": {
"year": 2015,
"month": 6,
"day": 2
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 49"
},
{
"id": 7914265,
"date": {
"year": 2015,
"month": 6,
"day": 4
},
"status": "planned",
"activity_type": "Tempo Run",
"sport_type": "running",
"day_name": "Day 50"
},
{
"id": 7914266,
"date": {
"year": 2015,
"month": 6,
"day": 6
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 51"
},
{
"id": 7914267,
"date": {
"year": 2015,
"month": 6,
"day": 7
},
"status": "planned",
"activity_type": "Long Distance",
"sport_type": "running",
"day_name": "Day 52"
},
{
"id": 7914268,
"date": {
"year": 2015,
"month": 6,
"day": 9
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 53"
},
{
"id": 7914269,
"date": {
"year": 2015,
"month": 6,
"day": 11
},
"status": "planned",
"activity_type": "Interval",
"sport_type": "running",
"day_name": "Day 54"
},
{
"id": 7914270,
"date": {
"year": 2015,
"month": 6,
"day": 14
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 55"
},
{
"id": 7914271,
"date": {
"year": 2015,
"month": 6,
"day": 16
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 56"
},
{
"id": 7914272,
"date": {
"year": 2015,
"month": 6,
"day": 18
},
"status": "planned",
"activity_type": "Easy",
"sport_type": "running",
"day_name": "Day 57"
},
{
"id": 7914273,
"date": {
"year": 2015,
"month": 6,
"day": 21
},
"status": "planned",
"activity_type": "Race",
"sport_type": "running",
"day_name": "Day 58"
}
]
]]
local data = json.parse(jsondata)
local records = {}
for key1, value1 in pairs(data) do
table.insert(records, value1)
end
function leadingZero(value)
if value < 10 then
return '0' .. value
end
return value
end
local result = ''
result = result .. 'BEGIN:VCALENDAR\r\n'
result = result .. 'VERSION:2.0\r\n'
result = result .. 'PRODID:-//runtastic/training-plan//NONSGML v1.0//EN\r\n'
function splitter(str)
local t = {}
local function helper(line) table.insert(t, line) return "" end
helper((str:gsub("(.-)\r?\n", helper)))
return t
end
for i = 51, #records do
local response = http.request {
url = 'https://www.runtastic.com/api/scheduled_training_plan/activity?id=118766&activity_id=' .. records[i].id .. '&user_id=52137199',
headers = {
['Cookie'] = 'split=%7B%22navigation%3A3%22%3A%22old%22%7D; remember_user_token=BAhbB1sGaQTvjBsDSSIZUEtsemc2NHFLTUhmbld4cXQ4VWsGOgZFVA%3D%3D--d5cf0c416ceaea06d6746f848254587fa50134f8; _gat=1; __utmt=1; _runtastic_session=BAh7CUkiD3Nlc3Npb25faWQGOgZFVEkiJTIzZGI0ODkzMzQ2ZTRkNzdmMmI5NzI4ZjY3Yzk0MjU4BjsAVEkiGXdhcmRlbi51c2VyLnVzZXIua2V5BjsAVFsISSIJVXNlcgY7AEZbBmkE74wbA0kiGUhOQjRYUHhueUxuY2s2QUdUenpuBjsAVEkiE3VzZXJfcmV0dXJuX3RvBjsAVCI3L2VuL3VzZXJzL21hdHQtbWNjb3JtaWNrLTEyL3RyYWluaW5nLXBsYW5zLzExODc2Nj9JIhBfY3NyZl90b2tlbgY7AEZJIjE5VWRUTGZ1UWkwZnpoS3M4UU5lV2gyRkplV3VMa1JXYm96bTRtd25nODhvPQY7AEY%3D--60e20774dd1d3477bf0cceb7f768a8e11b12ca2c; _ga=GA1.2.1231831281.1425322350; __utma=1.1231831281.1425322350.1425322350.1425503199.2; __utmb=1.5.9.1425503209735; __utmc=1; __utmz=1.1425322350.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _mkra_ctxt=1c4665a013b7523de7817930bf448a97--200; locale=en'
}
}
local content = splitter(response.content)
local description = content[8]
if content[10] == 'Overall duration: ' then
description = description .. "\r\n\r\n" .. "Overall Duration: " .. content[11]
end
description = description:gsub("<p>", "")
description = description:gsub("</p>", "")
description = description:gsub("<span class='bold'>", "")
description = description:gsub("</span>", "")
result = result .. 'BEGIN:VEVENT\r\n'
result = result .. 'UID:' .. records[i].id .. '@runtastic.com\r\n'
-- result = result .. 'DTSTAMP:' .. records[i].date.year .. leadingZero(records[i].date.month) .. leadingZero(records[i].date.day) .. 'T000008Z\r\n'
result = result .. 'ORGANIZER;CN=Runtastic:MAILTO:system@runtastic.com\r\n'
result = result .. 'DTSTART;VALUE=DATE:' .. records[i].date.year .. leadingZero(records[i].date.month) .. leadingZero(records[i].date.day) .. '\r\n'
result = result .. 'DTEND;VALUE=DATE:' .. records[i].date.year .. leadingZero(records[i].date.month) .. leadingZero(records[i].date.day + 1) .. '\r\n'
result = result .. 'SUMMARY:Training Plan: ' .. records[i].day_name .. ' (' .. records[i].activity_type .. ')\r\n'
result = result .. 'DESCRIPTION:' .. description .. '\r\n'
result = result .. 'END:VEVENT\r\n'
end
result = result .. 'END:VCALENDAR\r\n'
return result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment