Skip to content

javiorfo/opensubs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

opensubs

Library to search subtitles from opensubtitles.org

Description

This crate provides a high-level, ergonomic API for searching and retrieving subtitles 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.2"

Enable blocking feature if needed

[dependencies]
opensubs = { version = "0.1.2", 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.org could 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

  • Bitcoin (QR) 1GqdJ63RDPE4eJKujHi166FAyigvHu5R7v
  • Paypal

About

Library to search subtitles from opensubtitles.org

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages