I wonder if it is possible to get a permanent access token for personal use on Reddit?It will only be me using the App.
For users, the access token expires after an hour.
My using the below information that I have about my client-id and secret, I put up a start attempt of trying to get an access token. (MessageBox show "Error 401")
If a user will get a token, one have to click "Allow" in the browser. Very well described here. https://github.com/reddit/reddit/wiki/OAuth2This it NOT what I am after. I am after for, personal use, an access token only through code. Is this possible?
String requestUrl = "https://ssl.reddit.com/api/v1/access_token";RestSharp.RestClient rc = new RestSharp.RestClient();RestSharp.RestRequest request = new RestSharp.RestRequest(requestUrl, RestSharp.Method.POST);request.AddHeader("Content-Type", "application/json");//request.AddHeader("Authorization", ""); //???request.AddHeader("x-li-format", "json");request.AddParameter("client_id", "abcdefg");request.AddParameter("client_secret", "abc123-456");request.AddParameter("grant_type", "abc123-456");request.AddParameter("scope", "identity");request.AddParameter("state", "adhasegw"); //whatever valuerequest.AddParameter("duration", "permanent");request.AddParameter("redirect_uri", "http://mywebsite.co");request.RequestFormat = RestSharp.DataFormat.Json;RestSharp.RestResponse restResponse = (RestSharp.RestResponse)rc.Execute(request);RestSharp.ResponseStatus responseStatus = restResponse.ResponseStatus;MessageBox.Show(restResponse.Content.ToString() + "," + responseStatus.ToString());
Best Answer
As of right now, you cannot retrieve a permanent access token. You have 2 options that come close.
The first is to request a "refresh" token when using the standard OAuth flow. That's what you're doing by sending "duration" as "permanent" in your code. The refresh token can be used to automatically retrieve new 1 hour access tokens without user intervention; the only manual steps are on the initial retrieval of the refresh token.
The second alternative, which applies only when writing a script for personal use, is to use the password
grant type. The steps are described in more detail on reddit's "OAuth Quick Start" wiki page, but I'll summarize here:
- Create an OAuth client (under https://www.reddit.com/prefs/apps) with type = "script"
- Make a request to
https://www.reddit.com/api/v1/access_token
with POST parametersgrant_type=password&username=<USERNAME>&password=<PASSWORD>
. Send your client ID and secret as HTTP basic authentication.<USERNAME>
must be registered as a developer of the OAuth 2 client ID you send.
A client_id
and client_secret
can be generated for a reddit account by going to https://www.reddit.com/prefs/apps and creating an app:
The part I have hidden is my client_id
.
Then you can use a client like praw
to access reddit e.g. with Python:
import prawr = praw.Reddit(client_id='insert id here',client_secret='insert secret here',user_agent='insert user agent')page = r.subreddit('aww')top_posts = page.hot(limit=None)for post in top_posts:print(post.title, post.ups)
You could use your current browser's user agent, which can be easily found by google searching "what is my user agent" (among other ways).