88using AngleSharp . Html . Parser ;
99using AngleSharp . XPath ;
1010using Flurl . Http ;
11+ using Flurl . Http . Content ;
1112using Kantan . Net . Utilities ;
1213using Kantan . Net . Web ;
14+ using Microsoft . Extensions . Logging ;
1315using SmartImage . Lib . Cookies ;
1416using SmartImage . Lib . Images . Uni ;
1517using SmartImage . Lib . Results ;
@@ -72,16 +74,17 @@ public class GoogleLensEngine : WebSearchEngine, IEndpointEngine, ICookiesEngine
7274
7375 // TODO: WIP
7476
75- public const string URL_BASE = "https://lens.google.com" ;
77+ public const string URL_BASE = "https://lens.google.com/" ;
78+ public const string URL_BASE2 = "https://www.google.com/" ;
7679
7780 public override string Name => "Google Lens" ;
7881
79- public override Url BaseUrl => URL_BASE ;
80-
8182 public override SearchEngineOptions EngineOption => SearchEngineOptions . GoogleLens ;
8283
8384 protected override string NodesSelector => null ;
8485
86+ public override Url BaseUrl => URL_BASE ;
87+
8588 public Url EndpointUrl => URL_BASE ;
8689
8790 public GoogleLensEngine ( ) : base ( URL_BASE ) { }
@@ -112,28 +115,63 @@ protected override ValueTask<SearchResultItem> ParseResultItem(INode n, SearchRe
112115 public override async Task < SearchResult > GetResultAsync ( SearchQuery query , CancellationToken token = default )
113116 {
114117 var br = await base . GetResultAsync ( query , token ) ;
118+
115119 return br ;
116120 }
117121
122+ private Task < IFlurlResponse > SearchFileAsync ( SearchQuery query , CancellationToken token )
123+ {
124+ string endpoint ;
125+ UniImageFile uif = query . Source as UniImageFile ;
126+ string filename = uif . FileInfo . Name ;
127+ Task < IFlurlResponse > req ;
128+ endpoint = "v3/upload" ;
129+
130+ // filename = "image.jpg";
131+ // filename = (query.Source is UniImageFile uif) ? uif.FileInfo.Name : "image.jpg";
132+ filename = uif . FileInfo . Name ;
133+
134+ req = Client . Request ( EndpointUrl , endpoint )
135+ . SetQueryParam ( "hl" , HlParam )
136+ . WithTimeout ( Timeout )
137+ . WithCookie ( Nid . Name , Nid . Value )
138+ . WithHeaders ( Headers )
139+ . PostMultipartAsync ( bc =>
140+ {
141+ //
142+ bc . AddFile ( filename , uif . FilePath , contentType : "image/jpeg" ) ;
143+ } , cancellationToken : token ) ;
144+
145+ return req ;
146+ }
147+
118148 protected override async Task < IDocument > GetDocumentAsync ( SearchResult sr , SearchQuery query , CancellationToken token = default )
119149 {
120150 string endpoint , filename ;
121- Task < IFlurlResponse > req ;
122- IFlurlResponse res ;
151+ Task < IFlurlResponse > req = null ;
152+
153+ IFlurlResponse res = null ;
154+
155+ //todo
156+
123157
124- if ( query . Source . IsFile ) { }
125- else if ( query . Source . IsUri ) { }
158+ if ( query . Source . IsUri ) {
159+
160+ req = SearchUrlAsync ( query , token ) ;
161+ res = await req ;
162+ }
163+ else if ( query . Source . IsFile ) {
164+ req = SearchFileAsync ( query , token ) ;
165+ res = await req ;
166+ }
126167 else {
127168 return null ;
128169 }
129170
130- //todo
131- req = SearchUrlAsync ( query , token ) ;
132-
133- res = await req ;
171+ Logger . LogTrace ( "{Uri} {Code}" , res . ResponseMessage . RequestMessage . RequestUri , res . StatusCode ) ;
134172
135173 // var stream = await res.GetStringAsync();
136- var url = res . ResponseMessage . RequestMessage . RequestUri ;
174+ /* var url = res.ResponseMessage.RequestMessage.RequestUri;
137175
138176 using var res2 = await Client.Request(url)
139177 .WithTimeout(Timeout)
@@ -142,7 +180,10 @@ protected override async Task<IDocument> GetDocumentAsync(SearchResult sr, Searc
142180 // .WithHeaders(Headers)
143181 .GetAsync(cancellationToken: token);
144182
145- var resData = await res2 . GetStreamAsync ( ) ;
183+ var resData = await res2.GetStreamAsync();*/
184+ var str = await res . GetStringAsync ( ) ;
185+
186+ var resData = await res . GetStreamAsync ( ) ;
146187
147188 var parser = new HtmlParser ( new HtmlParserOptions ( )
148189 {
@@ -159,32 +200,6 @@ protected override async Task<IDocument> GetDocumentAsync(SearchResult sr, Searc
159200 return doc ;
160201 }
161202
162- private Task < IFlurlResponse > SearchFileAsync ( SearchQuery query , CancellationToken token )
163- {
164- string endpoint ;
165- string filename ;
166- UniImageFile uif = query . Source as UniImageFile ;
167- Task < IFlurlResponse > req ;
168- endpoint = "v3/upload" ;
169-
170- // filename = "image.jpg";
171- // filename = (query.Source is UniImageFile uif) ? uif.FileInfo.Name : "image.jpg";
172- filename = uif . FileInfo . Name ;
173-
174- req = Client . Request ( EndpointUrl , endpoint )
175- . SetQueryParam ( "hl" , HlParam )
176- . WithTimeout ( Timeout )
177- . WithCookie ( Nid . Name , Nid . Value )
178- . WithHeaders ( Headers )
179- . PostMultipartAsync ( bc =>
180- {
181- //
182- bc . AddFile ( filename , uif . FilePath ) ;
183- } , cancellationToken : token ) ;
184-
185- return req ;
186- }
187-
188203 private Task < IFlurlResponse > SearchUrlAsync ( SearchQuery query , CancellationToken token )
189204 {
190205 return SearchUrlAsync ( query . Upload , token ) ;
@@ -196,13 +211,14 @@ private Task<IFlurlResponse> SearchUrlAsync(Url url, CancellationToken token)
196211 Task < IFlurlResponse > req ;
197212 endpoint = "uploadbyurl" ;
198213
199- req = Client . Request ( EndpointUrl , endpoint )
214+ var req1 = Client . Request ( EndpointUrl , endpoint )
200215 . SetQueryParam ( "hl" , HlParam )
201216 . SetQueryParam ( "url" , url )
202217 . WithCookie ( Nid . Name , Nid . Value )
203218 . WithHeaders ( Headers )
204- . WithTimeout ( Timeout )
205- . GetAsync ( cancellationToken : token ) ;
219+ . WithTimeout ( Timeout ) ;
220+
221+ req = req1 . GetAsync ( cancellationToken : token ) ;
206222
207223 // var sz = await (await req).GetStringAsync();
208224
@@ -245,7 +261,7 @@ public async ValueTask<bool> ApplyCookiesAsync(CancellationToken token = default
245261 public ValueTask < bool > ApplyConfigAsync ( SearchConfig cfg , CancellationToken ct = default )
246262 {
247263 Provider = cfg . CookiesProvider ;
248-
264+
249265 return ApplyCookiesAsync ( ct ) ;
250266 }
251267
0 commit comments