From 205714cad4062de7317d0d22a501f9d22560c2c8 Mon Sep 17 00:00:00 2001 From: Thomas Bennett Date: Thu, 5 May 2016 11:13:28 -0700 Subject: [PATCH] Initial commit with most functionality working --- README.md | 1 + go-halo5-api.go | 291 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 292 insertions(+) create mode 100644 README.md create mode 100644 go-halo5-api.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..4e4c0ac --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# go-halo5-api diff --git a/go-halo5-api.go b/go-halo5-api.go new file mode 100644 index 0000000..c1004a4 --- /dev/null +++ b/go-halo5-api.go @@ -0,0 +1,291 @@ +package main + +import ( + "fmt" + "io/ioutil" + "log" + "net/http" + "net/url" + "strings" +) + +var baseurl string = "https://www.haloapi.com" +var gamertag string = "motta13" +var title string = "h5" +var apikey string = "" + +func checkErr(err error) { + if err != nil { + log.Fatal(err) + } +} + +func events_for_match(baseurl, title, matchid string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/matches/%s/events", baseurl, title, matchid)) + checkErr(err) + q := url.Query() + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func matches_for_player(baseurl, title, player, modes string, start, count int) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/players/%s/matches", baseurl, title, player)) + checkErr(err) + q := url.Query() + + if modes != "" { + q.Set("modes", modes) + } + if start != 0 { + q.Set("start", string(start)) + } + if count != 0 { + q.Set("count", string(count)) + } + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func player_leaderboard(baseurl, title, seasonid, playlistid string, count int) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/player-leaderboards/csr/%s/%s", baseurl, title, seasonid, playlistid)) + checkErr(err) + q := url.Query() + + if count != 0 { + q.Set("count", string(count)) + } + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func carnage_report_arena(baseurl, title, matchid string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/arena/matches/%s", baseurl, title, matchid)) + checkErr(err) + q := url.Query() + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func carnage_report_campaign(baseurl, title, matchid string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/campaign/matches/%s", baseurl, title, matchid)) + checkErr(err) + q := url.Query() + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func carnage_report_custom(baseurl, title, matchid string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/custom/matches/%s", baseurl, title, matchid)) + checkErr(err) + q := url.Query() + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func carnage_report_warzone(baseurl, title, matchid string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/warzone/matches/%s", baseurl, title, matchid)) + checkErr(err) + q := url.Query() + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func service_record_arena(baseurl, title, players, seasonid string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/servicerecords/arena/", baseurl, title)) + checkErr(err) + q := url.Query() + q.Set("players", players) + if seasonid != "" { + q.Set("seasonId", seasonid) + } + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func service_record_campaign(baseurl, title, players string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/servicerecords/campaign/", baseurl, title)) + checkErr(err) + q := url.Query() + q.Set("players", players) + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func service_record_custom(baseurl, title, players string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/servicerecords/custom/", baseurl, title)) + checkErr(err) + q := url.Query() + q.Set("players", players) + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func service_record_warzone(baseurl, title, players string) string { + url, err := url.Parse(fmt.Sprintf("%s/stats/%s/servicerecords/warzone/", baseurl, title)) + checkErr(err) + q := url.Query() + q.Set("players", players) + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +// Begin profile section +func emblem_image(baseurl, title, player string, size int) string { + url, err := url.Parse(fmt.Sprintf("%s/profile/%s/profiles/%s/", baseurl, title, player)) + checkErr(err) + q := url.Query() + if (size == 95) || (size == 128) || (size == 190) || (size == 256) || (size == 512) { + q.Set("size", string(size)) + } + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func spartan_image(baseurl, title, player string, size int, crop string) string { + url, err := url.Parse(fmt.Sprintf("%s/profile/%s/profiles/%s/spartan/", baseurl, title, player)) + checkErr(err) + q := url.Query() + if (size == 95) || (size == 128) || (size == 190) || (size == 256) || (size == 512) { + q.Set("size", string(size)) + } + if (strings.ToLower(crop) == "full") || (strings.ToLower(crop) == "portrait") { + q.Set("crop", crop) + } + url.RawQuery = q.Encode() + fmt.Println(url.String()) + response := send_request(url.String()) + return response +} + +// Begin metadata section +func campaign_missions(baseurl, title string) string { + return metadata_request(baseurl, title, "campaign-missions", "") +} + +func commendations(baseurl, title string) string { + return metadata_request(baseurl, title, "commendations", "") +} + +func csr_designations(baseurl, title string) string { + return metadata_request(baseurl, title, "csr-designations", "") +} + +func enemies(baseurl, title string) string { + return metadata_request(baseurl, title, "enemies", "") +} + +func flexible_stats(baseurl, title string) string { + return metadata_request(baseurl, title, "flexible-stats", "") +} + +func game_base_variants(baseurl, title string) string { + return metadata_request(baseurl, title, "game-base-variants", "") +} + +func game_variants(baseurl, title, id string) string { + return metadata_request(baseurl, title, "game-variants", id) +} + +func impulses(baseurl, title string) string { + return metadata_request(baseurl, title, "impulses", "") +} + +func map_variants(baseurl, title, id string) string { + return metadata_request(baseurl, title, "map-variants", id) +} + +func maps(baseurl, title string) string { + return metadata_request(baseurl, title, "maps", "") +} + +func medals(baseurl, title string) string { + return metadata_request(baseurl, title, "medals", "") +} + +func playlists(baseurl, title string) string { + return metadata_request(baseurl, title, "playlists", "") +} + +func requisition_packs(baseurl, title, id string) string { + return metadata_request(baseurl, title, "requisition-packs", id) +} + +func requisitions(baseurl, title, id string) string { + return metadata_request(baseurl, title, "requisitions", id) +} + +func seasons(baseurl, title string) string { + return metadata_request(baseurl, title, "seasons", "") +} + +func skulls(baseurl, title string) string { + return metadata_request(baseurl, title, "skulls", "") +} + +func spartan_ranks(baseurl, title string) string { + return metadata_request(baseurl, title, "spartan-ranks", "") +} + +func team_colors(baseurl, title string) string { + return metadata_request(baseurl, title, "team-colors", "") +} + +func vehicles(baseurl, title string) string { + return metadata_request(baseurl, title, "vehicles", "") +} + +func weapons(baseurl, title string) string { + return metadata_request(baseurl, title, "weapons", "") +} + +func metadata_request(baseurl, title, datatype, id string) string { + url, err := url.Parse(fmt.Sprintf("%s/metadata/%s/metadata/%s/%s", baseurl, title, datatype, id)) + checkErr(err) + q := url.Query() + url.RawQuery = q.Encode() + response := send_request(url.String()) + return response +} + +func send_request(url string) string { + request, err := http.NewRequest("GET", url, nil) + checkErr(err) + request.Header.Set("Ocp-Apim-Subscription-Key", apikey) + + response, err := http.DefaultClient.Do(request) + checkErr(err) + defer response.Body.Close() + + contents, err := ioutil.ReadAll(response.Body) + checkErr(err) + return string(contents) +} + +// Sample values for testing +var sampleMode string = "warzone" +var sampleMatchID string = "c35a35f8-f450-4836-a4c2-65100a7acb79" +var sampleSeasonID string = "b46c2095-4ca6-4f4b-a565-4702d7cfe586" //February 2016 Season +var samplePlaylistID string = "2323b76a-db98-4e03-aa37-e171cfbdd1a4" //SWAT gametype 2016 Season +var samplePlayers string = "motta13,smoke721" + +func main() { + // Uncomment any of the below for sample output. + //fmt.Println(matches_for_player(baseurl, title, gamertag, "warzone", 0, 0)) + //fmt.Println(events_for_match(baseurl, title, sampleMatchID)) + //fmt.Println(player_leaderboard(baseurl, title, sampleSeasonID, samplePlaylistID, 0)) + //fmt.Println(service_record_arena(baseurl, title, samplePlayers, sampleSeasonID)) + //fmt.Println(vehicles(baseurl, title)) + //fmt.Println(spartan_image(baseurl, title, gamertag, 0, "")) +}