golang采集淘宝产品详情信息 解决禾匠小程序 采集淘宝失效的问题

最新刚开始学习golang,又遇到客户用了禾匠的小程序,不过遇到了采集淘宝失效的问题,正好就拿go来练练手吧
最近有非程序员加我,问我怎样用,懂代码的话 拿去直接用,不懂代码的话可以联系我帮忙给集成到自己的系统(当然肯定不是免费的),说明下 此程序只采集了 标题 价格 图片 详情,没有采集其他内容,要采集其他内容 请自行修改
问题联系qq 910297279
代码如下:

// main.go
package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
	"strings"

	"github.com/tidwall/gjson"
)

const desc_url string = "https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdesc/6.0/?jsv=2.4.11&appKey=12574478&t=1563268218883&sign=431e971830c19facd85e34d5f18fcbfb&api=mtop.taobao.detail.getdesc&v=6.0&type=jsonp&dataType=jsonp&timeout=20000&callback=mtopjsonp1&data=%7B\"id\"%3A\"{itemid}\"%2C\"type\"%3A\"0\"%2C\"f\"%3A\"TB1XdYqahz1gK0jSZSg8quvwpla\"%7D"
const attr_url string = "https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?jsv=2.5.1&appKey=12574478&t=1563326311049&sign=7bfc98a543f28ac2dbb5213b4d230115&api=mtop.taobao.detail.getdetail&v=6.0&isSec=0&ecode=0&AntiFlood=true&AntiCreep=true&H5Request=true&ttid=2018%40taobao_h5_9.9.9&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=%7B%22ft%22%3A%22t%22%2C%22id%22%3A%22{itemid}%22%2C%22hybrid%22%3A%22true%22%2C%22tg_key%22%3A%22jhs%22%2C%22v%22%3A%220%22%2C%22spm%22%3A%220.0.6951042979.d5%22%2C%22_from%22%3A%22h5%22%2C%22forceH5%22%3A%22YES%22%2C%22itemNumId%22%3A%22{itemid}%22%2C%22exParams%22%3A%22%7B%5C%22ft%5C%22%3A%5C%22t%5C%22%2C%5C%22id%5C%22%3A%5C%22{itemid}%5C%22%2C%5C%22hybrid%5C%22%3A%5C%22true%5C%22%2C%5C%22tg_key%5C%22%3A%5C%22jhs%5C%22%2C%5C%22v%5C%22%3A%5C%220%5C%22%2C%5C%22spm%5C%22%3A%5C%220.0.6951042979.d5%5C%22%2C%5C%22_from%5C%22%3A%5C%22h5%5C%22%2C%5C%22forceH5%5C%22%3A%5C%22YES%5C%22%7D%22%2C%22detail_v%22%3A%228.0.0%22%2C%22utdid%22%3A%221%22%7D"

type Taobaodata struct {
	Title       string   `json:"title"`
	Subtitle    string   `json:"subtitle"`
	Sale_count  int      `json:"sale_count"`
	Sale_price  string   `json:"sale_price"`
	PicsPath    []string `json:"picsPath"`
	Detail_info string   `json:"detail_info"`
}

type Redata struct {
	Code int        `json:"code"`
	Data Taobaodata `json:"data"`
}

func between(str, starting, ending string) string {
	s := strings.Index(str, starting)
	if s < 0 {
		return ""
	}
	s += len(starting)
	e := strings.Index(str[s:], ending)
	if e < 0 {
		return ""
	}
	return str[s : s+e]
}

func httpGet(url string) string {
	resp, err := http.Get(url)
	if err != nil {
		return ""
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return ""
	}
	return string(body)
}
func getAttr(itemid string) string {
	return httpGet(strings.Replace(attr_url, "{itemid}", itemid, -1))
}

func getDesc(itemid string) string {
	return httpGet(strings.Replace(desc_url, "{itemid}", itemid, -1))
}

func IndexHandler(w http.ResponseWriter, r *http.Request) {
	var itemid string
	query := r.URL.Query()
	if len(query["id"]) > 0 {
		itemid = query["id"][0]
	} else {
		fmt.Fprintln(w, "产品参数不能为空")
		return
	}

	attr := getAttr(itemid)
	desc := getDesc(itemid)

	mockData := strings.ReplaceAll(gjson.Get(attr, "data.mockData").String(), "\\", "")

	Detail_info := gjson.Get(desc, "data.wdescContent.pages").String()

	var content []string
	var text string
	json.Unmarshal([]byte(Detail_info), &content)
	for _, value := range content {
		if strings.Contains(value, "</img>") {
			text += "<img src='" + between(string(value), ">", "</img>") + "' />"
		}
		if strings.Contains(value, "</txt>") {
			text += "<p>" + between(string(value), ">", "</txt>") + "</p>"
		}
	}

	var pic []string
	json.Unmarshal([]byte(gjson.Get(attr, "data.item.images").String()), &pic)

	var taobao Taobaodata

	taobao.Title = gjson.Get(attr, "data.item.title").String()
	taobao.Subtitle = gjson.Get(attr, "data.item.subtitle").String()
	taobao.PicsPath = pic
	taobao.Sale_price = gjson.Get(mockData, "price.price.priceText").String()
	taobao.Sale_count = 0
	taobao.Detail_info = text

	return_data := Redata{Code: 0, Data: taobao}

	jsons, errs := json.Marshal(return_data) //转换成JSON返回的是byte[]
	if errs != nil {
		fmt.Println(errs.Error())
	}

	fmt.Fprintln(w, string(jsons))
}

func main() {
	http.HandleFunc("/", IndexHandler)
	if err := http.ListenAndServe(":9999", nil); err != nil {
		fmt.Println(err)
	}
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值