You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Cameron Stanley 4bfac7ea95 Merge pull request #3 from rmichela/feature/user-agent 4 years ago
test_data Implement GetMyPreferences 5 years ago
.gitignore Initial commit 5 years ago
.travis.yml Add .travis.yml config file 5 years ago
LICENSE Initial commit 5 years ago
README.md Documentation 5 years ago
account.go Add User-Agent to client; fixes for GetAccount to send User-Agent 5 years ago
account_test.go WIP Implement message 5 years ago
authenticator.go Documentation 5 years ago
authenticator_test.go Fix unit test 5 years ago
award.go Implement GetMyTrophies 5 years ago
award_test.go Implement GetMyPreferences 5 years ago
comment.go Documentation fixes 5 years ago
comment_test.go Implement HideLink; run gofmt 5 years ago
link.go Implement HideLink; run gofmt 5 years ago
link_test.go Implement HideLink; run gofmt 5 years ago
media.go Fix golint issues; refactor article to link 5 years ago
message.go Implement HideLink; run gofmt 5 years ago
message_test.go Implement HideLink; run gofmt 5 years ago
preferences.go Implement DeleteComment 5 years ago
preferences_test.go Implement DeleteComment 5 years ago
reddit.go Implement CommentOnLink 5 years ago
reddit_test.go Refactor tests to use testify 5 years ago
subreddit.go Implement CommentOnLink 5 years ago
subreddit_test.go Fix golint issues; refactor article to link 5 years ago
user.go Implement CommentOnLink 5 years ago
user_test.go Fix golint issues; refactor article to link 5 years ago

README.md

go-reddit

Build Status GoDoc Go Report Card

A Golang wrapper for the Reddit API. This package aims to implement every endpoint exposed according to the documentation in a user friendly, well tested and documented manner.

Installation

Install the package with

go get github.com/cameronstanley/go-reddit

Authentication

Many endpoints in the Reddit API require OAuth2 authentication to access. To get started, register an app at https://www.reddit.com/prefs/apps and be sure to note the ID, secret, and redirect URI. These values will be used to construct the Authenticator to generate a client with OAuth access. The following is an example of creating an authenticated client using a manual approach:

package main

import(
  "fmt"
  "github.com/cameronstanley/go-reddit"
)

func main() {
  // Create a new authenticator with your app's client ID, secret, and redirect URI
  // A random string representing state and a list of requested OAuth scopes are required
  authenticator := reddit.NewAuthenticator("<client_id>", "<client_secret>", "<redirect_uri>", 
     "<platform>:<app ID>:<version string> (by /u/<reddit username>)", "<random_string>", reddit.ScopeIdentity)
  
  // Instruct your user to visit the URL retrieved from GetAuthenticationURL in their web browser
  url := authenticator.GetAuthenticationURL()
  fmt.Printf("Please proceed to %s\n", url)

  // After the user grants permission for your client, they will be redirected to the supplied redirect_uri with a code and state as URL parameters
  // Gather these values from the user on the console
  // Note: this can be automated by having a web server listen on the redirect_uri and parsing the state and code params
  fmt.Print("Enter state: ")
  var state string
  fmt.Scanln(&state)

  fmt.Print("Enter code: ")
  var code string
  fmt.Scanln(&code)

  // Exchange the code for an access token
  token, err := authenticator.GetToken(state, code)
  
  // Create a new client using the access token and a user agent string to identify your application
  client := authenticator.GetAuthClient(token)
}

Examples

// Returns a new unauthenticated client for invoking the API
client := reddit.NoAuthClient

// Retrives a listing of default subreddits
client.GetDefaultSubreddits()

// Retrives a listing of hot links for the "news" subreddit
client.GetHotLinks("news")