1 unstable release
Uses new Rust 2024
| new 0.1.0 | Mar 10, 2026 |
|---|
#254 in Video
48KB
841 lines
opensubs
Library to search subtitles from opensubtitles.org
Description
This crate provides a high-level, ergonomic API for searching and retrieving subtitles (only from movies) and related metadata from opensubtitles.org.
It offers both asynchronous and blocking (synchronous) interfaces, with flexible filtering and ordering options.
It uses a web scraper to build the api
Usage
Add this crate to your Cargo.toml:
[dependencies]
opensubs = "0.1.0"
Enable blocking feature if needed
[dependencies]
opensubs = { version = "0.1.0", features = ["blocking"] }
Async Example (default)
use opensubs::{Filters, Language, OrderBy, SearchBy};
#[tokio::main]
async fn main() -> opensubs::Result {
// async search movie "holdovers", spanish subs, order by rating
let results = opensubs::search(SearchBy::MovieAndFilter(
"holdovers",
Filters::default()
.languages(&[Language::Spanish])
.order_by(OrderBy::Rating)
.build(),
))
.await?;
println!("Subtitles {results:#?}");
Ok(())
}
Blocking Example (feature "blocking")
use opensubs::{Filters, Language, OrderBy, Response, SearchBy};
fn main() -> opensubs::Result {
// blocking search movie "the godfather"
// year 1972, french and german subs, order by rating
let results = opensubs::blocking::search(SearchBy::MovieAndFilter(
"the godfather",
Filters::default()
.year(1972)
.languages(&[Language::French, Language::German])
.order_by(OrderBy::Downloads)
.build(),
))?;
match results {
Response::Movie(movies) => {
// If results is Movie type, get the subtitles_link property
// and find subtitles for it
if let Some(movie) = movies.first() {
let subs = opensubs::blocking::search(SearchBy::Url(&movie.subtitles_link))?;
println!("Subtitles {subs:#?}");
}
}
// else print the subtitles
_ => println!("Subtitles {results:#?}"),
}
Ok(())
}
Details
- Searching subtitles from
opensubtitles.orgcould return a list of movies or a list of subtitles of the movie searched (if the text and filter are more exactly). For that matter the Response is an enum. - Here are more examples
Features
- Default async search. Blocking search available too
- Search by url, movie name and/or filters (languages, page, ordering and year)
- Obtain not only info and metadata but also a subtitle download link. Here is an example of download using
wget
Docs
Find all the configuration options in the full documentation.
Donate
Dependencies
~4–12MB
~210K SLoC