From f7addef5d65ef55a43e0cb7d94789c6488468228 Mon Sep 17 00:00:00 2001 From: "james.balamuta@gmail.com" Date: Tue, 20 May 2025 02:31:51 -0700 Subject: [PATCH] Kagi & Brave --- DESCRIPTION | 2 +- NAMESPACE | 2 ++ NEWS.md | 5 ++++ R/index-sites.R | 2 ++ R/search-functions.R | 27 ++++++++++++++++++++- README.Rmd | 7 +++++- README.md | 10 +++++--- man/search_site.Rd | 33 ++++++++++++++++++++++---- tests/testthat/test-search-functions.R | 29 ++++++++++++++++++++++ 9 files changed, 107 insertions(+), 10 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 06d3b9b..3fcaf1e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: searcher Title: Query Search Interfaces -Version: 0.0.7 +Version: 0.0.7.2 Authors@R: c( person("James", "Balamuta", email = "balamut2@illinois.edu", diff --git a/NAMESPACE b/NAMESPACE index 9932e1c..b2e3c0f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -16,6 +16,7 @@ export(ask_perplexity) export(search_bb) export(search_bing) export(search_bitbucket) +export(search_brave) export(search_ddg) export(search_duckduckgo) export(search_ecosia) @@ -24,6 +25,7 @@ export(search_github) export(search_google) export(search_grep) export(search_ixquick) +export(search_kagi) export(search_qwant) export(search_rscom) export(search_rseek) diff --git a/NEWS.md b/NEWS.md index 5bd51a4..33d3dcc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -19,6 +19,11 @@ - Added new vignettes: - `search-with-ai-assistants.Rmd`: Overview of the AI Searching Techniques - `managing-ai-prompts.Rmd`: Overview of `searcher`'s AI Prompt Management System +- Added search portals: + - `search_brave()`: Searches on Brave. + ([#42](https://github.com/coatless-rpkg/searcher/pull/42)) + - `search_kagi()`: Searches on Kagi. + ([#42](https://github.com/coatless-rpkg/searcher/pull/42)) - Added searcher logo ([#40](https://github.com/coatless-rpkg/searcher/pull/40)) diff --git a/R/index-sites.R b/R/index-sites.R index 1efc1a8..98c4ba9 100644 --- a/R/index-sites.R +++ b/R/index-sites.R @@ -51,6 +51,8 @@ site_index = site_entry("startpage", "https://startpage.com/do/dsearch?query=", "sp"), site_entry("ecosia", "https://www.ecosia.org/search?q="), site_entry("qwant", "https://www.qwant.com/?q="), + site_entry("brave", "https://search.brave.com/search?q="), + site_entry("kagi", "https://kagi.com/search?q="), site_entry( "stackoverflow", "https://stackoverflow.com/search?q=", diff --git a/R/search-functions.R b/R/search-functions.R index 569646a..c351a05 100644 --- a/R/search-functions.R +++ b/R/search-functions.R @@ -18,7 +18,8 @@ #' @rdname search_site #' @export #' @seealso [search_google()], [search_bing()], [search_duckduckgo()], -#' [search_startpage()], [search_rseek()], [search_qwant()], [search_twitter()], +#' [search_startpage()], [search_rseek()], [search_qwant()], +#' [search_brave()], [search_kagi()], [search_twitter()], #' [search_rstudio_community()], [search_stackoverflow()], #' [search_github()], [search_grep()], [search_bitbucket()], and [searcher()] #' @examples @@ -43,6 +44,9 @@ #' # Search Qwant #' search_qwant("Quarto") #' +#' # Search Brave +#' search_brave("webR") +#' #' # Search RStudio Community #' search_rstudio_community("RStudio IDE") #' @@ -85,6 +89,8 @@ search_site = function(query, "sp", "qwant", "rseek", + "brave", + "kagi", "rstudio community", "rscom", "twitter", @@ -119,6 +125,8 @@ search_site = function(query, sp = search_startpage(query, rlang), qwant = search_qwant(query, rlang), rseek = search_rseek(query, rlang), + brave = search_brave(query, rlang), + kagi = search_kagi(query, rlang), `rstudio community` = , # empty case carried below rscom = search_rstudio_community(query, rlang), twitter = search_twitter(query, rlang), @@ -261,6 +269,23 @@ search_rseek = searcher("rseek") #' Qwant using: `https://www.qwant.com/?q=` search_qwant = searcher("qwant") +#' @rdname search_site +#' @export +#' @section Brave Search: +#' The `search_brave()` function searches +#' Brave using: `https://search.brave.com/search?q=&source=web` +search_brave = searcher("brave") + +#' @rdname search_site +#' @export +#' @section Kagi Search: +#' The `search_kagi()` function searches +#' Kagi using: `https://kagi.com/search?q=` +#' +#' This is a paid search engine, and you will need to +#' sign up for an account to use it. +search_kagi = searcher("kagi") + ########################### End Search Engines diff --git a/README.Rmd b/README.Rmd index b12fd06..fb48a43 100644 --- a/README.Rmd +++ b/README.Rmd @@ -63,7 +63,8 @@ The `search_*()` functions can be used to search a query directly from _R_ on major search engines, programming help websites, and code repositories. The following search platforms are supported: [Google](https://www.google.com), [Bing](https://www.bing.com/), [DuckDuckGo](https://duckduckgo.com/), [Startpage](https://www.startpage.com/en/), -Ecosia, [rseek](https://rseek.org/), Qwant, X (formerly Twitter), [StackOverflow](https://stackoverflow.com/), +Ecosia, [rseek](https://rseek.org/), Qwant, [Brave](https://search.brave.com/), +Kagi, X (formerly Twitter), [StackOverflow](https://stackoverflow.com/), [RStudio Community](https://community.rstudio.com/search), [GitHub](https://github.com/search), [grep.app](https://grep.app/), and [BitBucket](https://bitbucket.org/product/). @@ -78,6 +79,8 @@ search_bing("R project") search_ecosia("R project") search_rseek("R project") search_qwant("R project") +search_brave("R project") +search_kagi("R project") search_duckduckgo("R project") # or search_ddg(...) search_startpage("R project") # or search_sp(...) @@ -178,6 +181,8 @@ search_bing() search_ecosia() search_rseek() search_qwant() +search_brave() +search_kagi() search_twitter() search_grep() search_duckduckgo() # or search_ddg() diff --git a/README.md b/README.md index 13f7e87..b6eca28 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,9 @@ repositories. The following search platforms are supported: [Google](https://www.google.com), [Bing](https://www.bing.com/), [DuckDuckGo](https://duckduckgo.com/), [Startpage](https://www.startpage.com/en/), Ecosia, -[rseek](https://rseek.org/), Qwant, X (formerly Twitter), -[StackOverflow](https://stackoverflow.com/), [RStudio -Community](https://community.rstudio.com/search), +[rseek](https://rseek.org/), Qwant, [Brave](https://search.brave.com/), +Kagi, X (formerly Twitter), [StackOverflow](https://stackoverflow.com/), +[RStudio Community](https://community.rstudio.com/search), [GitHub](https://github.com/search), [grep.app](https://grep.app/), and [BitBucket](https://bitbucket.org/product/). By default, an appropriate suffix for each platform that ensures relevant results to *R* is @@ -74,6 +74,8 @@ search_bing("R project") search_ecosia("R project") search_rseek("R project") search_qwant("R project") +search_brave("R project") +search_kagi("R project") search_duckduckgo("R project") # or search_ddg(...) search_startpage("R project") # or search_sp(...) @@ -177,6 +179,8 @@ search_bing() search_ecosia() search_rseek() search_qwant() +search_brave() +search_kagi() search_twitter() search_grep() search_duckduckgo() # or search_ddg() diff --git a/man/search_site.Rd b/man/search_site.Rd index 4c0f781..dec481e 100644 --- a/man/search_site.Rd +++ b/man/search_site.Rd @@ -12,6 +12,8 @@ \alias{search_ecosia} \alias{search_rseek} \alias{search_qwant} +\alias{search_brave} +\alias{search_kagi} \alias{search_rstudio_community} \alias{search_rscom} \alias{search_twitter} @@ -27,9 +29,9 @@ search_site( query, site = c("google", "bing", "duckduckgo", "ddg", "startpage", "sp", "qwant", "rseek", - "rstudio community", "rscom", "twitter", "stackoverflow", "so", "github", "gh", - "grep", "bitbucket", "bb", "chatgpt", "claude", "perplexity", "mistral", - "bing copilot", "copilot", "meta ai", "meta"), + "brave", "kagi", "rstudio community", "rscom", "twitter", "stackoverflow", "so", + "github", "gh", "grep", "bitbucket", "bb", "chatgpt", "claude", "perplexity", + "mistral", "bing copilot", "copilot", "meta ai", "meta"), rlang = TRUE, prompt = NULL ) @@ -54,6 +56,10 @@ search_rseek(query = geterrmessage(), rlang = TRUE) search_qwant(query = geterrmessage(), rlang = TRUE) +search_brave(query = geterrmessage(), rlang = TRUE) + +search_kagi(query = geterrmessage(), rlang = TRUE) + search_rstudio_community(query = geterrmessage(), rlang = TRUE) search_rscom(query = geterrmessage(), rlang = TRUE) @@ -145,6 +151,21 @@ The \code{search_qwant()} function searches Qwant using: \verb{https://www.qwant.com/?q=} } +\section{Brave Search}{ + +The \code{search_brave()} function searches +Brave using: \verb{https://search.brave.com/search?q=&source=web} +} + +\section{Kagi Search}{ + +The \code{search_kagi()} function searches +Kagi using: \verb{https://kagi.com/search?q=} + +This is a paid search engine, and you will need to +sign up for an account to use it. +} + \section{RStudio Community Search}{ The \code{search_rstudio_community()} and \code{search_rscom()} functions both search @@ -230,6 +251,9 @@ search_rseek("searcher") # Search Qwant search_qwant("Quarto") +# Search Brave +search_brave("webR") + # Search RStudio Community search_rstudio_community("RStudio IDE") @@ -265,7 +289,8 @@ options(error = search_google) } \seealso{ \code{\link[=search_google]{search_google()}}, \code{\link[=search_bing]{search_bing()}}, \code{\link[=search_duckduckgo]{search_duckduckgo()}}, -\code{\link[=search_startpage]{search_startpage()}}, \code{\link[=search_rseek]{search_rseek()}}, \code{\link[=search_qwant]{search_qwant()}}, \code{\link[=search_twitter]{search_twitter()}}, +\code{\link[=search_startpage]{search_startpage()}}, \code{\link[=search_rseek]{search_rseek()}}, \code{\link[=search_qwant]{search_qwant()}}, +\code{\link[=search_brave]{search_brave()}}, \code{\link[=search_kagi]{search_kagi()}}, \code{\link[=search_twitter]{search_twitter()}}, \code{\link[=search_rstudio_community]{search_rstudio_community()}}, \code{\link[=search_stackoverflow]{search_stackoverflow()}}, \code{\link[=search_github]{search_github()}}, \code{\link[=search_grep]{search_grep()}}, \code{\link[=search_bitbucket]{search_bitbucket()}}, and \code{\link[=searcher]{searcher()}} } diff --git a/tests/testthat/test-search-functions.R b/tests/testthat/test-search-functions.R index d53babe..54357fb 100644 --- a/tests/testthat/test-search-functions.R +++ b/tests/testthat/test-search-functions.R @@ -82,6 +82,35 @@ test_that("Check link generation - rseek", { }) + +test_that("Check link generation - Brave", { + + expect_identical( + search_brave("toad"), + "https://search.brave.com/search?q=toad%20r%20programming" + ) + + expect_identical( + search_brave("toad", rlang = FALSE), + "https://search.brave.com/search?q=toad" + ) + +}) + +test_that("Check link generation - kagi", { + + expect_identical( + search_kagi("toad"), + "https://kagi.com/search?q=toad%20r%20programming" + ) + + expect_identical( + search_kagi("toad", rlang = FALSE), + "https://kagi.com/search?q=toad" + ) + +}) + test_that("Check link generation - RStudio Community", { expect_identical(