Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "time"
- "database/sql"
- "strconv"
- _ "github.com/go-sql-driver/mysql"
- )
- type SBAPIgetSalesPostBody struct {
- Apikey string `json:"apikey"`
- Type int `json:"type"`
- AppId int `json:"appid"`
- After_saleid string `json:"after_saleid"`
- Items_per_page int `json:"items_per_page"`
- }
- type Client struct {
- ClientId int64
- Api_Key string
- IDtoStartFrom string
- EndId string
- State int
- }
- type ResponseItem struct {
- Id string `json:"id"`
- Price float64 `json:"price"`
- Commission float64 `json:"commission"`
- Classid string `json:"classid"`
- Instanceid string `json:"instanceid"`
- Appid int `json"appid"`
- Assetid string `json:"assetid"`
- Name string `json:"name"`
- State int `json:"state"`
- List_time int64 `json:"list_time"`
- Last_updated int64 `json:"last_updated"`
- Wear float64 `json:"wear"`
- Txid string `json: "txid"`
- }
- type ServerResponse struct {
- Response []ResponseItem
- }
- func GetClients() []Client {
- ALLClients := []Client{
- Client{
- ClientId: 76561198061661326,
- Api_Key: "58421-b9e3a61d-7155-407e-b0b8-b8b8beaf15f0",
- IDtoStartFrom: "",
- EndId: "",
- State: 4,
- },
- }
- return ALLClients
- }
- func (c *Client) ClientRoutine(db *sql.DB) {
- c.GetEndId(db)
- idx := -1
- for true {
- ItemList := c.GetItems()
- if ItemList == nil {
- return
- }
- idx = c.ContainsEndId(ItemList)
- if idx == -1 {
- fmt.Println("EndId nicht vorhanden")
- idx = len(ItemList)
- c.SaveInDB(db, ItemList, idx)
- c.SetStartId(ItemList)
- } else {
- if idx == 0 {
- return
- }
- c.SaveInDB(db, ItemList, idx)
- return
- fmt.Println("EndId vorhanden")
- }
- time.Sleep(5 * time.Second)
- }
- }
- //idxEnd muss standardmäsig auf len(Items)
- func (c *Client) SaveInDB(db *sql.DB, Items []ResponseItem, idxEnd int) {
- str := strconv.FormatInt(c.ClientId, 10)
- // var Price string
- // var Commission string
- // var Wear string
- for i := 0; i < idxEnd; i++ {
- Price := fmt.Sprintf("%f", Items[i].Price)
- Commission := fmt.Sprintf("%f", Items[i].Commission)
- Wear := fmt.Sprintf("%f", Items[i].Wear)
- Insert, err := db.Query("INSERT INTO SBSales (SBSales.userid, SBSales.market_hash_name, SBSales.id, SBSales.price, SBSales.state, SBSales.commission, SBSales.listed, SBSales.last_changed, SBSales.wear, SBSales.txid)VALUES(" + str + ",\"" + Items[i].Name + "\", \"" + Items[i].Id + "\", " + Price + ", " + strconv.Itoa(c.State) + ", " + Commission + ", \"" + time.Unix(Items[i].List_time, 0).Format("2006-01-02 15:04:05") + "\",now() ," + Wear + ", \"" + Items[i].Txid + "\")")
- fmt.Println("Added Item", i)
- if err != nil {
- panic(err.Error())
- }
- Insert.Close()
- }
- }
- //Gets all items
- func (CurrentClient *Client) GetItems() []ResponseItem {
- getSalesPostBody := &SBAPIgetSalesPostBody{
- Apikey: CurrentClient.Api_Key,
- Type: CurrentClient.State,
- AppId: 730,
- After_saleid: CurrentClient.IDtoStartFrom,
- Items_per_page: PageSize,
- }
- var s ServerResponse
- postBody, _ := json.Marshal(getSalesPostBody)
- body := post(api_base+"/GetSales", string(postBody))
- in := []byte(body)
- err := json.Unmarshal(in, &s)
- if err != nil {
- panic(err)
- }
- return s.Response
- }
- func post(url string, jsonData string) string {
- var jsonStr = []byte(jsonData)
- req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
- req.Header.Set("Content-Type", "application/json")
- req.Header.Set("x-requested-with", "XMLHttpRequest")
- client := &http.Client{}
- resp, err := client.Do(req)
- if err != nil {
- panic(err)
- }
- defer resp.Body.Close()
- //fmt.Println("response Status:", resp.Status)
- body, _ := ioutil.ReadAll(resp.Body)
- return string(body)
- }
- //Gives the Client the Endid
- func (c *Client) GetEndId(db *sql.DB) {
- var id string
- str := strconv.FormatInt(c.ClientId, 10)
- fmt.Println(str)
- rows, err := db.Query("SELECT id FROM SBSales WHERE state = " + strconv.Itoa(c.State) + " AND userid = " + str + "")
- if err != nil {
- panic(err.Error())
- }
- for rows.Next() {
- rows.Scan(&id)
- c.EndId = id
- }
- fmt.Println("EndId:")
- fmt.Println(c.EndId)
- }
- //Gives Index for Endid in array
- func (c *Client) ContainsEndId(Items []ResponseItem) int {
- for i := 0; i < PageSize; i++ {
- if Items[i].Id == c.EndId {
- return i
- }
- }
- return -1
- }
- //Sets Client start Id to the next to start from
- func (c *Client) SetStartId(Items []ResponseItem) {
- c.IDtoStartFrom = Items[PageSize-1].Id
- }
- var api_base string = "https://api.skinbaron.de"
- var PageSize int = 1000
- func main() {
- fmt.Println("Server started...")
- //all Clients
- Clients := GetClients()
- fmt.Println("*Clients loaded*")
- for true {
- //loop through all Clients and open them in new threads
- //Idtostartfrom und EndId auslesen aus database auslesen
- db, err := sql.Open("mysql", "root:mCwfStG3xpqxqP4&5S9aj4ySjZpk7Sr9@tcp(rt-general-db.chy0hf5bkt4k.eu-central-1.rds.amazonaws.com:3306)/RamboTrades")
- delete, err := db.Query("DELETE FROM SBSales")
- defer delete.Close()
- if err != nil {
- panic(err.Error())
- }
- defer db.Close()
- for idx, _ := range Clients {
- go Clients[idx].ClientRoutine(db)
- }
- time.Sleep(time.Hour)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement