timelines.go
author Mikael Berthe <mikael@lilotux.net>
Wed, 12 Apr 2017 23:36:46 +0200
changeset 94 beee0238a82e
parent 92 05c201b548b0
child 98 5d803adfc57e
permissions -rw-r--r--
Timelines: fix hashtag timelines
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
88
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     1
package gondole
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     2
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     3
import (
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     4
	"encoding/json"
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     5
	"fmt"
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     6
	"strings"
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     7
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     8
	"github.com/sendgrid/rest"
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     9
)
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    10
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    11
// GetTimelines returns a timeline (a list of statuses
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    12
// timeline can be "home", "public", or a hashtag (":hashtag")
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    13
func (g *Client) GetTimelines(timeline string) ([]Status, error) {
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    14
	var endPoint string
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    15
	var tl []Status
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    16
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    17
	if timeline == "home" || timeline == "public" {
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    18
		endPoint = "timelines/" + timeline
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    19
	} else if strings.HasPrefix(timeline, ":") {
94
beee0238a82e Timelines: fix hashtag timelines
Mikael Berthe <mikael@lilotux.net>
parents: 92
diff changeset
    20
		hashtag := timeline[1:]
beee0238a82e Timelines: fix hashtag timelines
Mikael Berthe <mikael@lilotux.net>
parents: 92
diff changeset
    21
		if hashtag == "" {
beee0238a82e Timelines: fix hashtag timelines
Mikael Berthe <mikael@lilotux.net>
parents: 92
diff changeset
    22
			return tl, fmt.Errorf("timelines API: empty hashtag")
beee0238a82e Timelines: fix hashtag timelines
Mikael Berthe <mikael@lilotux.net>
parents: 92
diff changeset
    23
		}
beee0238a82e Timelines: fix hashtag timelines
Mikael Berthe <mikael@lilotux.net>
parents: 92
diff changeset
    24
		endPoint = "timelines/tag/" + hashtag
88
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    25
	} else {
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    26
		return tl, fmt.Errorf("GetTimelines: bad timelines argument")
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    27
	}
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    28
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    29
	req := g.prepareRequest(endPoint)
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    30
	r, err := rest.API(req)
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    31
	if err != nil {
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    32
		return tl, fmt.Errorf("timelines API query: %s", err.Error())
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    33
	}
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    34
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    35
	err = json.Unmarshal([]byte(r.Body), &tl)
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    36
	if err != nil {
92
05c201b548b0 Timelines: Handle error from API server
Mikael Berthe <mikael@lilotux.net>
parents: 88
diff changeset
    37
		var res struct {
05c201b548b0 Timelines: Handle error from API server
Mikael Berthe <mikael@lilotux.net>
parents: 88
diff changeset
    38
			Error string `json:"error"`
05c201b548b0 Timelines: Handle error from API server
Mikael Berthe <mikael@lilotux.net>
parents: 88
diff changeset
    39
		}
05c201b548b0 Timelines: Handle error from API server
Mikael Berthe <mikael@lilotux.net>
parents: 88
diff changeset
    40
		err2 := json.Unmarshal([]byte(r.Body), &res)
05c201b548b0 Timelines: Handle error from API server
Mikael Berthe <mikael@lilotux.net>
parents: 88
diff changeset
    41
		if err2 == nil {
05c201b548b0 Timelines: Handle error from API server
Mikael Berthe <mikael@lilotux.net>
parents: 88
diff changeset
    42
			return tl, fmt.Errorf("%s", res.Error)
05c201b548b0 Timelines: Handle error from API server
Mikael Berthe <mikael@lilotux.net>
parents: 88
diff changeset
    43
		}
88
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    44
		return tl, fmt.Errorf("timelines API: %s", err.Error())
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    45
	}
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    46
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    47
	return tl, nil
df00ec8423fe Add timelines support
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    48
}