mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Issue #600 points out Jenkins module panics occasionally I noticed that a number of places panic because of JSON parsing Centralize JSON parsing, have it return an error, and have widgets report the error
68 lines
1.2 KiB
Go
68 lines
1.2 KiB
Go
package hackernews
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/wtfutil/wtf/utils"
|
|
)
|
|
|
|
func GetStories(storyType string) ([]int, error) {
|
|
var storyIds []int
|
|
|
|
switch strings.ToLower(storyType) {
|
|
case "new", "top", "job", "ask":
|
|
resp, err := apiRequest(storyType + "stories")
|
|
if err != nil {
|
|
return storyIds, err
|
|
}
|
|
|
|
err = utils.ParseJson(&storyIds, resp.Body)
|
|
if err != nil {
|
|
return storyIds, err
|
|
}
|
|
}
|
|
|
|
return storyIds, nil
|
|
}
|
|
|
|
func GetStory(id int) (Story, error) {
|
|
var story Story
|
|
|
|
resp, err := apiRequest("item/" + strconv.Itoa(id))
|
|
if err != nil {
|
|
return story, err
|
|
}
|
|
|
|
err = utils.ParseJson(&story, resp.Body)
|
|
if err != nil {
|
|
return story, err
|
|
}
|
|
|
|
return story, nil
|
|
}
|
|
|
|
/* -------------------- Unexported Functions -------------------- */
|
|
|
|
var (
|
|
apiEndpoint = "https://hacker-news.firebaseio.com/v0/"
|
|
)
|
|
|
|
func apiRequest(path string) (*http.Response, error) {
|
|
req, err := http.NewRequest("GET", apiEndpoint+path+".json", nil)
|
|
|
|
httpClient := &http.Client{}
|
|
resp, err := httpClient.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if resp.StatusCode < 200 || resp.StatusCode > 299 {
|
|
return nil, fmt.Errorf(resp.Status)
|
|
}
|
|
|
|
return resp, nil
|
|
}
|