emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/elisa 1f5a462be4 34/98: Add search duckduckgo function


From: ELPA Syncer
Subject: [elpa] externals/elisa 1f5a462be4 34/98: Add search duckduckgo function
Date: Wed, 17 Jul 2024 18:58:02 -0400 (EDT)

branch: externals/elisa
commit 1f5a462be40cfb2dff23a393b1e0cffc19b5bda0
Author: Sergey Kostyaev <kostyaev.sergey2@wb.ru>
Commit: Sergey Kostyaev <kostyaev.sergey2@wb.ru>

    Add search duckduckgo function
---
 elisa.el | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/elisa.el b/elisa.el
index 53585857f9..20c4a251ed 100644
--- a/elisa.el
+++ b/elisa.el
@@ -48,6 +48,7 @@
 (require 'llm)
 (require 'info)
 (require 'async)
+(require 'dom)
 
 (defcustom elisa-embeddings-provider (progn (require 'llm-ollama)
                                            (make-llm-ollama
@@ -317,6 +318,30 @@ closer it is to 1, the more similar it is."
      (mapcar #'string-trim
             (nreverse result)))))
 
+(defun elisa-search-duckduckgo (prompt)
+  "Search duckduckgo for PROMPT and return list of urls."
+  (let* ((url (format "https://duckduckgo.com/html/?q=%s"; (url-hexify-string 
prompt)))
+        (buffer-name (url-retrieve-synchronously url t)))
+    (with-current-buffer buffer-name
+      (goto-char (point-min))
+      (search-forward "<!DOCTYPE")
+      (beginning-of-line)
+      (cl-remove-if
+       #'string-empty-p
+       (cl-remove-duplicates
+       (mapcar
+        (lambda (el)
+          (when el
+            (string-trim-right
+             (url-unhex-string
+              (cdar (url-parse-args (or (dom-attr el 'href) ""))))
+             "[&\\?].*")))
+        (dom-by-tag
+         (libxml-parse-html-region
+          (point) (point-max))
+         'a))
+       :test 'string-equal)))))
+
 (defun elisa-get-builtin-manuals ()
   "Get builtin manual names list."
   (mapcar



reply via email to

[Prev in Thread] Current Thread [Next in Thread]