Featured in issue 327 of Golang Weekly 🎉
go-reddit is a Go client library for accessing the Reddit API.
You can view Reddit's official API documentation here.
To get a specific version from the list of versions:
go get github.com/vartanbeno/go-reddit@vX.Y.Z
Or for the latest version:
go get github.com/vartanbeno/go-reddit
Make sure to have a Reddit app with a valid client id and secret. Here is a quick guide on how to create an app and get credentials.
package main
import "github.com/vartanbeno/go-reddit/reddit"
func main() {
withCredentials := reddit.WithCredentials("id", "secret", "username", "password")
client, _ := reddit.NewClient(withCredentials)
}
You can pass in a number of options to NewClient
to further configure the client (see reddit/reddit-options.go). For example, to use a custom HTTP client:
httpClient := &http.Client{Timeout: time.Second * 30}
client, _ := reddit.NewClient(withCredentials, reddit.WithHTTPClient(httpClient))
The DefaultClient
method returns a valid, read-only client with limited access to the Reddit API, much like a logged out user. You can initialize your own and configure it further using options via NewReadonlyClient
:
client, _ := reddit.NewReadonlyClient()
Configure the client from environment variables.
client, _ := reddit.NewClient(reddit.FromEnv)
Submit a comment.
comment, _, err := client.Comment.Submit(context.Background(), "t3_postid", "comment body")
if err != nil {
return err
}
fmt.Printf("Comment permalink: %s\n", comment.Permalink)
Upvote a post.
_, err := client.Post.Upvote(context.Background(), "t3_postid")
if err != nil {
return err
}
Get r/golang's top 5 posts of all time.
posts, _, err := client.Subreddit.TopPosts(context.Background(), "golang", &reddit.ListPostOptions{
ListOptions: reddit.ListOptions{
Limit: 5,
},
Time: "all",
})
if err != nil {
return err
}
fmt.Printf("Received %d posts.\n", len(posts))
More examples are available in the examples folder.
The package design is heavily inspired from Google's GitHub API client and DigitalOcean's API client.
Contributions are welcome! For any bug reports/feature requests, feel free to open an issue or submit a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.