A Reddit library for Dart, inspired by reddit.js (API) and raw.js (Auth).
See the Dart documentation.
Add the following to your pubspec.yaml
:
dependencies:
reddit: any
The top class Reddit
takes a Client
as parameter.
This client can be constructed using thehttp
package.
// in Dart VM
Reddit reddit = new Reddit(new Client());
// in browser
Reddit reddit = new Reddit(new BrowserClient());
OAuth is required for all endpoints. To enable OAuth, you will need an app identifier and a secret. Get them here.
There are two options: App-only and User authorization.
- App-only auth
reddit.authSetup(identifier, secret);
// with user info
await reddit.authFinish(username: "sroose", password: "correct horse battery staple");
// or without
await reddit.authFinish();
Note that not providing (developer) user info will result in getting 503 Service Unavailable responses after a while.
- User-enabled auth
reddit.authSetup(identifier, secret);
Uri authUrl = reddit.authUrl("https://myapp.com/auth_redirect");
// redirect user to authUrl and gather the response from the auth server
await reddit.authFinish(response: authServerResponse);
// or if you already extracted the auth code from the response
await reddit.authFinish(code: authCode);
Most methods in the API construct a Query
, which can be fetched to get a future with the results.
Most queries allow filtering. For the supported filters, we refer to the Reddit API docs or the documentation for this library.
// without filters
reddit.frontPage.newPosts().fetch().then(print);
// filtered
reddit.frontPage.hot().limit(10).fetch().then(print);
A lot of queries also are listings. Listings allow for browsing through content across multiple queries.
// using the regular fetch() method (not recommended)
reddit.sub("dartlang").top("day").fetch().then((result) {
print(result);
if (notEnough) {
result.fetchMore().then((result) {
print(result);
if (stillNotEnough) {
result.fetchmore().then(print);
}
});
}
});
// or using the dart:async API
reddit.sub("dartlang").top("month").listen((result) {
print(result);
if (notEnough) {
result.fetchMore();
}
})
You can use the standard read-only API to browse Reddit.
// the front page
reddit.front.hot().fetch().then(print);
// or subreddits
reddit.sub("dartlang").hot().fetch().then(print);
Some examples using filters:
reddit.sub("dartlang").top().t("day").limit(10).fetch().then(print);
Fetching comments for a link:
reddit.sub("dartlang").comments("2ek93l").depth(3).fetch().then(print);
Or a single comment:
reddit.sub("dartlang").comments("2ek93l").comment("ck0mkcy").context(2).fetch().then(print);
Search through reddit:
reddit.sub("dartlang").search("reddit api").limit(5).sort("hot").fetch().then(print);
Find subreddits:
reddit.newSubreddits().fetch().then(print);
reddit.popularSubreddits().fetch().then(print);
reddit.recommendedSubreddits(["dartlang", "reddit"]).fetch().then(print);
reddit.subredditsByTopic("programming").fetch().then(print);
Get information about a subreddit:
reddit.sub("dartlang").about().fetch().then(print);
Get information about a user:
reddit.user("sroose").about().fetch().then(print);
Get listings from users:
reddit.user("sroose").comments("month").listen(print);
reddit.user("sroose").submitted("week").sort("hot").listen(print);
Get a list of multi's from a user:
reddit.user("sroose").multis().fetch().then(print);