Support postimg.org albums; move to Cloudinary
This commit is contained in:
parent
1c5c6af5f8
commit
9e200d3aa7
@ -4,9 +4,12 @@ name = "wynnautocrop"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
base64 = "0.9.0"
|
||||||
image = "0.18.0"
|
image = "0.18.0"
|
||||||
imgur = "0.7.0"
|
|
||||||
palette = "0.2.1"
|
palette = "0.2.1"
|
||||||
|
regex = "0.2.5"
|
||||||
reqwest = "0.8.2"
|
reqwest = "0.8.2"
|
||||||
rocket = "0.3.5"
|
rocket = "0.3.5"
|
||||||
rocket_codegen = "0.3.5"
|
rocket_codegen = "0.3.5"
|
||||||
|
serde_json = "1.0.9"
|
||||||
|
|
||||||
|
@ -4,15 +4,25 @@
|
|||||||
extern crate rocket;
|
extern crate rocket;
|
||||||
|
|
||||||
extern crate reqwest;
|
extern crate reqwest;
|
||||||
|
use reqwest::{Client, ClientBuilder};
|
||||||
|
use reqwest::header;
|
||||||
|
|
||||||
|
extern crate regex;
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
extern crate serde_json;
|
||||||
|
|
||||||
extern crate image;
|
extern crate image;
|
||||||
use image::ImageFormat;
|
use image::ImageFormat;
|
||||||
|
|
||||||
extern crate imgur;
|
extern crate base64;
|
||||||
|
|
||||||
|
//extern crate imgur;
|
||||||
|
|
||||||
extern crate wynnautocrop;
|
extern crate wynnautocrop;
|
||||||
use wynnautocrop::*;
|
use wynnautocrop::*;
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::io::{Cursor, Read};
|
use std::io::{Cursor, Read};
|
||||||
|
|
||||||
#[derive(FromForm)]
|
#[derive(FromForm)]
|
||||||
@ -23,14 +33,81 @@ struct UrlForm {
|
|||||||
#[get("/crop?<url>")]
|
#[get("/crop?<url>")]
|
||||||
fn crop_url(url: UrlForm) -> String {
|
fn crop_url(url: UrlForm) -> String {
|
||||||
let url = url.url;
|
let url = url.url;
|
||||||
|
if url.starts_with("https://postimg.org/gallery/") {
|
||||||
|
postimg_gallery(url)
|
||||||
|
} else {
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
reqwest::get(&url).unwrap().read_to_end(&mut buf).unwrap();
|
reqwest::get(&url).unwrap().read_to_end(&mut buf).unwrap();
|
||||||
let mut img = image::load(Cursor::new(&*buf), image::guess_format(&buf).unwrap()).unwrap();
|
let mut img = image::load(Cursor::new(&*buf), image::guess_format(&buf).unwrap()).unwrap();
|
||||||
img = crop(img);
|
img = crop(img);
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
img.save(&mut buf, ImageFormat::PNG).unwrap();
|
img.save(&mut buf, ImageFormat::PNG).unwrap();
|
||||||
let handle = imgur::Handle::new("c819d6faf0219ac".to_owned());
|
//let handle = imgur::Handle::new("c819d6faf0219ac".to_owned());
|
||||||
handle.upload(&buf).unwrap().link().unwrap().to_owned()
|
//handle.upload(&buf).unwrap().link().unwrap().to_owned()
|
||||||
|
upload_image(&Client::new(), &buf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn postimg_gallery(url: String) -> String {
|
||||||
|
let html = reqwest::get(&url).unwrap().text().unwrap();
|
||||||
|
let regex = Regex::new(r"embed_value=(\{.+\});").unwrap();
|
||||||
|
let regex2 = Regex::new(r#"href="(.*\?dl=1)""#).unwrap();
|
||||||
|
let json = regex.captures(&html).unwrap().get(1).unwrap().as_str();
|
||||||
|
let data: serde_json::Value = serde_json::from_str(json).unwrap();
|
||||||
|
let mut acc = String::new();
|
||||||
|
let mut headers = header::Headers::new();
|
||||||
|
headers.set(header::UserAgent::new("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36".to_string()));
|
||||||
|
let client = ClientBuilder::new()
|
||||||
|
.default_headers(headers)
|
||||||
|
.build().unwrap();
|
||||||
|
//let handle = imgur::Handle::new("c819d6faf0219ac".to_owned());
|
||||||
|
for key in data.as_object().unwrap().keys() {
|
||||||
|
let url = format!("https://postimg.org/image/{}/", key);
|
||||||
|
println!("getting {:?}", url);
|
||||||
|
let html = reqwest::get(&url).unwrap().text().unwrap();
|
||||||
|
let url = regex2.captures(&html).unwrap().get(1).unwrap().as_str();
|
||||||
|
println!("getting {:?}", url);
|
||||||
|
|
||||||
|
let mut buf = Vec::new();
|
||||||
|
loop {
|
||||||
|
if let Ok(mut res) = client.get(url).send() {
|
||||||
|
if let Ok(_) = res.read_to_end(&mut buf) {
|
||||||
|
if let Ok(format) = image::guess_format(&buf) {
|
||||||
|
if let Ok(mut img) = image::load(Cursor::new(&*buf), format) {
|
||||||
|
img = crop(img);
|
||||||
|
let mut buf = Vec::new();
|
||||||
|
img.save(&mut buf, ImageFormat::PNG).unwrap();
|
||||||
|
//let upload = handle.upload(&buf).unwrap();
|
||||||
|
//println!("uploaded to {:?}", upload.link());
|
||||||
|
//acc += upload.link().unwrap();
|
||||||
|
let url = upload_image(&client, &buf);
|
||||||
|
println!("uploaded to {:?}", url);
|
||||||
|
acc += &url;
|
||||||
|
acc += " ";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf = Vec::new();
|
||||||
|
println!("retrying..");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
acc
|
||||||
|
}
|
||||||
|
|
||||||
|
fn upload_image(client: &Client, buf: &[u8]) -> String {
|
||||||
|
let mut file = "data:image/png;base64,".to_owned();
|
||||||
|
let mut params = HashMap::new();
|
||||||
|
params.insert("upload_preset", "unsigned_upload");
|
||||||
|
let base64 = base64::encode(&buf);
|
||||||
|
file.push_str(&base64);
|
||||||
|
params.insert("file", &file);
|
||||||
|
let json = client.post("https://api.cloudinary.com/v1_1/wynnbotcrop1/upload")
|
||||||
|
.form(¶ms)
|
||||||
|
.send().unwrap().text().unwrap();
|
||||||
|
let data: serde_json::Value = serde_json::from_str(&json).unwrap();
|
||||||
|
data.as_object().unwrap().get("secure_url").unwrap().as_str().unwrap().to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
Loading…
Reference in New Issue
Block a user