Skip to content

Commit 32c5fa4

Browse files
committed
Work on Google Lens
1 parent 3570d83 commit 32c5fa4

File tree

1 file changed

+41
-20
lines changed

1 file changed

+41
-20
lines changed

SmartImage.Lib/Engines/Impl/Search/GoogleLensEngine.cs

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,22 @@
44
using AngleSharp;
55
using AngleSharp.Css.Values;
66
using AngleSharp.Dom;
7+
using AngleSharp.Html.Dom;
78
using AngleSharp.Html.Parser;
9+
using AngleSharp.XPath;
810
using Flurl.Http;
911
using Kantan.Net.Utilities;
12+
using Kantan.Net.Web;
13+
using SmartImage.Lib.Cookies;
1014
using SmartImage.Lib.Images.Uni;
1115
using SmartImage.Lib.Results;
16+
using SmartImage.Lib.Results.Data;
1217

1318
namespace 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

Comments
 (0)