5f0288e32c
The secret API key is now imported from the environment instead of being hard coded into the package. The gamertag variable has been renamed to sampleGamertag.
292 lines
8.4 KiB
Go
292 lines
8.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
var baseurl string = "https://www.haloapi.com"
|
|
var title string = "h5"
|
|
|
|
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()
|
|
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)
|
|
apikey := os.Getenv("HALO_API_KEY")
|
|
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 sampleGamertag string = "motta13"
|
|
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, SampleGamertag, "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, ""))
|
|
}
|