SolvedByAiApi
unknown
csharp
4 years ago
6.3 kB
8
Indexable
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using Newtonsoft.Json;
namespace ConsoleApp4
{
public class SolvedByAiApi
{
string url_service;
string api_key;
public class SolvedResponseRaw
{
public Result result { get; set; }
public List<string> notifications { get; set; }
public class Result
{
public Clockwise clockwise { get; set; }
public CounterClockwise counter_clockwise { get; set; }
}
public class Clockwise
{
public int angle { get; set; }
public int steps { get; set; }
}
public class CounterClockwise
{
public int angle { get; set; }
public int steps { get; set; }
}
}
public SolvedByAiApi(string url_service, string api_key)
{
this.url_service = url_service;
this.api_key = api_key;
}
/*
Esempi di risposta
POSITIVA
response_code = 200
steps, direction
NEGATIVE
CONTROLLI LATO CLIENT
response_code = 900
response_message = Descrizione Errore
CONTROLLI LATO SERVICE ( SOLVED BY AI )
response_code >= 400 <= 500
response_message = DESCRIZIONE ERRORE ( NON AUTORIZZATO, CREDITO FINITO, ERRORI NELLA RICHIESTA)
*/
public CaptchaResolutorResponse SolveCaptcha(byte[] img_input)
{
CaptchaResolutorResponse res = new CaptchaResolutorResponse();
if (img_input != null)
{
string base64_img = Convert.ToBase64String(img_input);
if(base64_img!=null && base64_img.Length > 0)
{
string json = null;
using (var client = new WebClient())
{
json = encode_params(this.api_key, 9, base64_img);
client.Headers.Add("content-type", "application/json");
try
{
string response = Encoding.ASCII.GetString(client.UploadData(this.url_service, "POST", Encoding.UTF8.GetBytes(json)));
if (response != null) response = response.Replace("counter-clockwise", "counter_clockwise");
SolvedResponseRaw raw = JsonConvert.DeserializeObject<SolvedResponseRaw>(response);
if (raw != null && raw.result != null)
{
res.Response_code = 200;
if (raw.result.clockwise != null && raw.result.clockwise.steps != null)
{
res.Steps = raw.result.clockwise.steps;
res.Direction = "RIGHT";
}
if (raw.result.counter_clockwise != null && raw.result.counter_clockwise.steps != null)
{
if (res.Steps == null || raw.result.counter_clockwise.steps < res.Steps)
{
res.Steps = raw.result.counter_clockwise.steps;
res.Direction = "LEFT";
}
}
if (raw.notifications != null && raw.notifications.Count > 0)
{
foreach (string n in raw.notifications)
{
res.Message += n + "\n";
}
}
}
else
{
res.Response_code = 900;
res.Message = "NO RESULTS";
}
}catch(Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
if (ex.GetType().Name == "WebException")
{
WebException we = (WebException)ex;
HttpWebResponse response = (System.Net.HttpWebResponse)we.Response;
res.Response_code = (int)response.StatusCode;
res.Message = response.StatusDescription;
}
else
{
res.Response_code = 402;
res.Message = "BAD RESPONSE";
}
}
}
}
else
{
res.Response_code = 900;
res.Message = "BASE 64 IMAGE CORRUPTED";
}
}
else
{
res.Response_code = 900;
res.Message = "NO IMAGE";
}
return res;
}
private string encode_params(string api_key, int steps, string base64_image)
{
string json = null;
if (api_key != null && steps != null && base64_image != null)
{
Dictionary<string, string> valuePairs = new Dictionary<string, string>
{
{ "apiKey", api_key },
{ "steps", steps+"" },
{ "image", base64_image }
};
json = JsonConvert.SerializeObject(valuePairs, Formatting.Indented);
}
return json;
}
}
}
Editor is loading...