Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vartanbeno/go-reddit
Go library for accessing the Reddit API.
https://github.com/vartanbeno/go-reddit
api go golang hacktoberfest reddit
Last synced: about 1 month ago
JSON representation
Go library for accessing the Reddit API.
- Host: GitHub
- URL: https://github.com/vartanbeno/go-reddit
- Owner: vartanbeno
- License: other
- Created: 2020-04-24T00:06:01.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-03-15T11:30:24.000Z (9 months ago)
- Last Synced: 2024-11-05T09:06:43.966Z (about 1 month ago)
- Topics: api, go, golang, hacktoberfest, reddit
- Language: Go
- Homepage:
- Size: 816 KB
- Stars: 311
- Watchers: 5
- Forks: 85
- Open Issues: 24
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-repositories - vartanbeno/go-reddit - Go library for accessing the Reddit API. (Go)
README
---
[![Actions Status](https://github.com/vartanbeno/go-reddit/workflows/tests/badge.svg)](https://github.com/vartanbeno/go-reddit/actions)
[![Go Report Card](https://goreportcard.com/badge/github.com/vartanbeno/go-reddit)](https://goreportcard.com/report/github.com/vartanbeno/go-reddit)
[![PkgGoDev](https://pkg.go.dev/badge/github.com/vartanbeno/go-reddit/v2/reddit)](https://pkg.go.dev/github.com/vartanbeno/go-reddit/v2/reddit)## Overview
**Featured in issues [327](https://golangweekly.com/issues/327) and [347](https://golangweekly.com/issues/347) of Golang Weekly 🎉**
go-reddit is a Go client library for accessing the Reddit API.
You can view Reddit's official API documentation [here](https://www.reddit.com/dev/api/).
## Install
To get a specific version from the list of [versions](https://github.com/vartanbeno/go-reddit/releases):
```sh
go get github.com/vartanbeno/go-reddit/[email protected]
```Or for the latest version:
```sh
go get github.com/vartanbeno/go-reddit/v2
```The repository structure for managing multiple major versions follows the one outlined [here](https://github.com/go-modules-by-example/index/tree/master/016_major_version_repo_strategy#major-branch-strategy).
## Usage
Make sure to have a Reddit app with a valid client id and secret. [Here](https://github.com/reddit-archive/reddit/wiki/OAuth2-Quick-Start-Example#first-steps) is a quick guide on how to create an app and get credentials.
```go
package mainimport "github.com/vartanbeno/go-reddit/v2/reddit"
func main() {
credentials := reddit.Credentials{ID: "id", Secret: "secret", Username: "username", Password: "password"}
client, _ := reddit.NewClient(credentials)
}
```You can pass in a number of options to `NewClient` to further configure the client (see [reddit/reddit-options.go](reddit/reddit-options.go)). For example, to use a custom HTTP client:
```go
httpClient := &http.Client{Timeout: time.Second * 30}
client, _ := reddit.NewClient(credentials, reddit.WithHTTPClient(httpClient))
```### Read-Only Mode
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`:
```go
client, _ := reddit.NewReadonlyClient()
```## Examples
Configure the client from environment variables. When using this option, it's ok to pass an empty struct for the credentials.
```go
client, _ := reddit.NewClient(reddit.Credentials{}, reddit.FromEnv)
```Submit a comment.
```go
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.
```go
_, err := client.Post.Upvote(context.Background(), "t3_postid")
if err != nil {
return err
}
```Get r/golang's top 5 posts of all time.
```go
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](examples) folder.
## Design
The package design is heavily inspired from [Google's GitHub API client](https://github.com/google/go-github) and [DigitalOcean's API client](https://github.com/digitalocean/godo).
## Contributing
Contributions are welcome! For any bug reports/feature requests, feel free to open an issue or submit a pull request.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.