diff --git a/README.md b/README.md index 455b60d..f69f591 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # nedim-vjezba-golang nedim vjezba golang + +Uses dependency `go get github.com/gorilla/mux` diff --git a/main.go b/main.go index de9541b..fdced94 100644 --- a/main.go +++ b/main.go @@ -5,59 +5,72 @@ import ( "log" "net/http" "encoding/json" - "io/ioutil" + "fmt" ) -//"name": "#ChainedToTheRhythm", -//"url": "http://twitter.com/search?q=%23ChainedToTheRhythm", -//"promoted_content": null, -//"query": "%23ChainedToTheRhythm", -//"tweet_volume": 48857 - -type Tweet struct { - Name string `json:"name,omitempty"` - Url string `json:"url,omitempty"` - PromotedContent string `promoted_content:"lastname,omitempty"` - Query string `json:"query,omitempty"` - TweetVolume string `json:"tweet_volume,omitempty"` +type Trend [] struct { + Trends [] struct { + Name string `json:"name,omitempty"` + Url string `json:"url,omitempty"` + PromotedContent string `promoted_content:"lastname,omitempty"` + Query string `json:"query,omitempty"` + TweetVolume int `json:"tweet_volume,omitempty"` + } `json:"trends"` } -type Address struct { - City string `json:"city,omitempty"` - State string `json:"state,omitempty"` -} - -var tweets []Tweet func main() { - tweets = append(tweets, Tweet{Name: "#ChainedToTheRhythm", Url: "http://twitter.com/search?q=%23ChainedToTheRhythm", PromotedContent: "null", Query: "%23ChainedToTheRhythm" , TweetVolume: "48857"}) - //people = append(people, Person{ID: "2", Firstname: "Koko", Lastname: "Doe", Address: &Address{City: "City Z", State: "State Y"}}) - //people = append(people, Person{ID: "3", Firstname: "Francis", Lastname: "Sunday"}) router := mux.NewRouter() - router.HandleFunc("/hashtags", GetHastags).Methods("GET") - //router.HandleFunc("/people", GetPeople).Methods("GET") - ////router.HandleFunc("/people/{id}", GetPerson).Methods("GET") - //router.HandleFunc("/people/{id}", CreatePerson).Methods("POST") - //router.HandleFunc("/people/{id}", DeletePerson).Methods("DELETE") + router.HandleFunc("/hashtags", GetHashtags).Methods("GET") + router.HandleFunc("/hashtags/{woeid}", GetHashtagFromWOEID).Methods("GET") log.Fatal(http.ListenAndServe(":8000", router)) } -func GetHastags(w http.ResponseWriter, r *http.Request) { +func GetHashtags(w http.ResponseWriter, r *http.Request) { - resp, err := http.Get("https://api.twitter.com/1.1/trends/place.json?id=1") + body := sendRequestToTwitter("1") + jsonResponse, err := json.Marshal(body) if err != nil { - println("There was an error") - println(err) - // handle error + panic(err) } - defer resp.Body.Close() - body, err := ioutil.ReadAll(resp.Body) - println(body) - json.NewEncoder(w).Encode(body) + + w.Write(jsonResponse) } -func GetPeople(w http.ResponseWriter, r *http.Request) { - //json.NewEncoder(w).Encode(people) +func GetHashtagFromWOEID(w http.ResponseWriter, r *http.Request) { + + params := mux.Vars(r) + body := sendRequestToTwitter(params["woeid"]) + jsonResponse, err := json.Marshal(body) + if err != nil { + panic(err) + } + + w.Write(jsonResponse) +} + +func sendRequestToTwitter(WOEID string) []string { + + url := "https://api.twitter.com/1.1/trends/place.json?id=" + WOEID + req, _ := http.NewRequest("GET", url, nil) + req.Header.Add("Authorization", "Bearer AAAAAAAAAAAAAAAAAAAAAKCtPAAAAAAAq1L5CTf40mf5K%2B7Q6QcWxsyjNvo%3DRkSK8AQBdk6latG2h47XWJVSQdn98heLv8HDLDhviicP3xvodm") + req.Header.Add("Cache-Control", "no-cache") + req.Header.Add("Accept", "application/json") + res, _ := http.DefaultClient.Do(req) + + defer res.Body.Close() + trends := Trend{} + var hashtags []string + + err := json.NewDecoder(res.Body).Decode(&trends) + if err != nil { + fmt.Printf("Error while parsing data: %s", err) + } + + for _, t := range trends[0].Trends { + hashtags = append(hashtags, t.Name) + println(t.Name) + } + + return hashtags } -func CreatePerson(w http.ResponseWriter, r *http.Request) {} -func DeletePerson(w http.ResponseWriter, r *http.Request) {} \ No newline at end of file