prerequisite
python3
requests
If your computer not install requests lib yet
pip install requests
To get teammates info
python crawl_uprace.py > ~/Downloads/teammates_info.csv
Then open ~/Downloads/teammates_info.csv for more detail
package main | |
import ( | |
"encoding/json" | |
"fmt" | |
"io/ioutil" | |
"net/http" | |
"strings" | |
) | |
func main() { | |
url := "https://api.uprace.vn/api/event/rank/list" | |
payload := ` | |
{ | |
"trid":"6d78c2b7-059b-4192-858e-74443d27c8ea", | |
"trtm":1600589548, | |
"data":{ | |
"from": 0, | |
"size": 1, | |
"evid":2, | |
"type":1, | |
"sex":0, | |
"name":"", | |
"value":93 | |
} | |
} | |
` | |
//var f interface {} | |
resp, err := http.Post(url, "application/json", strings.NewReader(payload)) | |
if err != nil { | |
panic(err) | |
} | |
data, err := ioutil.ReadAll(resp.Body) | |
defer resp.Body.Close() | |
if err != nil { | |
panic(err) | |
} | |
m := make(map[string]interface{}) | |
err = json.Unmarshal(data, &m) | |
m_data, ok := m["data"].(map[string]interface{}) | |
total_mem := 0 | |
if ok { | |
total_mem = int(m_data["total"].(float64)) | |
} | |
page_size := 100 | |
total_page := int(total_mem/page_size + 1) | |
fmt.Printf("%d %d %d\n", total_mem, page_size, total_page) | |
for i := 0; i < total_page; i++ { | |
payload = fmt.Sprintf(` | |
{ | |
"trid":"6d78c2b7-059b-4192-858e-74443d27c8ea", | |
"trtm":1600589548, | |
"data":{ | |
"from": %d, | |
"size": %d, | |
"evid":2, | |
"type":1, | |
"sex":0, | |
"name":"", | |
"value":93 | |
} | |
}`, i*page_size, page_size) | |
resp, err := http.Post(url, "application/json", strings.NewReader(payload)) | |
if err != nil { | |
panic(err) | |
} | |
data, err := ioutil.ReadAll(resp.Body) | |
defer resp.Body.Close() | |
if err != nil { | |
panic(err) | |
} | |
type Member struct { | |
Id int | |
Name string | |
Sex int | |
Rank int | |
City string | |
Ctry string | |
Ava string | |
} | |
type UpRaceResp struct { | |
Data struct { | |
List []Member | |
} | |
} | |
var uResp UpRaceResp | |
if err = json.Unmarshal(data, &uResp); err != nil { | |
panic(err) | |
} | |
fmt.Printf("mem.Id,mem.Name,mem.Sex,mem.Rank,mem.City,mem.Ctry,mem.Ava\n") | |
for _, mem := range uResp.Data.List { | |
fmt.Printf("%d,%s,%d,%d,%s,%s,%s\n", mem.Id, mem.Name, mem.Sex, mem.Rank, mem.City, mem.Ctry, mem.Ava) | |
} | |
} | |
} |
import requests | |
page_size = 100 | |
url = "https://api.uprace.vn/api/event/rank/list" | |
# get total members | |
payload = { | |
"trid":"6d78c2b7-059b-4192-858e-74443d27c8ea", | |
"trtm":1600589548, | |
"data":{ | |
"from": 0, | |
"size": 1, | |
"evid":2,"type":1,"sex":0,"name":"","value":93 | |
} | |
} | |
res = requests.post(url, json=payload) | |
total_mem = res.json()['data']['total'] | |
total_page = int(total_mem / page_size) + 1 | |
print('id, name, sex, rank, city, ctry, tmnm, ava') | |
for i in range(0, total_page): | |
payload = { | |
"trid":"6d78c2b7-059b-4192-858e-74443d27c8ea", | |
"trtm":1600589548, | |
"data":{ | |
"from": i*page_size, | |
"size": page_size, | |
"evid":2,"type":1,"sex":0,"name":"","value":93 | |
} | |
} | |
res = requests.post(url, json=payload) | |
for mem in res.json()['data']['list']: | |
print('{},{},{},{},{},{},{},{}'.format( | |
mem["id"], | |
mem["name"], mem["sex"], mem["rank"], mem["city"], mem["ctry"], | |
mem["tmnm"], mem["ava"])) |