-
-
Save robyoung/7114d25530a4bb586fb7 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
package main | |
import ( | |
"encoding/json" | |
"fmt" | |
"io/ioutil" | |
"log" | |
"net/http" | |
"net/url" | |
"time" | |
) | |
func main() { | |
var helpUriTemplate = "https://www.performance.service.gov.uk/data/lasting-power-of-attorney/journey?filter_by=eventAction%%3Ahelp.inline&group_by=eventDestination&collect=uniqueEvents%%3Asum&period=week&start_at=%s&end_at=%s" | |
var volumesUriTemplate = "https://www.performance.service.gov.uk/data/lasting-power-of-attorney/volumes?collect=value%%3Asum&period=week&start_at=%s&end_at=%s&group_by=key" | |
launchDate := time.Date(2013, time.November, 11, 0, 0, 0, 0, time.UTC) | |
for date := range generateStartDate(launchDate) { | |
// fmt.Printf("%v\n", date) | |
jsonResponse := grabData(helpUriTemplate, date) | |
doc := parse(jsonResponse) | |
sum := extractSum(doc) | |
jsonResponse = grabData(volumesUriTemplate, date) | |
doc = parse(jsonResponse) | |
volume := extractVolume(doc) | |
fmt.Printf("%v\t%4v\t%4v\t%4v\n", date.Format("2006-01-02"), sum, volume, sum/volume) | |
} | |
} | |
func generateStartDate(startDate time.Time) chan time.Time { | |
ch := make(chan time.Time) | |
endDate := time.Now() | |
go func() { | |
for i := startDate; i.Before(endDate); i = i.AddDate(0, 0, 7) { | |
ch <- i | |
} | |
close(ch) | |
}() | |
return ch | |
} | |
func grabData(uriTemplate string, startDate time.Time) []byte { | |
endDate := startDate.AddDate(0, 0, 7) | |
uri := fmt.Sprintf(uriTemplate, urlSafeDate(startDate), urlSafeDate(endDate)) | |
// fmt.Println(uri) | |
res, err := http.Get(uri) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer res.Body.Close() | |
body, err := ioutil.ReadAll(res.Body) | |
if err != nil { | |
log.Fatal(err) | |
} | |
return body | |
} | |
func parse(jsonResponse []byte) map[string]interface{} { | |
var doc interface{} | |
err := json.Unmarshal(jsonResponse, &doc) | |
if err != nil { | |
log.Fatal(err) | |
} | |
return doc.(map[string]interface{}) | |
} | |
func extractSum(doc map[string]interface{}) float64 { | |
data := doc["data"].([]interface{}) | |
for _, record := range data { | |
r := record.(map[string]interface{}) | |
if r["eventDestination"] == "how-much-does-it-cost-to-apply-to-register-an-lpa" { | |
return r["uniqueEvents:sum"].(float64) | |
} | |
} | |
return 0.0 | |
} | |
func extractVolume(doc map[string]interface{}) float64 { | |
res := 0.0 | |
data := doc["data"].([]interface{}) | |
for _, record := range data { | |
r := record.(map[string]interface{}) | |
switch r["key"] { | |
case "health_and_welfare_digital_applications", | |
"property_and_financial_digital_applications": | |
{ | |
res += r["value:sum"].(float64) | |
} | |
} | |
} | |
return res | |
} | |
func urlSafeDate(date time.Time) string { | |
return url.QueryEscape(date.Format("2006-01-02T15:04:05-07:00")) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment