Reddit 0.0.0-beta
See the version list below for details.
dotnet add package Reddit --version 0.0.0-beta
NuGet\Install-Package Reddit -Version 0.0.0-beta
<PackageReference Include="Reddit" Version="0.0.0-beta" />
paket add Reddit --version 0.0.0-beta
#r "nuget: Reddit, 0.0.0-beta"
// Install Reddit as a Cake Addin #addin nuget:?package=Reddit&version=0.0.0-beta&prerelease // Install Reddit as a Cake Tool #tool nuget:?package=Reddit&version=0.0.0-beta&prerelease
____ __ __ _ __ _ __ ______ ______
/ __ \ ___ ____/ /____/ /(_)/ /_ / | / // ____//_ __/
/ /_/ // _ \ / __ // __ // // __/ / |/ // __/ / /
/ _, _// __// /_/ // /_/ // // /_ _ / /| // /___ / /
/_/ |_| \___/ \__,_/ \__,_//_/ \__/(_)/_/ |_//_____/ /_/
Created by Kris Craig.
Overview
Reddit.NET is a .NET Standard library that provides easy access to the Reddit API with virtually no boilerplate code required. Keep reading below for code examples.
Currently, the library supports 169 of the 205 endpoints listed in the API documentation. All of them (except voting and admin-reporting, for obvious reasons) are covered by integration tests and all 327 of the tests are currently passing. All of the most commonly used endpoints are supported.
Reddit.NET is FOSS (MIT license) and was written in C#. It will be available on NuGet once I'm ready to put out the first stable release, which I expect to be very soon. You can check it out now on Github at: https://github.com/sirkris/Reddit.NET/tree/develop
Contributors
Kris Craig, Andrew Hall, Ben Mitchell, Daryl Harrison, and the knowledgeable people over at r/csharp and r/redditdev.
Beta Testers
Kris Craig and Ben Mitchell.
Usage
Reddit.NET can be installed via NuGet. You can find it at: https://www.nuget.org/packages/Reddit
To install via the Visual Studio NuGet Package Manager Console (in VS 2017, you'll find it under Tools->NuGet Package Manager->NuGet Package Manager Console):
PM> Install-Package Reddit
To create a new API instance bound to a specific user's refresh token in an installed app:
using Reddit;
...
var reddit = new RedditAPI("YourRedditAppID", "YourBotUserRefreshToken");
If you're using a "script"-type app instead, you'll also need to pass your app secret:
using Reddit;
...
// You can also pass them as named parameters.
var reddit = new RedditAPI(appId: "YourRedditAppID", appSecret: "YourRedditAppSecret", refreshToken: "YourBotUserRefreshToken");
See below for more detailed usage examples.
Code Examples
using Reddit;
using Reddit.Controllers;
using Reddit.Controllers.EventArgs;
using System;
...
// Create a new Reddit.NET instance.
var r = new RedditAPI("MyAppID", "MyRefreshToken");
// Display the name and cake day of the authenticated user.
Console.WriteLine("Username: " + r.Account.Me.Name);
Console.WriteLine("Cake Day: " + r.Account.Me.Created.ToString("D"));
// Retrieve the authenticated user's recent post history.
// Change "new" to "newForced" if you don't want older stickied profile posts to appear first.
var postHistory = r.Account.Me.PostHistory(sort: "new");
// Retrieve the authenticated user's recent comment history.
var commentHistory = r.Account.Me.CommentHistory(sort: "new");
// Create a new subreddit.
var mySub = r.Subreddit("MyNewSubreddit", "My subreddit's title", "Description", "Sidebar").Create();
// Get info on another subreddit.
var askReddit = r.Subreddit("AskReddit").About();
// Get the top post from a subreddit.
var topPost = askReddit.Posts.Top[0];
// Create a new self post.
var mySelfPost = mySub.SelfPost("Self Post Title", "Self post text.").Submit();
// Create a new link post.
// Use .Submit(resubmit: true) instead to force resubmission of duplicate links.
var myLinkPost = mySub.LinkPost("Link Post Title", "http://www.google.com").Submit();
// Comment on a post.
var myComment = myLinkPost.Reply("This is my comment.");
// Reply to a comment.
var myCommentReply = myComment.Reply("This is my comment reply.");
// Create a new subreddit, then create a new link post on said subreddit,
// then comment on said post, then reply to said comment, then delete said comment reply.
// Because I said so.
r.Subreddit("MySub", "Title", "Desc", "Sidebar")
.Create()
.SelfPost("MyPost")
.Submit()
.Reply("My comment.")
.Reply("This comment will be deleted.")
.Delete();
// Asynchronously monitor r/AskReddit for new posts.
askReddit.Posts.GetNew();
askReddit.Posts.NewUpdated += C_NewPostsUpdated;
askReddit.Posts.MonitorNew();
public static void C_NewPostsUpdated(object sender, PostsUpdateEventArgs e)
{
foreach (var post in e.Added)
{
Console.WriteLine("New Post by " + post.Author + ": " + post.Title);
}
}
// Stop monitoring r/AskReddit for new posts.
askReddit.Posts.MonitorNew();
askReddit.Posts.NewUpdated -= C_NewPostsUpdated;
Code Examples Using Models
The controllers basically just make calls to the models, which can be accessed directly via the Dispatch controller. As such, it is possible to bypass the controllers entirely for most things, so long as you don't mind the bulkier code. This is only recommended for scenarios where the convenience-oriented features of the controllers aren't needed and would just get in the way. In most cases, it is recommended that you instead use the controllers as demonstrated in the above examples.
Here's how you can do some basic things using the models:
using Reddit;
using Reddit.Inputs;
using Reddit.Inputs.LinksAndComments;
using Reddit.Inputs.Subreddits;
using Reddit.Inputs.Users;
using Reddit.Things;
using System;
using System.Collections.Generic;
...
// Create a new Reddit.NET instance.
var r = new RedditAPI("MyAppID", "MyRefreshToken");
// Display the name and cake day of the authenticated user.
Console.WriteLine("Username: " + r.Models.Account.Me().Name);
Console.WriteLine("Cake Day: " + r.Models.Account.Me().Created.ToString("D"));
// Retrieve the authenticated user's recent post history.
var postContainer = r.Models.Users.PostHistory(r.Models.Account.Me().Name, "overview", new UsersHistoryInput());
var postHistory = new List<Post>();
foreach (PostChild postChild in postContainer.JSON.Data.Things)
{
if (postChild.Data != null)
{
postHistory.Add(postChild.Data);
}
}
// Retrieve the authenticated user's recent comment history.
var commentContainer = r.Models.Users.CommentHistory(r.Models.Account.Me().Name, "comments", new UsersHistoryInput());
var commentHistory = new List<Comment>();
foreach (CommentChild commentChild in commentContainer.JSON.Data.Things)
{
if (commentChild.Data != null)
{
commentHistory.Add(commentChild.Data);
}
}
// Create a new subreddit.
r.Models.Subreddits.SiteAdmin(new SubredditsSiteAdminInput(name: "MyNewSubreddit", title: "My subreddit's title", publicDescription: "Description", description: "Sidebar"));
var mySub = r.Models.Subreddits.About("MyNewSubreddit");
// Get info on another subreddit.
var askReddit = r.Models.Subreddits.About("AskReddit");
// Get the top post from a subreddit.
var topPost = r.Models.Listings.Top(new TimedCatSrListingInput(), "AskReddit").JSON.Data.Things[0].Data;
// Create a new self post.
r.Models.LinksAndComments.Submit(new LinksAndCommentsSubmitInput(title: "Self Post Title", text: "Self post text."));
// Create a new link post.
r.Models.LinksAndComments.Submit(new LinksAndCommentsSubmitInput(title: "Link Post Title", url: "http://www.google.com"));
// Comment on a post.
r.Models.LinksAndComments.Comment(new LinksAndCommentsThingInput("This is my comment.", topPost.Name));
For more examples, check out the Example and Reddit.NETTests projects.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CSharp (>= 4.5.0)
- Newtonsoft.Json (>= 11.0.2)
- RestSharp (>= 106.4.2)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Reddit:
Package | Downloads |
---|---|
FenixAlliance.ABS.Integrations.Reddit
Application Component for the Alliance Business Suite. |
|
Thalitech.NamiBot
This is a custome discord bot that was made to just make it easy for end users. This a full console application |
|
NamiBot
This is a custome discord bot that was made to just make it easy for end users |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Reddit:
Repository | Stars |
---|---|
aelassas/wexflow
.NET Workflow Engine and Automation Platform
|