gemini-search

A simple search engine for Geminispace
git clone git://git.laack.co/gemini-search.git
Log | Files | Refs | README

commit 58680473757236d39a1915352eb170189dcd4fe8
parent 0b14a407c4eec123cb153d3475abb3e16b888b5f
Author: Andrew Laack <andrew@laack.co>
Date:   Tue, 28 Apr 2026 01:39:51 -0500

Scaffolding

Diffstat:
Mmain.go | 56++++++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 46 insertions(+), 10 deletions(-)

diff --git a/main.go b/main.go @@ -3,18 +3,18 @@ package main import ( "fmt" "io" + "os" "strings" + "net/url" "github.com/makeworld-the-better-one/go-gemini" ) -func main() { - resp, err := gemini.Fetch("gemini://laack.co/") +func index(url string) (string, []string) { + resp, err := gemini.Fetch(url) if err != nil { - // TODO: Make this more informative; the lib gives more than this. - fmt.Println(err) - panic("Failed to fetch resource") + panic(err) } bodyBytes, err := io.ReadAll(resp.Body) @@ -22,9 +22,7 @@ func main() { body := string(bodyBytes) if err != nil { - // TODO: Why might this happen? - fmt.Println(err) - panic("Failed to read body") + panic(err) } lines := strings.Split(body, "\n") @@ -52,11 +50,49 @@ func main() { } if strings.Compare(item[:9], "gemini://") == 0 { geminiLinks = append(geminiLinks, item) - fmt.Println(item[:indexOfSpace]) } if strings.Contains(item, "://") == false { geminiLinks = append(geminiLinks, item) - fmt.Println(item[:indexOfSpace]) } } + + return body, geminiLinks + +} + +func main() { + currentUrl := "gemini://tlgs.one/known-hosts" + body, forwardGeminiLinks := index(currentUrl) + + fmt.Println("\n=== Body ===\n") + fmt.Println(body) + fmt.Println("\n=== Body ===\n") + + + fmt.Println("\n=== Links ===\n") + for index, link := range(forwardGeminiLinks) { + fmt.Printf("%d: %s\n", index, link) + } + fmt.Println("\n=== Links ===\n") + + err := os.WriteFile(url.PathEscape(currentUrl), []byte(body), 0644) + + if err != nil { + panic(err) + } + + f, err := os.OpenFile("links.txt", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600) + if err != nil { + panic(err) + } + + defer f.Close() + + for _, link := range forwardGeminiLinks { + if _, err = f.WriteString(link + "\n"); err != nil { + panic(err) + } + } + + }