44using AngleSharp ;
55using AngleSharp . Css . Values ;
66using AngleSharp . Dom ;
7+ using AngleSharp . Html . Dom ;
78using AngleSharp . Html . Parser ;
9+ using AngleSharp . XPath ;
810using Flurl . Http ;
911using Kantan . Net . Utilities ;
12+ using Kantan . Net . Web ;
13+ using SmartImage . Lib . Cookies ;
1014using SmartImage . Lib . Images . Uni ;
1115using SmartImage . Lib . Results ;
16+ using SmartImage . Lib . Results . Data ;
1217
1318namespace SmartImage . Lib . Engines . Impl . Search ;
1419
15- public class GoogleLensEngine : WebSearchEngine , IEndpointEngine
20+ public class GoogleLensItem { }
21+
22+ public class GoogleLensEngine : WebSearchEngine , IEndpointEngine /*, ICookiesEngine*/
1623{
1724
1825 // TODO: WIP
@@ -31,10 +38,10 @@ public class GoogleLensEngine : WebSearchEngine, IEndpointEngine
3138
3239 public GoogleLensEngine ( ) : base ( URL_BASE ) { }
3340
34- public static readonly string [ ] SearchTypes = [ "all" , "products" , "visual_matches" , "exact_matches" ] ;
35-
3641 public FlurlCookie Nid { get ; set ; }
3742
43+ public static readonly string [ ] SearchTypes = [ "all" , "products" , "visual_matches" , "exact_matches" ] ;
44+
3845 public string HlParam { get ; set ; } = "en-US" ;
3946
4047 public string SearchType { get ; set ; } = SearchTypes [ 0 ] ;
@@ -49,12 +56,25 @@ public GoogleLensEngine() : base(URL_BASE) { }
4956
5057 protected override async ValueTask < SearchResultItem > ParseResultItem ( INode n , SearchResult r )
5158 {
52- throw new NotImplementedException ( ) ;
59+
60+ if ( n is IHtmlElement e ) {
61+ var title = e . QuerySelector ( ".Yt787" ) ? . TextContent ;
62+ //e.QuerySelector("//*[class*='gdOPf q07dbf uhHOwf ez24Df']");
63+ var siteName = e . SelectNodes ( "//*[contains(@class,'gdOPf')]" ) ;
64+
65+ }
66+ var sri = new SearchResultItem ( r )
67+ {
68+
69+ } ;
70+
71+ return sri ;
5372 }
5473
5574 public override async Task < SearchResult > GetResultAsync ( SearchQuery query , CancellationToken token = default )
5675 {
57- return await base . GetResultAsync ( query , token ) ;
76+ var br = await base . GetResultAsync ( query , token ) ;
77+ return br ;
5878 }
5979
6080 protected override async Task < IDocument > GetDocumentAsync ( SearchResult sr , SearchQuery query , CancellationToken token = default )
@@ -63,15 +83,11 @@ protected override async Task<IDocument> GetDocumentAsync(SearchResult sr, Searc
6383 Task < IFlurlResponse > req ;
6484 IFlurlResponse res ;
6585
66- /*if (query.Source.IsFile) {
67- req = SearchFile(query, token);
68- }
69- else if (query.Source.IsUri) {
70- req = SearchUrl(query, token);
71- }
86+ if ( query . Source . IsFile ) { }
87+ else if ( query . Source . IsUri ) { }
7288 else {
7389 return null ;
74- }*/
90+ }
7591
7692 req = SearchUrlAsync ( query , token ) ;
7793
@@ -82,21 +98,22 @@ protected override async Task<IDocument> GetDocumentAsync(SearchResult sr, Searc
8298
8399 var res2 = await Client . Request ( url )
84100 . WithTimeout ( Timeout )
85- // .WithHeaders(Headers)
86101 . WithCookie ( Nid . Name , Nid . Value )
102+
103+ // .WithHeaders(Headers)
87104 . GetAsync ( cancellationToken : token ) ;
88105
89106 var resData = await res2 . GetStringAsync ( ) ;
90107
91108 var parser = new HtmlParser ( new HtmlParserOptions ( )
92109 {
93- IsScripting = true ,
94- IsStrictMode = false ,
95- IsAcceptingCustomElementsEverywhere = true ,
96- IsEmbedded = true
110+ IsScripting = true ,
111+ IsStrictMode = false ,
112+ IsAcceptingCustomElementsEverywhere = true ,
113+ IsEmbedded = true
97114 } ) ;
98115
99- var doc = await parser . ParseDocumentAsync ( resData ) ;
116+ var doc = await parser . ParseDocumentAsync ( resData ) ;
100117
101118 // BrowsingContext.New(Configuration.Default.WithCookies().WithCss());
102119
@@ -147,12 +164,16 @@ private Task<IFlurlResponse> SearchUrlAsync(Url url, CancellationToken token)
147164 . WithHeaders ( Headers )
148165 . WithTimeout ( Timeout )
149166 . GetAsync ( cancellationToken : token ) ;
167+
168+ // var sz = await (await req).GetStringAsync();
169+
150170 return req ;
151171 }
152172
153- protected override async ValueTask < List < INode > > GetNodes ( IDocument d )
173+ protected override ValueTask < List < INode > > GetNodes ( IDocument d )
154174 {
155- return await base . GetNodes ( d ) ;
175+ var all = d . QuerySelectorAll ( ".LBcIee" ) ;
176+ return ValueTask . FromResult ( all . OfType < INode > ( ) . ToList ( ) ) ;
156177 }
157178
158179 protected override Url GetRawUrl ( SearchQuery query )
0 commit comments