.NET agile and extensible web searching API. Built with AngleSharp.
PickAll is primarily designed to collect a limited amount of results (possibly the more relavant) from different sources and process these in a chain of steps. Results are essentially URLs and descriptions, but more data can be handled.
Documentation is available in the project wiki.
- .NET Standard 2.0
- .NET Core 3.1
- .NET 5.0
$ dotnet add package PickAll --version 1.3.1
Determining projects to restore...
...
# clone the repository
$ git clone https://github.com/gsscoder/pickall.git
# build the package
$ cd pickall/src/PickAll
$ dotnet build -c release
# execute sample
$ cd pickall/samples/PickAll.Sample
$ dotnet build -c release
$ cd ../../artifacts/PickAll.Sample/Release/netcoreapp3.0/PickAll.Sample
./PickAll.Sample "Steve Jobs" -e bing:duckduckgo
Searching 'Steve Jobs' ...
[0] Bing: "Steve Jobs - Wikipedia": "https://it.wikipedia.org/wiki/Steve_Jobs"
[0] DuckDuckGo: "Steve Jobs - Wikipedia": "https://en.wikipedia.org/wiki/Steve_Jobs"
[1] DuckDuckGo: "Steve Jobs - Apple, Family & Death - Biography": "https://www.biography.com/business-figure/steve-jobs"
[2] Bing: "CC-BY-SA licenza": "http://creativecommons.org/licenses/by-sa/3.0/"
[2] DuckDuckGo: "Steve Jobs - IMDb": "https://www.imdb.com/name/nm0423418/"
[3] Bing: "Biografia di Steve Jobs - Biografieonline": "https://biografieonline.it/biografia.htm?BioID=1560&biografia=Steve+Jobs"
# change to tests directory
$ cd pickall/tests/PickAll.Specs
# build with debug configuration
$ dotnet build -c debug
...
# execute tests
$ dotnet test
...
CSharp:
using PickAll;
var context = new SearchContext()
.WithEvents()
.With<Google>() // search on google.com
.With<Yahoo>() // search on yahoo.com
.With<Uniqueness>() // remove duplicates
.With<Order>() // prioritize results
// match Levenshtein distance with maximum of 15
.With<FuzzyMatch>(new FuzzyMatchSettings { Text = "mechanics", MaximumDistance = 15 });
// repeat a search using more frequent words of previous results
.With<Improve>(new ImproveSettings { WordCount = 2, NoiseLength = 3 })
// scrape result pages and extract all text
.With<Textify>(new TextifySettings { IncludeTitle = true, NoiseLength = 3 });
// attach events
context.ResultCreated += (sender, e) => Console.WriteLine($"Result created from {e.Result.Originator}");
// execute services (order of addition)
var results = await context.SearchAsync("quantum physics");
// do anything you need with LINQ
var scientific = results.Where(result => result.Url.Contains("wikipedia"));
foreach (var result in scientific) {
Console.WriteLine($"{result.Url} {result.Description}");
}
FSharp:
let context = new SearchContext(typeof<Google>,
typeof<DuckDuckGo>,
typeof<Yahoo>)
let results = context.SearchAsync("quantum physics")
|> Async.AwaitTask
|> Async.RunSynchronously
results |> Seq.iter (fun x -> printfn "%s %s" x.Url x.Description)
- Search Engine icon designed by Vectors Market from The Noun Project.