新項目用go寫,還是對接第三方平台的項目:根據API提供的URL獲取數據。
其實換湯不換葯,類似一個非常簡單的爬蟲項目,只不過需要用到三方的API。
這里直接給出具體代碼,剛剛入門go不久,先暫時寫一個同步的代碼實現效果,后續慢慢加上並發以及寫入數據庫的完整處理流程:
基礎代碼

package main import ( "fmt" "io/ioutil" "log" "net/http" ) func main() { // 三方平台的token token := "xxx" client := &http.Client{} // get請求 req, err := http.NewRequest("GET", "https://adsapi.snapchat.com/v1/me/organizations", nil) if err != nil { fmt.Println(err) log.Fatal(err) } // 在請求頭中加入校驗的token req.Header.Set("Authorization", "Bearer " + token) resp, err := client.Do(req) if err != nil { fmt.Println(err) log.Fatal(err) } bodyText, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) log.Fatal(err) } fmt.Printf("%s\n", bodyText) }
請求數據並將結果轉換為map類型的方法

// 返回 map的請求方法 func baseRqeuest(args ...string) map[string]interface{} { // token requestMethod url 三個參數是有順序的! token := args[0] requestMethod := args[1] url := args[2] client := &http.Client{} // get請求 req, err := http.NewRequest(requestMethod, url, nil) if err != nil { fmt.Println(err) log.Fatal(err) } // 在請求頭中加入校驗的token req.Header.Set("Authorization", "Bearer "+token) resp, err := client.Do(req) if err != nil { fmt.Println(err) log.Fatal(err) } returnMap, err := ParseResponse(resp) return returnMap } // 解析http請求返回的內容 ———— 轉換為 map[string]interface{} func ParseResponse(response *http.Response) (map[string]interface{}, error) { var result map[string]interface{} body, err := ioutil.ReadAll(response.Body) if err == nil { err = json.Unmarshal(body, &result) } return result, err }
請求數據並將結果轉換為string類型的方法

// base func baseRqeuestString(args ...string) string { // token requestMethod url 三個參數是有順序的! token := args[0] requestMethod := args[1] url := args[2] client := &http.Client{} // get請求 req, err := http.NewRequest(requestMethod, url, nil) if err != nil { fmt.Println(err) log.Fatal(err) } // 在請求頭中加入校驗的token req.Header.Set("Authorization", "Bearer "+token) resp, err := client.Do(req) if err != nil { fmt.Println(err) log.Fatal(err) } returnStr, err := ParseResponseString(resp) //fmt.Println("returnStr>>> " + returnStr) // TODO HTTP字節流轉為str的結果 return returnStr } // 解析http請求返回的內容 ———— 轉換為 string func ParseResponseString(response *http.Response) (string, error) { //var result map[string]interface{} body, err := ioutil.ReadAll(response.Body) // response.Body 是一個數據流 return string(body), err // 將 io數據流轉換為string類型返回! }
~~~