Go 通过Api获取数据,写入csv文件(几十万数据写入csv文件)

Golang · Fecmall · 于 6年前 发布 · 4717 次阅读
package main
    
import (
    "os"
    "strconv"
    "encoding/csv"
    "io/ioutil"
    "fmt"
    "net/http"
    "encoding/json"
)
//产品数据类型
type ExcelData map[string][][]string
//总页数类型
type numPageData map[string]int
// 获取总页数的url 
//api返回数据格式为 {"count":5}
var pageNumUrl string = "http://xxx.com/catalog/product/num";
// 获取产品的url
/*
{'data' => 
	[
     	['terry','1','2','3'],
        ['water','11','22','33'],
        ['xxx','111','222','333'],
	]
}
*/
var dataUrl    string = "http://xxx.com/catalog/product/products";

func main() {
    // 新建文件/root/go/data,并设置成777即可,不用新建csv文件
    f, err := os.Create("/root/go/data/quarkscm_product_3.csv")
    if err != nil {
        panic(err)
    }
    defer f.Close()
    f.WriteString("\xEF\xBB\xBF") // 写入UTF-8 BOM
    w := csv.NewWriter(f)
    pageNum := getPageNum();
    // 按照总页数循环
    for i:=1 ; i <= pageNum ; i++ {
        fmt.Println("pageNum: d%", i);
        // 得到产品
        excel_data := getProductData(i);
        // 遍历数据,写入csv
        for _,v1 := range excel_data["data"]{
            
            w.Write(v1)
        }
    }
    w.Flush()
}
// 通过api得到总页数
func getPageNum() int{
    resp, err := http.Get(pageNumUrl)
    fmt.Println("pageNumUrl: s%", pageNumUrl)
    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()
    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    var result numPageData

    err = json.Unmarshal(data, &result)
    if err != nil {
        panic(err)
    }
    fmt.Println("pageNumPage:", result["count"])
    
    return result["count"]
}
// 通过api获取产品
func getProductData(p int) ExcelData{

    dataUrlP := dataUrl + "?page=" + strconv.Itoa(p) ;
    fmt.Println("dataUrlP: s%",dataUrlP)
    resp, err := http.Get(dataUrlP)

    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()
    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    //fmt.Printf("%s\n", data)
    
    var result  ExcelData

    err = json.Unmarshal(data, &result)
    if err != nil {
        panic(err)
    }

    //fmt.Println("result:", result)
    
    return result
}

共收到 0 条回复 技术分享
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics