|
3 | 3 | using System; |
4 | 4 | using System.Collections.Generic; |
5 | 5 | using System.Diagnostics; |
| 6 | +using System.IO; |
6 | 7 | using System.Linq; |
| 8 | +using System.Net.Http; |
7 | 9 | using System.Threading; |
8 | 10 | using System.Threading.Tasks; |
9 | 11 | using AngleSharp.Dom; |
10 | 12 | using AngleSharp.Html.Dom; |
| 13 | +using AngleSharp.Html.Parser; |
11 | 14 | using AngleSharp.XPath; |
| 15 | +using RestSharp; |
| 16 | +using SimpleCore.Diagnostics; |
12 | 17 | using SimpleCore.Net; |
13 | 18 | using SimpleCore.Utilities; |
14 | 19 | using SmartImage.Lib.Searching; |
15 | 20 | using SmartImage.Lib.Utilities; |
16 | 21 |
|
17 | 22 | namespace SmartImage.Lib.Engines.Impl |
18 | 23 | { |
19 | | - public sealed class IqdbEngine : InterpretedSearchEngine |
| 24 | + public sealed class IqdbEngine : ClientSearchEngine |
20 | 25 | { |
21 | | - public IqdbEngine() : base("https://iqdb.org/?url=") { } |
| 26 | + public IqdbEngine() : base("https://iqdb.org/?url=", "https://iqdb.org/") { } |
22 | 27 |
|
23 | 28 | public override SearchEngineOptions EngineOption => SearchEngineOptions.Iqdb; |
24 | 29 |
|
@@ -105,10 +110,100 @@ private static ImageResult ParseResult(IHtmlCollection<IElement> tr) |
105 | 110 | return result; |
106 | 111 | } |
107 | 112 |
|
108 | | - protected override SearchResult Process(IDocument doc, SearchResult sr) |
| 113 | + |
| 114 | + private IDocument GetDocument(ImageQuery query) |
| 115 | + { |
| 116 | + //return base.GetDocument(sr); |
| 117 | + |
| 118 | + /*MultipartFormDataContent form = new MultipartFormDataContent(); |
| 119 | +
|
| 120 | + form.Add(new StringContent("8388608"), "MAX_FILE_SIZE"); |
| 121 | +
|
| 122 | + for (int i = 1; i <= 13; i++) |
| 123 | + { |
| 124 | + if (new[] { 7, 8, 9, 12 }.Contains(i)) |
| 125 | + { |
| 126 | + continue; |
| 127 | + } |
| 128 | +
|
| 129 | + form.Add(new StringContent(i.ToString()), "service[]"); |
| 130 | + } |
| 131 | +
|
| 132 | + form.Add(new StreamContent(query.Stream), "file", "image.jpg"); |
| 133 | + form.Add(new StringContent(string.Empty), "url"); |
| 134 | +
|
| 135 | +
|
| 136 | + var h = new HttpClient(); |
| 137 | + h.BaseAddress = new Uri(EndpointUrl); |
| 138 | + var r=h.PostAsync("/", form); |
| 139 | + r.Wait();*/ |
| 140 | + |
| 141 | + var rq = new RestRequest(Method.POST); |
| 142 | + rq.AddParameter("MAX_FILE_SIZE", 8388608, ParameterType.GetOrPost); |
| 143 | + rq.AddHeader("Content-Type", "multipart/form-data"); |
| 144 | + |
| 145 | + byte[] rg = Array.Empty<byte>(); |
| 146 | + object u = query.Value; |
| 147 | + |
| 148 | + if (query.IsFile) { |
| 149 | + rg = File.ReadAllBytes(query.Value); |
| 150 | + |
| 151 | + |
| 152 | + } |
| 153 | + else if (query.IsUri) { } |
| 154 | + else { |
| 155 | + throw new SmartImageException(); |
| 156 | + } |
| 157 | + |
| 158 | + rq.AddFile("file", rg, "image.jpg"); |
| 159 | + rq.AddParameter("url", u, ParameterType.GetOrPost); |
| 160 | + |
| 161 | + //rq.AddParameter("service[]", new[] {1, 2, 3, 4, 5, 6, 11, 13}, ParameterType.GetOrPost); |
| 162 | + |
| 163 | + var response = Client.Execute(rq); |
| 164 | + Network.DumpResponse(response); |
| 165 | + Debug.Assert(response.IsSuccessful); |
| 166 | + |
| 167 | + // var html2 = r.Result.Content.ReadAsStringAsync(); |
| 168 | + // html2.Wait(); |
| 169 | + // var html = html2.Result; |
| 170 | + |
| 171 | + var parser = new HtmlParser(); |
| 172 | + return parser.ParseDocument(response.Content); |
| 173 | + } |
| 174 | + |
| 175 | + |
| 176 | + [DebuggerHidden] |
| 177 | + public override SearchResult GetResult(ImageQuery query) |
| 178 | + { |
| 179 | + //var sr = base.GetResult(query); |
| 180 | + var sr = new SearchResult(this); |
| 181 | + |
| 182 | + |
| 183 | + try { |
| 184 | + |
| 185 | + sr = Process(query, sr); |
| 186 | + } |
| 187 | + catch (Exception e) { |
| 188 | + sr.Status = ResultStatus.Failure; |
| 189 | + Trace.WriteLine($"{Name}: {e.Message}", LogCategories.C_ERROR); |
| 190 | + } |
| 191 | + |
| 192 | + return sr; |
| 193 | + } |
| 194 | + |
| 195 | + protected override SearchResult Process(ImageQuery query, SearchResult sr) |
109 | 196 | { |
| 197 | + |
| 198 | + // var re = new RestRequest(Method.POST); |
| 199 | + // re.AddFile("file", File.ReadAllBytes(q.Value), "image.jpg"); |
| 200 | + |
110 | 201 | // Don't select other results |
111 | 202 |
|
| 203 | + |
| 204 | + var doc = GetDocument(query); |
| 205 | + |
| 206 | + |
112 | 207 | var pages = doc.Body.SelectSingleNode("//div[@id='pages']"); |
113 | 208 | var tables = ((IHtmlElement) pages).SelectNodes("div/table"); |
114 | 209 |
|
|
0 commit comments