LetterboxdFeed 2.0.0
dotnet add package LetterboxdFeed --version 2.0.0
NuGet\Install-Package LetterboxdFeed -Version 2.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LetterboxdFeed" Version="2.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LetterboxdFeed" Version="2.0.0" />
<PackageReference Include="LetterboxdFeed" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add LetterboxdFeed --version 2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: LetterboxdFeed, 2.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package LetterboxdFeed@2.0.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=LetterboxdFeed&version=2.0.0
#tool nuget:?package=LetterboxdFeed&version=2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
LetterboxdFeed
A lightweight .NET library that retrieves and streams Letterboxd activity (reviews, ratings, diary entries) using an event-driven model.
Installation
dotnet add package LetterboxdFeed
Features
- 📺 Monitor Letterboxd RSS feeds for multiple users
- 🔔 Event-driven notifications for new movie watches
- ⚡ Automatic polling with configurable intervals
- 🎬 Support for movies and TV shows
- 🔄 Rewatch detection
- ⭐ Rating and review extraction
- 💾 Built-in caching to avoid duplicate notifications
Quick Start
using LetterboxdFeed;
using LetterboxdFeed.Options;
// Configure options
var options = new LetterboxdFeedOptions
{
PollingInterval = 5, // Check every 5 minutes
EnableAutoPolling = true
};
// Create feed instance
using var feed = new LetterboxdFeed(options);
// Add users to watch
feed.AddUsername("username1");
feed.AddUsername("username2");
// Subscribe to events
feed.MovieWatched += (sender, args) =>
{
Console.WriteLine($"{args.Username} watched: {args.Movie.Title} ({args.Movie.FilmYear})");
Console.WriteLine($"Rating: {args.Movie.Rate}/5");
if (args.Movie.Review != null)
{
if (args.Movie.Review.ContainsSpoilers)
{
Console.WriteLine("Warning: This review may contain spoilers.");
}
Console.WriteLine($"Review: {args.Movie.Review.Text}");
}
};
feed.ErrorOccurred += (sender, args) =>
{
Console.WriteLine($"Error for {args.Username}: {args.Exception.Message}");
};
// Start polling
feed.StartPolling();
// Keep the application running
Console.WriteLine("Monitoring Letterboxd feeds. Press Enter to stop...");
Console.ReadLine();
feed.StopPolling();
Manual Polling
You can also retrieve data manually without automatic polling:
var options = new LetterboxdFeedOptions
{
EnableAutoPolling = false
};
using var feed = new LetterboxdFeed(options);
// Get latest movie for a user
var latestMovie = await feed.GetLatestMovieAsync("username");
if (latestMovie != null)
{
Console.WriteLine($"{latestMovie.Title} - {latestMovie.Rate}/5");
}
// Get all movies from feed
var allMovies = await feed.GetUserMoviesAsync("username");
foreach (var movie in allMovies)
{
Console.WriteLine($"{movie.Title} ({movie.FilmYear})");
}
API Reference
LetterboxdFeedOptions
| Property | Type | Default | Description |
|---|---|---|---|
PollingInterval |
int |
5 | Polling interval in minutes |
EnableAutoPolling |
bool |
true | Enable automatic polling |
LetterboxdFeed Methods
AddUsername(string username)- Add a user to watchRemoveUsername(string username)- Remove a user from watch listAddUsernames(IEnumerable<string> usernames)- Add multiple usersStartPolling()- Start automatic pollingStopPolling()- Stop automatic pollingGetLatestMovieAsync(string username)- Get latest movie for userGetUserMoviesAsync(string username)- Get all movies from RSS feedGetCachedMovie(string username)- Get cached movie for userGetUsernames()- Get list of watched usernames
Events
MovieWatched- Triggered when a new movie is detectedErrorOccurred- Triggered when an error occursPollingStarted- Triggered when polling startsPollingStopped- Triggered when polling stops
Media Model
| Property | Type | Description |
|---|---|---|
MediaId |
int |
TMDB ID |
Title |
string |
Movie/TV show title |
FilmYear |
int |
Release year |
Rate |
double |
User rating (0-5) |
Link |
string |
Letterboxd entry URL |
WatchedTime |
DateOnly |
Date watched |
TitleLetterboxd |
string |
Full Letterboxd title |
PublishingDate |
DateTime |
RSS publish date |
Review |
Review? |
User review (record with Text and ContainsSpoilers properties) |
IsARewatch |
bool |
Whether it's a rewatch |
IsTvShow |
bool |
Whether it's a TV show |
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Links
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.