package examples;
import java.util.List;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.simple.parser.ParseException;
import com.github.jreddit.oauth.RedditOAuthAgent;
import com.github.jreddit.oauth.RedditToken;
import com.github.jreddit.oauth.app.RedditApp;
import com.github.jreddit.oauth.app.RedditInstalledApp;
import com.github.jreddit.oauth.client.RedditClient;
import com.github.jreddit.oauth.client.RedditHttpClient;
import com.github.jreddit.oauth.exception.RedditOAuthException;
import com.github.jreddit.parser.entity.Subreddit;
import com.github.jreddit.parser.exception.RedditParseException;
import com.github.jreddit.parser.listing.SubredditsListingParser;
import com.github.jreddit.request.retrieval.param.SubredditsView;
import com.github.jreddit.request.retrieval.subreddits.SubredditsOfUserRequest;
public class ExampleContinuousRequests {
public static void main(String[] args) throws RedditOAuthException, ParseException, RedditParseException {
/********************************************
* Initialization
*/
// Information about the app
String userAgent = "jReddit: Reddit API Wrapper for Java";
String clientID = "PfnhLt3VahLrbg";
String redirectURI = "https://github.com/snkas/jReddit";
// Reddit application
RedditApp redditApp = new RedditInstalledApp(clientID, redirectURI);
// Create OAuth agent
RedditOAuthAgent agent = new RedditOAuthAgent(userAgent, redditApp);
// Create request executor
RedditClient client = new RedditHttpClient(userAgent, HttpClientBuilder.create().build());
/********************************************
* Perform requests in a loop
*/
// Create token (will be valid for 1 hour)
RedditToken token = agent.tokenAppOnly(false);
// Create parser for request
SubredditsListingParser parser = new SubredditsListingParser();
// Create the request
SubredditsOfUserRequest request = (SubredditsOfUserRequest) new SubredditsOfUserRequest(SubredditsView.NEW).setLimit(100);
// Let's assume we want to show the results every 10 minutes
long lastShow = 0;
while (true) {
// Create a new token if the current has expired or will expire very soon (e.g. 100s)
if (token.isExpired() || token.willExpireIn(100)) {
token = agent.tokenAppOnly(false);
}
// Every 10 minutes = 600 seconds = 600000 milliseconds
if (System.currentTimeMillis() - lastShow > 600000) {
// Perform and parse request, and store parsed result
List<Subreddit> subreddits = parser.parse(client.get(token, request));
// Now print out the result (don't care about formatting)
System.out.println(subreddits);
// Result shown, wait for next time
lastShow = System.currentTimeMillis();
}
}
}
}