84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
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("can’t 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,
|
||
|
||
}
|
||
*/
|