diff options
author | metamuffin <metamuffin@disroot.org> | 2025-04-25 18:34:55 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-04-25 18:34:55 +0200 |
commit | 1319d15e2613d732179229824b08780fb065199c (patch) | |
tree | d2d139d3d110466dbcc45932858809c1227eba96 /import/src/wikimedia_commons.rs | |
parent | ed5c3771f40a5107990fdbeafc3b22b88e9347be (diff) | |
download | jellything-1319d15e2613d732179229824b08780fb065199c.tar jellything-1319d15e2613d732179229824b08780fb065199c.tar.bz2 jellything-1319d15e2613d732179229824b08780fb065199c.tar.zst |
wikidata image
Diffstat (limited to 'import/src/wikimedia_commons.rs')
-rw-r--r-- | import/src/wikimedia_commons.rs | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/import/src/wikimedia_commons.rs b/import/src/wikimedia_commons.rs index 081aa5a..e0f647e 100644 --- a/import/src/wikimedia_commons.rs +++ b/import/src/wikimedia_commons.rs @@ -5,13 +5,16 @@ */ use crate::USER_AGENT; +use anyhow::Result; +use jellybase::cache::{async_cache_file, CachePath}; use reqwest::{ header::{HeaderMap, HeaderName, HeaderValue}, redirect::Policy, Client, ClientBuilder, }; +use tokio::io::AsyncWriteExt; -struct WikimediaCommons { +pub struct WikimediaCommons { client: Client, } impl WikimediaCommons { @@ -26,4 +29,28 @@ impl WikimediaCommons { .unwrap(); Self { client } } + + pub async fn image_by_filename(&self, filename: String) -> Result<CachePath> { + async_cache_file( + "api-wikimedia-commons-image", + filename.clone(), + |mut file| async move { + let mut res = self + .client + .get(format!( + "https://commons.wikimedia.org/wiki/Special:FilePath/{}", + filename.replace(" ", "_") + )) + .send() + .await? + .error_for_status()?; + + while let Some(chunk) = res.chunk().await? { + file.write_all(&chunk).await?; + } + Ok(()) + }, + ) + .await + } } |