# README
go-cod
go-cod is the unofficial Go SDK of the Call of Duty API used in the callofduty.com site
- Getting Started
- Sample codes and Payload
- Generate Models and Client from Swagger Spec
- Roadmap
- Request for missing APIs and fields
- Contribution
- Credits
- Developer
Getting Started
import "github.com/carlocayos/go-cod/v2"
Create a new go-cod client then use the services to access the COD APIs.
A short example:
// create the client
c := go_cod.NewClient(nil)
// get leader board list
leaderBoardResp, _ := c.LeaderBoard(context.Background(),
go_cod.ModernWarfare, go_cod.Battlenet, 3)
fmt.Println(leaderBoardResp.Status)
fmt.Println(leaderBoardResp.Data.Title)
The cod client is composed of an authentication client and service client.
Authentication
Authentication client is for getting a security token that will be used for most of the API requests.
See example on how to login and send authenticated requests.
// =======================================================
// 1) First, is creating a client and sending a register device request
// =======================================================
c := go_cod.NewClient(nil)
// send a register device request with a unique device id
// ksuid is used here to generate a unique id, but any uid generator would be fine
deviceId := ksuid.New().String()
registerDeviceRes, _ := c.RegisterDevice(context.Background(), deviceId)
// =======================================================
// 2) Next is the Login request. Replace it with your email and password
// and pass the returned AuthHeader and Device ID
// =======================================================
email := "<< CHANGE ME >>"
password := "<< CHANGE ME >>"
loginRes, _ := c.Login(context.Background(), deviceId, email,
password, *registerDeviceRes.Data.AuthHeader)
fmt.Println(loginRes.ACTSSOCOOKIE)
// =======================================================
// 3) Final step is to send a Get Gamer Match List.
// You need to call Login() before using this authenticated request.
// The token is stored in the client and will be implicitly sent along
// each Authenticated request.
// =======================================================
// create Gamer struct - MUST CHANGE this to your own account
gamer := &go_cod.Gamer{
Platform: go_cod.Battlenet,
LookupType: go_cod.BattlenetLookup,
GamerTag: "MrExcitement#6438",
}
gamerMatchListResp, _ := c.GamerMatchList(context.Background(),
go_cod.ModernWarfare, gamer, go_cod.Multiplayer, 0, 0, 3)
fmt.Println(gamerMatchListResp.Status)
for _, v := range gamerMatchListResp.Data {
fmt.Printf("\tMap = %v\n", v.Map)
fmt.Printf("\tMatchID = %v\n", v.MatchID)
fmt.Printf("\tPlatform = %v\n", v.Platform)
fmt.Printf("\tTimestamp = %v\n", v.Timestamp)
fmt.Printf("\tTitle = %v\n", v.Title)
fmt.Printf("\tType = %v\n\n", v.Type)
}
Unmapped fields
As there is no official API documentation, the swagger spec and JSON schema mapping is inferred through the actual JSON response payload.
Fields that are not mapped to a struct field can be accessed from the *AdditionalProperties
field of type map[string]interface{}
missingField := response.Data.SampleResponseDataAdditionalProperties["missing_field_name"].(map[string]interface{})
anotherMissingField := missingField["another_missing_field"]
fmt.Printf("anotherMissingField")
See How to request missing APIs and fields
Sample codes and Payload
Sample codes are in examples
Actual JSON response payload *_sample.json
can be found in json-schema
Generate Models and Client from Swagger Spec
The model and client codes are generated using go-swagger and OpenAPI Version 2.0
See here for more information on how to generate an API client
Generating client and models
For any changes in the COD API, update the swagger spec and generate a new client and model
Run this command to generate the client and model codes
make swagger-gen
API Documentation
Run this command to run the ReDoc container
make swagger-docs
Then open http://localhost:9000 to see the list of APIs.
Roadmap
-
Added facade to simplify API call process -
Improve field mapping for Friend Stats API Response -
Improve field mapping for Gamer Stats API Response -
Improve field mapping for Battlepass Loot API Response -
Improve field mapping for Match Details API Response -
Improve field mapping for Loadout API Response -
Improve field mapping for COD Points API Response -
Improve field mapping for Purchasable API Response -
Imoproved field mapping.See issue#3 - Add more example codes and helper functions (e.g. Get Uno ID...)
- Context handling
Request for missing APIs and fields
Report new or missing COD APIs and fields here
Contribution
Code improvements, suggestions, and updates are most welcome. Please feel free to raise an issue or create a pull request for your changes. 🙂
There is no official COD API and documentation released by Activision. If there is a breaking change on the COD API then let me know, so I can update this project.
Credits
Thanks to Lierrmm for his work on the NodeJS Call of Duty API Wrapper
Developer
Personal Site: carlocayos.com
BTC address: 32zunH725N7PjBYj2TfbVoC3jVCyhqyn5h
ETH address: 0x2A17e4031FFeF64C638Dd9B190e05a150b2B8FBc