最新刚开始学习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)
}
}