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 | |
parent | ed5c3771f40a5107990fdbeafc3b22b88e9347be (diff) | |
download | jellything-1319d15e2613d732179229824b08780fb065199c.tar jellything-1319d15e2613d732179229824b08780fb065199c.tar.bz2 jellything-1319d15e2613d732179229824b08780fb065199c.tar.zst |
wikidata image
-rw-r--r-- | import/src/lib.rs | 6 | ||||
-rw-r--r-- | import/src/musicbrainz.rs | 1 | ||||
-rw-r--r-- | import/src/wikimedia_commons.rs | 29 |
3 files changed, 35 insertions, 1 deletions
diff --git a/import/src/lib.rs b/import/src/lib.rs index 2c1676c..0f89ab0 100644 --- a/import/src/lib.rs +++ b/import/src/lib.rs @@ -37,6 +37,8 @@ use tokio::{ task::spawn_blocking, }; use trakt::Trakt; +use wikidata::Wikidata; +use wikimedia_commons::WikimediaCommons; pub mod acoustid; pub mod infojson; @@ -63,6 +65,8 @@ struct Apis { tmdb: Option<Tmdb>, acoustid: Option<AcoustID>, musicbrainz: MusicBrainz, + wikidata: Wikidata, + wikimedia_commons: WikimediaCommons, } pub fn is_importing() -> bool { @@ -90,6 +94,8 @@ fn import(db: &Database, incremental: bool) -> Result<()> { tmdb: SECRETS.api.tmdb.as_ref().map(|key| Tmdb::new(key)), acoustid: SECRETS.api.acoustid.as_ref().map(|key| AcoustID::new(key)), musicbrainz: MusicBrainz::new(), + wikidata: Wikidata::new(), + wikimedia_commons: WikimediaCommons::new(), }; let rthandle = Handle::current(); diff --git a/import/src/musicbrainz.rs b/import/src/musicbrainz.rs index 51573db..0fe839b 100644 --- a/import/src/musicbrainz.rs +++ b/import/src/musicbrainz.rs @@ -31,6 +31,7 @@ pub mod reltypes { pub const PHONOGRAPHIC_COPYRIGHT: &str = "7fd5fbc0-fbf4-4d04-be23-417d50a4dc30"; pub const MIX: &str = "3e3102e1-1896-4f50-b5b2-dd9824e46efe"; pub const INSTRUMENT: &str = "59054b12-01ac-43ee-a618-285fd397e461"; + pub const WIKIDATA: &str = "689870a4-a1e4-4912-b17f-7b2664215698"; } pub struct MusicBrainz { 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 + } } |