add parsing sumpays
All checks were successful
Build and push image / deploy (push) Successful in 1m44s

This commit is contained in:
2023-12-27 00:15:55 +03:00
parent c60045c47b
commit 3bbc6a0baa
9 changed files with 308 additions and 42 deletions

View File

@ -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",
}
}

View File

@ -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
View 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
}