SolvedByAiApi

 avatar
unknown
csharp
3 years ago
6.3 kB
4
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...