Create scraping library to get match data

To use it, you need to make a JSON config file which gets stored
at the workspace root or you pass the path into the function(s)

Change-Id: I9d074c7ad84c45b418eb5be8b316a84b022db835
Signed-off-by: Het Satasiya <satasiyahet@gmail.com>
diff --git a/scouting/scraping/scrape.go b/scouting/scraping/scrape.go
new file mode 100644
index 0000000..fa20f7b
--- /dev/null
+++ b/scouting/scraping/scrape.go
@@ -0,0 +1,86 @@
+package scraping
+
+// A library to grab match data from The Blue Alliance.
+import (
+	"encoding/json"
+	"errors"
+	"io/ioutil"
+	"log"
+	"net/http"
+	"os"
+)
+
+// Stores the TBA API key to access the API.
+type params struct {
+	ApiKey string `json:"api_key"`
+}
+
+// Takes in year and FIRST event code and returns all matches in that event according to TBA.
+// Also takes in a file path to the JSON config file that contains your TBA API key.
+// It defaults to <workspace root>/config.json
+// the config is expected to have the following contents:
+//{
+//    api_key:"myTBAapiKey"
+//}
+func AllMatches(year, eventCode, filePath string) ([]Match, error) {
+	if filePath == "" {
+		filePath = os.Getenv("BUILD_WORKSPACE_DIRECTORY") + "/scouting_config.json"
+	}
+	// Takes the filepath and grabs the api key from the json.
+	content, err := ioutil.ReadFile(filePath)
+	if err != nil {
+		log.Fatal(err)
+	}
+	// Parses the JSON parameters into a struct.
+	var passed_params params
+	error := json.Unmarshal([]byte(content), &passed_params)
+	if error != nil {
+		log.Fatalf("You forgot to add the api_key parameter in the json file")
+		log.Fatalf("%s", err)
+	}
+
+	// Create the TBA event key for the year and event code.
+	eventKey := year + eventCode
+
+	// Create the client for HTTP requests.
+	client := &http.Client{}
+
+	// Create a get request for the match info.
+	req, err := http.NewRequest("GET", "https://www.thebluealliance.com/api/v3/event/"+eventKey+"/matches", nil)
+
+	if err != nil {
+		return nil, errors.New("failed to build http request")
+	}
+
+	// Add the auth key header to the request.
+	req.Header.Add("X-TBA-Auth-Key", passed_params.ApiKey)
+
+	// Make the API request
+	resp, err := client.Do(req)
+
+	if err != nil {
+		return nil, err
+	}
+
+	if resp.Status != "200 OK" {
+		return nil, errors.New("Recieved a status of " + resp.Status + " expected : 200 OK")
+	}
+
+	// Wait until the response is done.
+	defer resp.Body.Close()
+
+	// Get all bytes from response body.
+	bodyBytes, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		return nil, errors.New("failed to read response body with error :" + err.Error())
+	}
+
+	var matches []Match
+	// Unmarshal json into go usable format.
+	jsonError := json.Unmarshal([]byte(bodyBytes), &matches)
+	if jsonError != nil {
+		return nil, errors.New("failed to unmarshal json recieved from TBA")
+	}
+
+	return matches, nil
+}