Files
psalms/internal/fetcher/fetchhtml.go
2026-03-24 18:39:59 +01:00

84 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import(
"log"
"net/http"
"github.com/PuerkitoBio/goquery"
"strconv"
"strings"
)
type chapter struct{
verses []string
}
type book struct{
chapters []chapter
}
func fetchChapter(book, searchedChapter, version string) (chapter, error){
url := "https://www.biblegateway.com/passage/?search=" + book + "%20" + searchedChapter +"&version=" + version
res, err := http.Get(url)
if err != nil {
log.Printf("cant get %s : %v\n", url, err)
return chapter{}, err
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
log.Printf("error code %v: %v\n", res.StatusCode, res.Status)
return chapter{}, err
}
doc, err := goquery.NewDocumentFromReader(res.Body)
if err != nil {
log.Printf("error reading the http response: %v\n", err)
return chapter{}, err
}
chapterText := chapter{}
replacer := strings.NewReplacer(
"L'Éternel", "YAHWEH",
"l'Éternel", "YAHWEH",
"Éternel", "YAHWEH",
)
doc.Find(".verse > span").Each(func(i int, s *goquery.Selection){
/**********************************************************************************/
/**** verses are marked by an .verse class. Inside the text is in a span and *****/
/**** begin either by the chapter number (first verse), or by the verse *****/
/**** (the other verses). With that the code is straight forward. *****/
/**********************************************************************************/
rawText := s.Text()
verse:= ""
if i == 0 {
verse, _ = strings.CutPrefix(rawText, searchedChapter )
}else{
verse, _ = strings.CutPrefix(rawText, strconv.Itoa(i+1))
}
verse = replacer.Replace(verse)
chapterText.verses = append(chapterText.verses, strings.TrimSpace(verse))
})
return chapterText, nil
}
/*
func fecthBook (book, version string, chapterNumbers int) book, error{
failedChapter := 0
bookChapters := book{}
for i:= 1 ; i > chapterNumbers ; i++{
verses, err := fetchChapter(book, strconv.Itoa(i), version)
if err != nil {
failedChapter++
log.Printf("%s", err)
continue
}
book.chapters = append(book,
}
*/