| package schema |
| |
| import ( |
| "context" |
| "encoding/json" |
| "fmt" |
| "io/ioutil" |
| "net/http" |
| "strings" |
| ) |
| |
| func IXURL(id int64) string { |
| return fmt.Sprintf("https://peeringdb.com/api/ix/%d.json?depth=4", id) |
| } |
| |
| func NetIXLanInIXURL(id int64) string { |
| return fmt.Sprintf("https://peeringdb.com/api/netixlan?ix_id__in=%d", id) |
| } |
| |
| func NetURLMulti(ids []int64) string { |
| sid := make([]string, len(ids)) |
| for i, id := range ids { |
| sid[i] = fmt.Sprintf("%d", id) |
| } |
| return fmt.Sprintf("https://peeringdb.com/api/net?id__in=%s", strings.Join(sid, ",")) |
| } |
| |
| func Get(ctx context.Context, obj interface{}, url string) error { |
| req, err := http.NewRequest("GET", url, nil) |
| if err != nil { |
| return fmt.Errorf("http.NewRequest(GET, %q): %v", url, err) |
| } |
| |
| req.Header.Add("User-Agent", "bgpwtf-cccampix-peeringdbproxy/1.0 (https://code.hackerspace.pl/hscloud/bgpwtf/cccampix/peeringdb)") |
| |
| req = req.WithContext(ctx) |
| |
| client := http.DefaultClient |
| res, err := client.Do(req) |
| if err != nil { |
| return fmt.Errorf("client.Do(%v): %v", req, err) |
| } |
| |
| defer res.Body.Close() |
| |
| if res.StatusCode != 200 { |
| return fmt.Errorf("got status code %d", res.StatusCode) |
| } |
| |
| data, err := ioutil.ReadAll(res.Body) |
| if err != nil { |
| return fmt.Errorf("could not read response: %v", err) |
| } |
| |
| err = json.Unmarshal(data, &obj) |
| if err != nil { |
| return fmt.Errorf("could not parse response JSON: %v", err) |
| } |
| |
| return nil |
| } |