Letterboxdpy
A letterboxd webscraper
Install / Use
/learn @nmcassa/LetterboxdpyREADME
<h1 id="installation">Installation</h1>
From PyPI
You can easily install the stable version of letterboxdpy from PyPI using pip:
pip install letterboxdpy
From GitHub Repository
Alternatively, if you wish to access the latest (potentially unstable) version directly from the GitHub repository, you can execute the following command:
pip install git+https://github.com/nmcassa/letterboxdpy.git
<h1 id="core-objects">Core Objects</h1> <h2 id="user">User Object</h2>[!WARNING] Please be aware that installing directly from the GitHub repository might give you access to the most recent features and bug fixes, but it could also include changes that haven't been thoroughly tested and may not be stable for production use.
Explore the file | Functions Documentation
from letterboxdpy.user import User
user_instance = User("nmcassa")
print(user_instance)
<details>
<summary>Click to expand <code>User</code> object response</summary>
{
"username": "nmcassa",
"url": "https://letterboxd.com/nmcassa",
"id": 1500306,
"is_hq": false,
"display_name": "nmcassa",
"bio": null,
"location": null,
"website": null,
"watchlist_length": 76,
"stats": {
"films": 702,
"this_year": 7,
"lists": 2,
"following": 8,
"followers": 8
},
"favorites": {
"51794": {
"slug": "the-king-of-comedy",
"name": "The King of Comedy",
"url": "https://letterboxd.com/film/the-king-of-comedy/",
"year": 1982,
"log_url": "https://letterboxd.com/nmcassa/film/the-king-of-comedy/activity/"
},
"...": "..."
},
"avatar": {
"exists": true,
"upscaled": true,
"url": "https://a.ltrbxd.com/resized/avatar/upload/1/5/0/0/3/0/6/shard/avtr-0-1000-0-1000-crop.jpg"
},
"recent": {
"watchlist": {
"703077": {
"id": "703077",
"slug": "magazine-dreams",
"name": "Magazine Dreams",
"year": 2023
},
"...": "..."
},
"diary": {
"months": {
"1": {
"31": [
{
"name": "If I Had Legs I'd Kick You",
"slug": "if-i-had-legs-id-kick-you"
}
],
"...": "..."
}
}
}
}
}
</details>
<h2 id="movie">Movie Object</h2>
Explore the file | Functions Documentation
from letterboxdpy.movie import Movie
# lookup by slug
movie_instance = Movie("v-for-vendetta")
# lookup by external ids
movie_instance = Movie(tmdb=752)
movie_instance = Movie(imdb="tt0434409")
# or using factory methods
movie_instance = Movie.from_tmdb(752)
movie_instance = Movie.from_imdb("tt0434409")
print(movie_instance)
<details>
<summary>Click to expand <code>Movie</code> object response</summary>
{
"url": "https://letterboxd.com/film/v-for-vendetta",
"slug": "v-for-vendetta",
"id": "51400",
"title": "V for Vendetta",
"original_title": null,
"runtime": 132,
"rating": 3.84,
"year": 2005,
"tmdb_link": "https://www.themoviedb.org/movie/752/",
"tmdb_id": "752",
"imdb_link": "http://www.imdb.com/title/tt0434409/maindetails",
"imdb_id": "tt0434409",
"poster": "https://a.ltrbxd.com/resized/film-poster/5/1/4/0/0/51400-v-for-vendetta-0-230-0-345-crop.jpg",
"banner": "https://a.ltrbxd.com/resized/sm/upload/mx/jg/tz/ni/v-for-vendetta-1920-1920-1080-1080-crop-000000.jpg",
"tagline": "People should not be afraid of their governments. Governments should be afraid of their people.",
"description": "In a world in which Great Britain has become a fascist state...",
"trailer": {
"id": "3ge0navn9E0",
"link": "https://www.youtube.com/watch?v=3ge0navn9E0",
"embed_url": "https://www.youtube.com/embed/3ge0navn9E0"
},
"alternative_titles": [
"Vendetta \u00fc\u00e7\u00fcn V",
"O za osvetu",...
],
"details": [
{
"type": "studio",
"name": "Virtual Studios",
"slug": "virtual-studios",
"url": "https://letterboxd.com/studio/virtual-studios/"
},
"..."
],
"genres": [
{
"type": "genre",
"name": "Thriller",
"slug": "thriller",
"url": "https://letterboxd.com/films/genre/thriller/"
},
"..."
],
"cast": [
{
"name": "Natalie Portman",
"role_name": "Evey Hammond",
"slug": "natalie-portman",
"url": "https://letterboxd.com/actor/natalie-portman/"
},
"..."
],
"crew": {
"director": [
{
"name": "James McTeigue",
"slug": "james-mcteigue",
"url": "https://letterboxd.com/director/james-mcteigue/"
}
],
"...": "..."
},
"popular_reviews": [
{
"user": {
"username": "zoeyluke",
"display_name": "zoey luke"
},
"link": "https://letterboxd.com/zoeyluke/film/v-for-vendetta/3/",
"rating": 4.5,
"review": "I love natalie Portman and I hate the government"
},
"...": "..."
]
}
</details>
<h2 id="search">Search Object</h2>
Explore the file | Functions Documentation
from letterboxdpy.search import Search
search_instance = Search("V for Vendetta", 'films')
print(search_instance.get_results(5))
<details>
<summary>Click to expand <code>Search</code> object response</summary>
{
"available": true,
"query": "V%20for%20Vendetta",
"filter": "films",
"end_page": 1,
"count": 5,
"results": [
{
"no": 1,
"page": 1,
"type": "film",
"slug": "v-for-vendetta",
"name": "V for Vendetta",
"year": 2005,
"url": "https://letterboxd.com/film/v-for-vendetta/",
"poster": "https://s.ltrbxd.com/static/img/empty-poster-70-BSf-Pjrh.png",
"directors": [
{
"name": "James McTeigue",
"slug": "james-mcteigue",
"url": "https://letterboxd.com/director/james-mcteigue/"
}
]
},
{
"no": 2,
"page": 1,
"type": "film",
"slug": "lady-vengeance",
"name": "Lady Vengeance",
"year": 2005,
"url": "https://letterboxd.com/film/lady-vengeance/",
"poster": null,
"directors": [
{
"name": "Park Chan-wook",
"slug": "park-chan-wook",
"url": "https://letterboxd.com/director/park-chan-wook/"
}
]
},...
]
}
</details>
<h2 id="list">List Object</h2>
from letterboxdpy.list import List
list_instance = List("nmcassa", "movies-to-watch-with-priscilla-park")
print(list_instance)
<details>
<summary>Click to expand <code>List</code> object response</summary>
{
"username": "nmcassa",
"slug": "movies-to-watch-with-priscilla-park",
"_movies": {
"240344": {
"slug": "la-la-land",
"name": "La La Land",
"year": 2016,
"url": "https://letterboxd.com/film/la-la-land/"
},
"...": "..."
},
"url": "https://letterboxd.com/nmcassa/list/movies-to-watch-with-priscilla-park",
"title": "Movies to Watch with Priscilla Park",
"author": "nmcassa",
"description": null,
"date_created": "2024-05-18T16:44:57.013000Z",
"date_updated": "2024-05-20T14:58:06.486000Z",
"tags": [],
"count": 19,
"list_id": "46710824"
}
</details>
<h2 id="members">Members Object</h2>
Explore the file | Functions Documentation
from letterboxdpy.members import Members
members_instance = Members(max=5)
print(members_instance.members)
<details>
<summary>Click to expand <code>Members</code> object response</summary>
[
"schaffrillas",
"kurstboy",
"demiadejuyigbe",
"zoerosebryant",
"jaragon23"
]
</details>
<h2 id="films">Films Object</h2>
Explore the file | Functions Documentation
from letterboxdpy.films import Films
films_instance = Films("https://letterboxd.com/films/popular/", max=3)
print(films_instance.movies)
<details>
<summary>Click to expand <code>Films</code> object response</summary>
{
"1197499": {
"slug": "marty-supreme",
"name": "Marty Supreme",
"rating": 4.21,
"url": "https://letterboxd.com/film/marty-supreme/"
},
"772232": {
"slug": "hamnet",
Related Skills
gh-issues
341.8kFetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
node-connect
341.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
oracle
341.8kBest practices for using the oracle CLI (prompt + file bundling, engines, sessions, and file attachment patterns).
tmux
341.8kRemote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.
