]> git.armaanb.net Git - bettersearch.git/commitdiff
Add a distribution framework 0.1
authorArmaan Bhojwani <me@armaanb.net>
Sun, 28 Nov 2021 17:50:40 +0000 (12:50 -0500)
committerArmaan Bhojwani <me@armaanb.net>
Sun, 28 Nov 2021 17:51:01 +0000 (12:51 -0500)
.gitignore [new file with mode: 0644]
Makefile [new file with mode: 0644]
README
TODO
bettersearch.rkt [new file with mode: 0644]
server.rkt [deleted file]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..6b915b1
--- /dev/null
@@ -0,0 +1 @@
+bettersearch
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..15d8f92
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,5 @@
+dist: clean
+       raco exe bettersearch.rkt
+
+clean:
+       rm -rf bettersearch
diff --git a/README b/README
index 88e5c09ea097da61c551296c2707fa113405acd7..ea5d4859f51385c08a8fb40dda2c67c259ccf078 100644 (file)
--- a/README
+++ b/README
@@ -1,3 +1,9 @@
 Web search that sucks a little bit less
 
+Written in racket. Build an executable with 'make' and reverse proxy as you
+wish. Runs on port 8000 by default.
+
+You must set the SEARX_INSTANCE environment variable to a searx instance like
+"https://search.trom.tf".
+
 https://search.armaanb.net
diff --git a/TODO b/TODO
index ad2c40a3259d0e8608e0b386d7fe6432b12a49b0..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1 +0,0 @@
-* Customizeable searx instance
diff --git a/bettersearch.rkt b/bettersearch.rkt
new file mode 100644 (file)
index 0000000..4fc695e
--- /dev/null
@@ -0,0 +1,95 @@
+#lang racket
+
+(require json)
+(require web-server/servlet)
+(require web-server/servlet-env)
+(require web-server/templates)
+
+(require "blacklist.rkt")
+
+(define (member-match? itm lst)
+  (ormap (lambda (i) (regexp-match? (regexp i) itm)) lst))
+
+(define-values (dispatch generate-url)
+  (dispatch-rules
+    [("") do-index]
+    [("search") do-search]
+    ))
+
+(define (do-head title)
+  (include-template "templates/head.html"))
+
+(define (do-footer)
+  (include-template "templates/footer.html"))
+
+(define (do-index req)
+  (http-response (string-append
+                  (do-head "Web Search")
+                  (include-template "templates/index.html")
+                  (do-footer))))
+
+(define (search query pageno)
+  (define engine (string->url
+                  (string-append
+                    (getenv "SEARX_INSTANCE")
+                    "/search?format=json&q="
+                    query
+                    "&pageno="
+                    pageno
+                    )))
+  (define response (get-pure-port engine))
+  (define json-raw (port->string response))
+  (close-input-port response)
+  (with-input-from-string json-raw (lambda () (read-json))))
+
+(define (http-response content)
+  (response/full
+    200
+    #"OK"
+    (current-seconds)
+    TEXT/HTML-MIME-TYPE
+    '()
+    (list
+      (string->bytes/utf-8 content))))
+
+(define (do-search req)
+  (define binds (request-bindings req))
+  (define query (if (exists-binding? 'q binds)
+                 (extract-binding/single 'q binds)
+                 ""))
+
+  (if (non-empty-string? query)
+    (let ()
+      (define pageno (if (exists-binding? 'pageno binds)
+                      (extract-binding/single 'pageno binds)
+                      "1"))
+      (define results
+       (foldr cons '()
+              (filter hash?
+                      (map (lambda (i)
+                             (define result-host
+                               (url-host (string->url
+                                           (hash-ref i 'url ""))))
+                             (define result-url (hash-ref i 'url ""))
+                             (define result-title (hash-ref i 'title ""))
+                             (define result-content (hash-ref i 'content ""))
+                             (define ht (make-hash))
+                             (unless (member-match? result-host blacklist)
+                               (let ()
+                                 (hash-set! ht "title" result-title)
+                                 (hash-set! ht "url" result-url)
+                                 (hash-set! ht "content" result-content)
+                                 )
+                               ht
+                               ))
+                           (hash-ref (search query pageno) 'results)))))
+      (http-response (string-append
+                      (do-head (string-append query " | Web Search"))
+                      (include-template "templates/search.html")
+                      (do-footer))))
+    (redirect-to "/")))
+
+(serve/servlet dispatch
+              #:command-line? #t
+              #:servlet-regexp #rx""
+              #:extra-files-paths (list (build-path "./static")))
diff --git a/server.rkt b/server.rkt
deleted file mode 100644 (file)
index 2b13b6c..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#lang racket
-
-(require json)
-(require web-server/servlet)
-(require web-server/servlet-env)
-(require web-server/templates)
-
-(require "blacklist.rkt")
-
-(define (member-match? itm lst)
-  (ormap (lambda (i) (regexp-match? (regexp i) itm)) lst))
-
-(define-values (dispatch generate-url)
-  (dispatch-rules
-    [("") do-index]
-    [("search") do-search]
-    ))
-
-(define (do-head title)
-  (include-template "templates/head.html"))
-
-(define (do-footer)
-  (include-template "templates/footer.html"))
-
-(define (do-index req)
-  (http-response (string-append
-                  (do-head "Web Search")
-                  (include-template "templates/index.html")
-                  (do-footer))))
-
-(define (search query pageno)
-  (define engine (string->url
-                  (string-append
-                      "https://search.trom.tf/search?format=json&q="
-                      query
-                      "&pageno="
-                      pageno
-                      )))
-  (define response (get-pure-port engine))
-  (define json-raw (port->string response))
-  (close-input-port response)
-  (with-input-from-string json-raw (lambda () (read-json))))
-
-(define (http-response content)
-  (response/full
-    200
-    #"OK"
-    (current-seconds)
-    TEXT/HTML-MIME-TYPE
-    '()
-    (list
-      (string->bytes/utf-8 content))))
-
-(define (do-search req)
-  (define binds (request-bindings req))
-  (define query (if (exists-binding? 'q binds)
-                 (extract-binding/single 'q binds)
-                 ""))
-
-  (if (non-empty-string? query)
-    (let ()
-      (define pageno (if (exists-binding? 'pageno binds)
-                      (extract-binding/single 'pageno binds)
-                      "1"))
-      (define results
-       (foldr cons '()
-              (filter hash?
-              (map (lambda (i)
-                     (define result-host
-                       (url-host (string->url
-                                   (hash-ref i 'url ""))))
-                         (define result-url (hash-ref i 'url ""))
-                         (define result-title (hash-ref i 'title ""))
-                         (define result-content (hash-ref i 'content ""))
-                       (define ht (make-hash))
-                       (unless (member-match? result-host blacklist)
-                         (let ()
-                           (hash-set! ht "title" result-title)
-                           (hash-set! ht "url" result-url)
-                           (hash-set! ht "content" result-content)
-                           )
-                         ht
-                     ))
-                   (hash-ref (search query pageno) 'results)))))
-      (http-response (string-append
-                      (do-head (string-append query " | Web Search"))
-                      (include-template "templates/search.html")
-                      (do-footer))))
-    (redirect-to "/")))
-
-(serve/servlet dispatch
-              #:command-line? #t
-              #:servlet-regexp #rx""
-              #:extra-files-paths (list (build-path "./static")))