github.com/wtfutil/wtf@v0.43.0/modules/subreddit/api.go (about) 1 package subreddit 2 3 import ( 4 "crypto/tls" 5 "fmt" 6 "net/http" 7 8 "github.com/wtfutil/wtf/utils" 9 ) 10 11 var rootPage = "https://www.reddit.com/r/" 12 13 func GetLinks(subreddit string, sortMode string, topTimePeriod string) ([]Link, error) { 14 url := rootPage + subreddit + "/" + sortMode + ".json" 15 if sortMode == "top" { 16 url = url + "?sort=top&t=" + topTimePeriod 17 } 18 19 request, err := http.NewRequest("GET", url, http.NoBody) 20 if err != nil { 21 return nil, err 22 } 23 24 request.Header.Set("User-Agent", "wtfutil (https://github.com/wtfutil/wtf)") 25 26 // See https://www.reddit.com/r/redditdev/comments/t8e8hc/comment/i18yga2/?utm_source=share&utm_medium=web2x&context=3 27 client := &http.Client{ 28 Transport: &http.Transport{ 29 TLSNextProto: map[string]func(authority string, c *tls.Conn) http.RoundTripper{}, 30 }, 31 } 32 resp, err := client.Do(request) 33 34 if err != nil { 35 return nil, err 36 } 37 defer func() { _ = resp.Body.Close() }() 38 39 if resp.StatusCode > 299 { 40 return nil, fmt.Errorf(resp.Status) 41 } 42 var m RedditDocument 43 err = utils.ParseJSON(&m, resp.Body) 44 45 if err != nil { 46 return nil, err 47 } 48 49 if len(m.Data.Children) == 0 { 50 return nil, fmt.Errorf("no links") 51 } 52 53 var links []Link 54 for _, l := range m.Data.Children { 55 links = append(links, l.Data) 56 } 57 return links, nil 58 }