aboutsummaryrefslogtreecommitdiff
path: root/import
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-04-25 18:34:55 +0200
committermetamuffin <metamuffin@disroot.org>2025-04-25 18:34:55 +0200
commit1319d15e2613d732179229824b08780fb065199c (patch)
treed2d139d3d110466dbcc45932858809c1227eba96 /import
parented5c3771f40a5107990fdbeafc3b22b88e9347be (diff)
downloadjellything-1319d15e2613d732179229824b08780fb065199c.tar
jellything-1319d15e2613d732179229824b08780fb065199c.tar.bz2
jellything-1319d15e2613d732179229824b08780fb065199c.tar.zst
wikidata image
Diffstat (limited to 'import')
-rw-r--r--import/src/lib.rs6
-rw-r--r--import/src/musicbrainz.rs1
-rw-r--r--import/src/wikimedia_commons.rs29
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
+ }
}