使用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
}
View Code 

請求數據並將結果轉換為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類型返回!
}
View Code

 ~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM