使用go的http获取三方API的数据
新项目用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类型返回! }
~~~