# JW Player Media Management API Wrapper A Rust library that provides an API wrapper for the JW Player media management. This wrapper allows users to query their media library, filter results by tags, stream large libraries in manageable chunks, and download specific video renditions. ## Features - **Query Media Library**: Fetch details about all media items in your JW Player library. - **Keyword Filtering**: Filter media items based on keywords. - **Stream Large Libraries**: Efficiently stream large collections by retrieving items in chunks. - **Download Renditions**: Download specific video renditions with ease. - **Delete Media**: Delete specific video fromt the library. ## Installation Add this crate to your `Cargo.toml`: ```toml [dependencies] jw_client = "1.0.0" ``` ## Usage Ensure that you have an API key from JW Player and the necessary permissions to access the media management API. ### 1. Set Up API Client Initialize the API client with your JW API key and site id: ```rust let token = std::env::var("JW_TOKEN").expect("JW_TOKEN must be set."); let site_id = std::env::var("JW_SITE_ID").expect("JW_SITE_ID must be set."); let client = Client::new(&token, &site_id); ``` ### 2. Query the Media Library Retrieve a static chunk of most recent JW library items, max 10k videos: ```rust let default_response = client.get_library(None).await; //returns 10 items let different_size_response = client.get_library(Some(42)).await; //sets return size to 42 let tags_include = client.get_library_by_tags(vec!["cherries"], None).await; let tag_exclude = client.get_library_excluding_tags(vec!["cherries"], None).await; ``` ### 3. Stream Media in Chunks For large libraries, retrieve items in streamed chunks: ```rust use tokio_stream::StreamExt; let mut streamed_data = client.get_library_stream(Some(200), Some("tags: NOT ( cherries )".to_string())).await; while let Some(Ok(items)) = streamed_data.next().await { for media in items.media { println!("{:?}", media.id); } } ``` ### 4. Download a Video Rendition Download a specific rendition for a video: ```rust let ten_videos = client.get_library(None).await.unwrap().unwrap(); for media in ten_videos.media { client.download(&media.id, "./").await; } ``` ### 5. Delete a Video Delete a specific media entry - CAUTION this action cannot be undone. ```rust let resp = client.delete_meida("XYZ12345").await; match resp { Ok(()) => { println!("DELETED") } Err(e) => { println!("{}", e) } } ``` ## License This project is licensed under the MIT License.