{"id":31834827,"url":"https://github.com/javiorfo/opensubs","last_synced_at":"2026-03-11T00:12:45.742Z","repository":{"id":301796135,"uuid":"994413374","full_name":"javiorfo/opensubs","owner":"javiorfo","description":"Library to search subtitles from opensubtitles.org","archived":false,"fork":false,"pushed_at":"2025-10-16T21:30:53.000Z","size":56,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-01T03:11:22.438Z","etag":null,"topics":["asynchronous","opensubtitles","rust","rust-library","tokio-rs"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javiorfo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-01T21:59:55.000Z","updated_at":"2026-01-20T21:54:20.000Z","dependencies_parsed_at":"2025-06-28T22:24:15.634Z","dependency_job_id":"b2258e46-faa0-4d40-8362-c8d97e7acd5a","html_url":"https://github.com/javiorfo/opensubs","commit_stats":null,"previous_names":["javiorfo/opensubs"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/javiorfo/opensubs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fopensubs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fopensubs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fopensubs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fopensubs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javiorfo","download_url":"https://codeload.github.com/javiorfo/opensubs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fopensubs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30360650,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"ssl_error","status_checked_at":"2026-03-10T21:40:59.357Z","response_time":106,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asynchronous","opensubtitles","rust","rust-library","tokio-rs"],"created_at":"2025-10-12T00:24:35.930Z","updated_at":"2026-03-11T00:12:45.732Z","avatar_url":"https://github.com/javiorfo.png","language":"Rust","funding_links":["https://www.paypal.com/donate/?hosted_button_id=FA7SGLSCT2H8G"],"categories":[],"sub_categories":[],"readme":"# opensubs\n*Library to search subtitles from opensubtitles.org*\n\n## Description\nThis crate provides a high-level, ergonomic API for searching and retrieving subtitles (only from movies) and related metadata from `opensubtitles.org`. \nIt offers both asynchronous and blocking (synchronous) interfaces, with flexible filtering and ordering options. \n**It uses a web scraper to build the api** \n\n## Usage\nAdd this crate to your `Cargo.toml`:\n\n```toml\n[dependencies]\nopensubs = \"0.1.0\"\n```\n\n#### Enable blocking feature if needed\n\n```toml\n[dependencies]\nopensubs = { version = \"0.1.0\", features = [\"blocking\"] }\n```\n\n## Async Example (default)\n\n```rust\nuse opensubs::{Filters, Language, OrderBy, SearchBy};\n\n#[tokio::main]\nasync fn main() -\u003e opensubs::Result {\n    // async search movie \"holdovers\", spanish subs, order by rating\n    let results = opensubs::search(SearchBy::MovieAndFilter(\n        \"holdovers\",\n        Filters::default()\n            .languages(\u0026[Language::Spanish])\n            .order_by(OrderBy::Rating)\n            .build(),\n    ))\n    .await?;\n\n    println!(\"Subtitles {results:#?}\");\n\n    Ok(())\n}\n```\n\n## Blocking Example (feature \"blocking\")\n\n```rust\nuse opensubs::{Filters, Language, OrderBy, Response, SearchBy};\n\nfn main() -\u003e opensubs::Result {\n    // blocking search movie \"the godfather\"\n    // year 1972, french and german subs, order by rating\n    let results = opensubs::blocking::search(SearchBy::MovieAndFilter(\n        \"the godfather\",\n        Filters::default()\n            .year(1972)\n            .languages(\u0026[Language::French, Language::German])\n            .order_by(OrderBy::Downloads)\n            .build(),\n    ))?;\n\n    match results {\n        Response::Movie(movies) =\u003e {\n            // If results is Movie type, get the subtitles_link property \n            // and find subtitles for it\n            if let Some(movie) = movies.first() {\n                let subs = opensubs::blocking::search(SearchBy::Url(\u0026movie.subtitles_link))?;\n                println!(\"Subtitles {subs:#?}\");\n            }\n        }\n        // else print the subtitles\n        _ =\u003e println!(\"Subtitles {results:#?}\"),\n    }\n\n    Ok(())\n}\n```\n\n## Details\n- 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](https://github.com/javiorfo/opensubs/blob/736b5a0d68fd2c7622bc1426458b204f7b3daf96/src/core/response.rs#L53) is an enum.\n- Here are more [examples](https://github.com/javiorfo/opensubs/tree/master/examples)\n\n## Features\n- Default async search. Blocking search available too\n- Search by url, movie name and/or filters (languages, page, ordering and year)\n- Obtain not only info and metadata but also a subtitle download link. [Here](https://github.com/javiorfo/opensubs/blob/master/examples/download_sub.rs) is an example of download using `wget`\n\n## Docs\nFind all the configuration options in the full [documentation](https://docs.rs/opensubs/0.1.0/opensubs/).\n\n---\n\n### Donate\n- **Bitcoin** [(QR)](https://raw.githubusercontent.com/javiorfo/img/master/crypto/bitcoin.png)  `1GqdJ63RDPE4eJKujHi166FAyigvHu5R7v`\n- [Paypal](https://www.paypal.com/donate/?hosted_button_id=FA7SGLSCT2H8G)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaviorfo%2Fopensubs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaviorfo%2Fopensubs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaviorfo%2Fopensubs/lists"}