add parsing sumpays
All checks were successful
Build and push image / deploy (push) Successful in 1m44s
All checks were successful
Build and push image / deploy (push) Successful in 1m44s
This commit is contained in:
@ -6,16 +6,18 @@ import (
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
httpClis []*http.Client
|
||||
token string
|
||||
sellerID int
|
||||
httpClis []*http.Client
|
||||
token string
|
||||
sellerID int
|
||||
guidAgent string
|
||||
}
|
||||
|
||||
func New(clients []*http.Client) *Client {
|
||||
return &Client{
|
||||
httpClis: clients,
|
||||
token: "7C731D89FED84B479B89F24F81BB8AF2",
|
||||
sellerID: 1209592,
|
||||
httpClis: clients,
|
||||
token: "7C731D89FED84B479B89F24F81BB8AF2",
|
||||
sellerID: 1209592,
|
||||
guidAgent: "98232A21641B4DF0B13FE96A48CCAD9E",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
package plati
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
@ -14,6 +16,101 @@ import (
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
)
|
||||
|
||||
type GoodsRequest struct {
|
||||
XMLName xml.Name `xml:"digiseller.request"`
|
||||
GuidAgent string `xml:"guid_agent"`
|
||||
IDSection int `xml:"id_section"`
|
||||
Lang string `xml:"lang"`
|
||||
Encoding string `xml:"encoding"`
|
||||
Page int `xml:"page"`
|
||||
Rows int `xml:"rows"`
|
||||
Currency string `xml:"currency"`
|
||||
Order string `xml:"order"`
|
||||
}
|
||||
|
||||
type GoodsResponse struct {
|
||||
XMLName xml.Name `xml:"digiseller.response"`
|
||||
Retval string `xml:"retval"`
|
||||
Retdesc string `xml:"retdesc"`
|
||||
IDSection int `xml:"id_section"`
|
||||
NameSection string `xml:"name_section"`
|
||||
Page string `xml:"page"`
|
||||
Order string `xml:"order"`
|
||||
CntGoods string `xml:"cnt_goods"`
|
||||
Pages string `xml:"pages"`
|
||||
Rows struct {
|
||||
Cnt int `xml:"cnt,attr"`
|
||||
Row []struct {
|
||||
ID string `xml:"id,attr"`
|
||||
IDGoods int `xml:"id_goods"`
|
||||
NameGoods string `xml:"name_goods"`
|
||||
Price Stupidfloat `xml:"price"`
|
||||
Currency string `xml:"currency"`
|
||||
Discount string `xml:"discount"`
|
||||
Gift string `xml:"gift"`
|
||||
Reward string `xml:"reward"`
|
||||
IDSeller int `xml:"id_seller"`
|
||||
NameSeller string `xml:"name_seller"`
|
||||
Rating Stupidfloat `xml:"rating"`
|
||||
Summpay Stupidfloat `xml:"summpay"`
|
||||
SaleInfo struct {
|
||||
CommonBasePrice string `xml:"common_base_price"`
|
||||
CommonPriceUsd string `xml:"common_price_usd"`
|
||||
CommonPriceRur string `xml:"common_price_rur"`
|
||||
CommonPriceEur string `xml:"common_price_eur"`
|
||||
CommonPriceUah string `xml:"common_price_uah"`
|
||||
SalePercent string `xml:"sale_percent"`
|
||||
} `xml:"sale_info"`
|
||||
Statistics struct {
|
||||
CntSell int `xml:"cnt_sell"`
|
||||
CntSellHidden int `xml:"cnt_sell_hidden"`
|
||||
CntReturn int `xml:"cnt_return"`
|
||||
CntReturnHidden int `xml:"cnt_return_hidden"`
|
||||
CntGoodresponses int `xml:"cnt_goodresponses"`
|
||||
CntGoodresponsesHidden int `xml:"cnt_goodresponses_hidden"`
|
||||
CntBadresponses int `xml:"cnt_badresponses"`
|
||||
CntBadresponsesHidden int `xml:"cnt_badresponses_hidden"`
|
||||
} `xml:"statistics"`
|
||||
} `xml:"row"`
|
||||
} `xml:"rows"`
|
||||
}
|
||||
|
||||
func (c *Client) GetGoods(ctx context.Context, idSection int, lang string, page int, rows int, currency string) (*GoodsResponse, error) {
|
||||
reqBody, _ := xml.Marshal(GoodsRequest{
|
||||
GuidAgent: c.guidAgent,
|
||||
IDSection: idSection,
|
||||
Lang: lang,
|
||||
Encoding: "utf-8",
|
||||
Page: page,
|
||||
Rows: rows,
|
||||
Currency: currency,
|
||||
})
|
||||
req, _ := http.NewRequestWithContext(ctx, http.MethodPost, "https://plati.io/xml/goods.asp", bytes.NewReader(reqBody))
|
||||
dump, _ := httputil.DumpRequestOut(req, true)
|
||||
log.Printf("%s\n", string(dump))
|
||||
|
||||
resp, err := c.httpCli().Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("http do: %w", err)
|
||||
}
|
||||
|
||||
// dump, err = httputil.DumpResponse(resp, true)
|
||||
// log.Printf("%d %s", resp.StatusCode, string(dump))
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
return nil, fmt.Errorf("status code: %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
out := GoodsResponse{}
|
||||
if err := xml.NewDecoder(resp.Body).Decode(&out); err != nil {
|
||||
return nil, fmt.Errorf("xml decode GoodsResponse: %w", err)
|
||||
}
|
||||
|
||||
return &out, nil
|
||||
}
|
||||
|
||||
func (c *Client) GetBlockGoodsCategory(ctx context.Context, idC int, idR int, sort string, page int, rows int, curr string, lang string) ([]*Good, error) {
|
||||
u := fmt.Sprintf("https://plati.market/asp/block_goods_category.asp?preorders=0&id_cb=0&id_c=%d&id_r=%d&sort=%s&page=%d&rows=%d&curr=%s&pp_only=false&lang=ru-RU&rnd=%f", idC, idR, sort, page, rows, curr, rand.Float32())
|
||||
req, err := http.NewRequestWithContext(ctx, "GET", u, http.NoBody)
|
||||
|
26
plati/stupidfloat.go
Normal file
26
plati/stupidfloat.go
Normal file
@ -0,0 +1,26 @@
|
||||
package plati
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Stupidfloat float64
|
||||
|
||||
func (f Stupidfloat) Float64() float64 {
|
||||
return float64(f)
|
||||
}
|
||||
|
||||
func (f *Stupidfloat) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
||||
floatString := ""
|
||||
err := d.DecodeElement(&floatString, &start)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
floatString = strings.ReplaceAll(floatString, ",", ".")
|
||||
fl64, err := strconv.ParseFloat(floatString, 64)
|
||||
|
||||
*f = Stupidfloat(fl64)
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user