WIP client submission

This commit is contained in:
Leon Grünewald 2025-01-27 23:41:00 +01:00
parent 265ef7425e
commit 400e1d2465
4 changed files with 33 additions and 20 deletions

View file

@ -9,4 +9,4 @@ reqwest = { version = "0.12", features = ["json"] }
tokio = { version = "1.43", features = ["full", "rt-multi-thread"]} tokio = { version = "1.43", features = ["full", "rt-multi-thread"]}
serde = { version = "1.0", features = ["default", "derive"]} serde = { version = "1.0", features = ["default", "derive"]}
serde_json = { version = "1.0", features = ["default", "std", "alloc"]} serde_json = { version = "1.0", features = ["default", "std", "alloc"]}
chrono = { version = "0.4", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] }

View file

@ -1,16 +1,18 @@
use std::collections::HashMap; use std::collections::HashMap;
use reqwest::header::HeaderMap; 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"; const FA_API_BASE_ORIGIN: &str = "https://furaffinity-api.herokuapp.com";
pub struct Client { pub struct Client {
request_client: reqwest::Client, request_client: reqwest::Client,
cookies: HashMap<String, String> cookies: HashMap<String, String>,
bbcode: bool
} }
impl Client { impl Client {
pub fn new(cookies: HashMap<String, String>) -> anyhow::Result<Self> { pub fn new(cookies: Option<HashMap<String, String>>, bbcode: Option<bool>) -> anyhow::Result<Self> {
let headers = HeaderMap::from_iter(vec![ let headers = HeaderMap::from_iter(vec![
(reqwest::header::ACCEPT, "application/json".try_into()?), (reqwest::header::ACCEPT, "application/json".try_into()?),
(reqwest::header::CONTENT_TYPE, "application/json".try_into()?) (reqwest::header::CONTENT_TYPE, "application/json".try_into()?)
@ -21,22 +23,29 @@ impl Client {
Ok(Self { Ok(Self {
request_client, request_client,
cookies cookies: cookies.unwrap_or_default(),
bbcode: bbcode.unwrap_or_default()
}) })
} }
pub async fn get_submission<S>(&mut self, submission_id: S) -> anyhow::Result<Submission> where S: Into<String> { pub async fn get_submission<S>(&mut self, submission_id: S) -> anyhow::Result<Submission> where S: Into<String> {
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 let res = self.request_client
.post(url) .post(url)
.json(&SubmissionRequest { .json(&SubmissionRequest {
cookies: vec![ cookies,
], bbcode: self.bbcode.clone()
bbcode: false
}) })
.send().await?; .send().await?;
println!("{:?}", res.status()); if res.status() != reqwest::StatusCode::OK {
bail!(res.status());
};
//File::create("./out.json")?.write(res.text().await?.as_bytes())?; //File::create("./out.json")?.write(res.text().await?.as_bytes())?;
let submission: Submission = res.json().await?; let submission: Submission = res.json().await?;
Ok(submission) Ok(submission)

View file

@ -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(())
}

View file

@ -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)] #[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SubmissionRequest { pub struct SubmissionRequest {
pub cookies: Vec<CookieRequest>, pub cookies: Vec<CookieRequest>,
@ -93,4 +99,11 @@ pub struct Submission {
pub next: Option<i32>, pub next: Option<i32>,
pub favorite: bool, pub favorite: bool,
pub favorite_toggle_link: String, pub favorite_toggle_link: String,
} }
/*#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
#[serde(untagged, rename_all = "lowercase")]
pub enum SubmissionType {
#[serde(untagged)]
Image
}*/