rust_anticaptcha/image_captcha.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
//! # ImageCaptcha module
//!
//! Module contains struct and functions to solve Image captcha,
//! like `ImageToTextTask` and `ImageToCoordinatesTask`
//!
//! ## Examples
//! ```no_run
//! use serde_json::json;
//!
//! use rust_anticaptcha::core::enums::ImageTaskType;
//! use rust_anticaptcha::image_captcha::ImageCaptcha;
//!
//! async fn run() {
//! let map = json!({"body": "base64_string"});
//! let mut image_to_text_client = ImageCaptcha::new("API_KEY".to_string());
//! image_to_text_client.captcha_handler(ImageTaskType::ImageToTextTask, &map).await;
//! }
//! ```
use serde_json::Value;
use super::core::captcha_interface::CaptchaInterface;
use super::core::enums::ImageTaskType;
/// Captcha solving method - `ImageToTextTask` and `ImageToCoordinatesTask`
///
/// # Examples
///
/// With already prepared base64 string
/// ```no_run
/// use serde_json::json;
///
/// use rust_anticaptcha::core::enums::ImageTaskType;
/// use rust_anticaptcha::image_captcha::ImageCaptcha;
///
/// async fn run() {
/// let map = json!({"body": "base64_string"});
///
/// let mut image_to_text_client = ImageCaptcha::new("API_KEY".to_string());
/// image_to_text_client.captcha_handler(ImageTaskType::ImageToCoordinatesTask, &map).await;
/// }
/// ```
///
/// With image as file
/// ```no_run
/// use serde_json::json;
///
/// use rust_anticaptcha::core::enums::ImageTaskType;
/// use rust_anticaptcha::image_captcha::ImageCaptcha;
/// use rust_anticaptcha::instruments::image_instrument::ImageInstrument;
///
/// async fn run() {
/// let image_instrument = ImageInstrument::new();
/// let image_file_base64 = image_instrument.read_image_file("files/captcha-image.jpg".to_string());
///
/// let map = json!({"body": image_file_base64});
///
/// let mut image_to_text_client = ImageCaptcha::new("API_KEY".to_string());
/// image_to_text_client.captcha_handler(ImageTaskType::ImageToTextTask, &map).await;
/// }
/// ```
///
/// With image as link
/// ```no_run
/// use serde_json::json;
///
/// use rust_anticaptcha::core::enums::ImageTaskType;
/// use rust_anticaptcha::image_captcha::ImageCaptcha;
/// use rust_anticaptcha::instruments::image_instrument::ImageInstrument;
///
/// async fn run() {
/// let image_instrument = ImageInstrument::new();
/// let image_link_base64 = image_instrument.read_image_link("https://captcha-image.jpg".to_string()).await;
///
/// let map = json!({"body": image_link_base64});
///
/// let mut image_to_text_client = ImageCaptcha::new("API_KEY".to_string());
/// image_to_text_client.captcha_handler(ImageTaskType::ImageToTextTask, &map).await;
/// }
/// ```
///
/// # Notes
/// Read more here:
///
/// <https://anti-captcha.com/apidoc/task-types/ImageToTextTask>
///
/// <https://anti-captcha.com/apidoc/task-types/ImageToCoordinatesTask>
///
pub struct ImageCaptcha {
pub captcha_interface: CaptchaInterface,
}
impl ImageCaptcha {
/// Method init new ImageCaptcha struct with Captcha Interface
///
/// # Arguments
/// `api_key` - Service API key
///
/// # Examples
///
/// ```
/// use rust_anticaptcha::image_captcha::ImageCaptcha;
///
/// let image_to_text_client = ImageCaptcha::new("API_KEY".to_string());
/// ```
/// # Returns
/// Method return new `ImageCaptcha` instance
///
pub fn new(api_key: String) -> Self {
ImageCaptcha {
captcha_interface: CaptchaInterface::new(api_key),
}
}
/// Method run captcha solving logic
///
/// # Arguments
/// `captcha_type` - One of image captcha types from `ImageTaskType`
/// `task_payload` - JSON with captcha task payload
///
/// # Examples
///
/// ```no_run
/// use serde_json::json;
///
/// use rust_anticaptcha::core::enums::ImageTaskType;
/// use rust_anticaptcha::image_captcha::ImageCaptcha;
///
/// async fn run() {
/// let map = json!({"body": "base64_string"});
///
/// let mut image_to_text_client = ImageCaptcha::new("API_KEY".to_string());
/// image_to_text_client.captcha_handler(ImageTaskType::ImageToTextTask, &map).await;
/// }
/// ```
pub async fn captcha_handler(
&mut self,
captcha_type: ImageTaskType,
task_payload: &Value,
) -> Value {
self.captcha_interface
.solve_captcha(captcha_type, task_payload)
.await
}
}