// FetchAllPackagesInGodoc fetches the list of all packages on godoc.org func FetchAllPackagesInGodoc(httpClient doc.HttpClient) ([]string, error) { req, err := http.NewRequest("GET", godocApiUrl, nil) if err != nil { return nil, errorsp.WithStacksAndMessage(err, "new request for %v failed", godocApiUrl) } resp, err := httpClient.Do(req) if err != nil { return nil, errorsp.WithStacksAndMessage(err, "fetching %v failed", godocApiUrl) } defer resp.Body.Close() if resp.StatusCode != 200 { return nil, errorsp.NewWithStacks("StatusCode: %d", resp.StatusCode) } var results map[string][]map[string]string dec := json.NewDecoder(resp.Body) if err := dec.Decode(&results); err != nil { return nil, errorsp.WithStacks(err) } list := make([]string, 0, len(results["results"])) for _, res := range results["results"] { list = append(list, res["path"]) } return list, nil }
func Plusone(httpClient doc.HttpClient, url string) (int, error) { req, err := http.NewRequest("POST", "https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ", bytesp.NewPSlice([]byte( `[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id": "`+ url+`","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]`))) if err != nil { return 0, errorsp.WithStacksAndMessage(err, "new request for crawling g+ of %v failed", url) } req.Header.Set("Content-Type", "application/json") resp, err := httpClient.Do(req) if err != nil { return 0, errorsp.WithStacksAndMessage(err, "crawling g+ of %v failed", url) } defer resp.Body.Close() dec := json.NewDecoder(resp.Body) var v [1]struct { Result struct { Metadata struct { GlobalCounts struct { Count float64 } } } } if err := dec.Decode(&v); err != nil { return 0, errorsp.WithStacksAndMessage(err, "decoding g+ of %v failed", url) } return int(0.5 + v[0].Result.Metadata.GlobalCounts.Count), nil }
// FetchAllPackagesInGodoc fetches the list of all packages on godoc.org func FetchAllPackagesInGodoc(httpClient doc.HttpClient) ([]string, error) { req, err := http.NewRequest("GET", godocApiUrl, nil) if err != nil { return nil, err } resp, err := httpClient.Do(req) if err != nil { return nil, err } defer resp.Body.Close() if resp.StatusCode != 200 { return nil, errors.New(fmt.Sprintf("StatusCode: %d", resp.StatusCode)) } var results map[string][]map[string]string dec := json.NewDecoder(resp.Body) if err := dec.Decode(&results); err != nil { return nil, err } list := make([]string, 0, len(results["results"])) for _, res := range results["results"] { list = append(list, res["path"]) } return list, nil }
func LikeButton(httpClient doc.HttpClient, Url string) (int, error) { req, err := http.NewRequest("GET", "http://graph.facebook.com/?"+ url.Values{"ids": {Url}}.Encode(), nil) if err != nil { return 0, err } resp, err := httpClient.Do(req) if err != nil { return 0, err } defer resp.Body.Close() dec := json.NewDecoder(resp.Body) var v map[string]struct { Shares int } if err := dec.Decode(&v); err != nil { return 0, err } return v[Url].Shares, nil }