From 400e1d24650dfedfd65767f11922dc2d4c98e77e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20Gr=C3=BCnewald?= <10533763+dhalucario@users.noreply.github.com> Date: Mon, 27 Jan 2025 23:41:00 +0100 Subject: [PATCH] WIP client submission --- Cargo.toml | 2 +- src/client.rs | 27 ++++++++++++++++++--------- src/main.rs | 9 --------- src/models.rs | 15 ++++++++++++++- 4 files changed, 33 insertions(+), 20 deletions(-) delete mode 100644 src/main.rs diff --git a/Cargo.toml b/Cargo.toml index a673bd0..54cf99b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,4 +9,4 @@ reqwest = { version = "0.12", features = ["json"] } tokio = { version = "1.43", features = ["full", "rt-multi-thread"]} serde = { version = "1.0", features = ["default", "derive"]} serde_json = { version = "1.0", features = ["default", "std", "alloc"]} -chrono = { version = "0.4", features = ["serde"] } \ No newline at end of file +chrono = { version = "0.4", features = ["serde"] } diff --git a/src/client.rs b/src/client.rs index b78fec9..a092014 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,16 +1,18 @@ use std::collections::HashMap; use reqwest::header::HeaderMap; -use crate::models::{CookieRequest, Submission, SubmissionRequest}; +use crate::models::{Submission, SubmissionRequest}; +use anyhow::bail; const FA_API_BASE_ORIGIN: &str = "https://furaffinity-api.herokuapp.com"; pub struct Client { request_client: reqwest::Client, - cookies: HashMap + cookies: HashMap, + bbcode: bool } impl Client { - pub fn new(cookies: HashMap) -> anyhow::Result { + pub fn new(cookies: Option>, bbcode: Option) -> anyhow::Result { let headers = HeaderMap::from_iter(vec![ (reqwest::header::ACCEPT, "application/json".try_into()?), (reqwest::header::CONTENT_TYPE, "application/json".try_into()?) @@ -21,22 +23,29 @@ impl Client { Ok(Self { request_client, - cookies + cookies: cookies.unwrap_or_default(), + bbcode: bbcode.unwrap_or_default() }) } pub async fn get_submission(&mut self, submission_id: S) -> anyhow::Result where S: Into { - let url = format!("{FA_API_BASE_ORIGIN}/submission/{}", submission_id.into()); + let url = format!("{FA_API_BASE_ORIGIN}/submission/{}/", submission_id.into()); + let cookies = self.cookies.clone() + .into_iter() + .map(|cookie| cookie.into()) + .collect(); + let res = self.request_client .post(url) .json(&SubmissionRequest { - cookies: vec![ - ], - bbcode: false + cookies, + bbcode: self.bbcode.clone() }) .send().await?; - println!("{:?}", res.status()); + if res.status() != reqwest::StatusCode::OK { + bail!(res.status()); + }; //File::create("./out.json")?.write(res.text().await?.as_bytes())?; let submission: Submission = res.json().await?; Ok(submission) diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 31649c9..0000000 --- a/src/main.rs +++ /dev/null @@ -1,9 +0,0 @@ -use rustyfox::client::Client; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - let mut client = Client::new()?; - let submission = client.get_submission("59630962").await?; - println!("Submission: {:?}", submission); - Ok(()) -} \ No newline at end of file diff --git a/src/models.rs b/src/models.rs index 57b09d0..d1462c1 100644 --- a/src/models.rs +++ b/src/models.rs @@ -12,6 +12,12 @@ impl CookieRequest { } } +impl From<(String, String)> for CookieRequest { + fn from(value: (String, String)) -> Self { + Self { name: value.0, value: value.1 } + } +} + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct SubmissionRequest { pub cookies: Vec, @@ -93,4 +99,11 @@ pub struct Submission { pub next: Option, pub favorite: bool, pub favorite_toggle_link: String, -} \ No newline at end of file +} + +/*#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +#[serde(untagged, rename_all = "lowercase")] +pub enum SubmissionType { + #[serde(untagged)] + Image +}*/ \ No newline at end of file