Skip to content

Instantly share code, notes, and snippets.

@minhphong306
Created December 23, 2023 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save minhphong306/d7de92d80b664539e1326dcfa7712152 to your computer and use it in GitHub Desktop.
Save minhphong306/d7de92d80b664539e1326dcfa7712152 to your computer and use it in GitHub Desktop.
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type AutoGenerated struct {
ID string `json:"id"`
Slug string `json:"slug"`
Language string `json:"language"`
Title string `json:"title"`
Difficulty string `json:"difficulty"`
Points int `json:"points"`
Free bool `json:"free"`
Videos []struct {
URL string `json:"url"`
Title string `json:"title"`
} `json:"videos"`
Tags []string `json:"tags"`
Course string `json:"course"`
Sort int `json:"sort"`
Code struct {
Status string `json:"status"`
} `json:"code"`
}
func main() {
// read data from data.json
data, err := ioutil.ReadFile("./data.json")
if err != nil {
fmt.Println(err)
return
}
// parse data into array of strings
var raw []AutoGenerated
err = json.Unmarshal(data, &raw)
if err != nil {
fmt.Println(err)
return
}
// fetch data for each handle
for _, handle := range raw {
fetchAndWriteData(handle.Slug)
}
}
func fetchAndWriteData(handle string) {
url := fmt.Sprintf("https://www.smartcontract.engineer/_next/data/JRDyRmSvbq7qtJLBd3OUY/challenges/%v.json?course=sol&slug=%v", handle, handle)
method := "GET"
client := &http.Client {
}
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("authority", "www.smartcontract.engineer")
req.Header.Add("accept", "*/*")
req.Header.Add("accept-language", "en-US,en;q=0.9")
req.Header.Add("cookie", "xxx")
req.Header.Add("referer", "https://www.smartcontract.engineer/challenges?course=sol")
req.Header.Add("sec-ch-ua", "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"")
req.Header.Add("sec-ch-ua-mobile", "?0")
req.Header.Add("sec-ch-ua-platform", "\"macOS\"")
req.Header.Add("sec-fetch-dest", "empty")
req.Header.Add("sec-fetch-mode", "cors")
req.Header.Add("sec-fetch-site", "same-origin")
req.Header.Add("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
req.Header.Add("x-nextjs-data", "1")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
// fmt.Println(string(body))
// Save response body to file in data folder
ioutil.WriteFile(fmt.Sprintf("./data/%v.json", handle), body, 0644)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment