1
uploader_tools/internal/services/fetcher/parser.go

123 lines
3.0 KiB
Go
Raw Normal View History

// NNM-Club torrent files mass downloader
// Created for Uploaders group
// Copyright (c) 2012-2022 Vladimir "fat0troll" Hodakov
package fetcher
import (
"strings"
"time"
"github.com/PuerkitoBio/goquery"
)
var (
// I haven't found internal solution in stdlib
russianMonths = map[string]string{
"Янв": "Jan",
"Фев": "Feb",
"Мар": "Mar",
"Апр": "Apr",
"Май": "May",
"Июн": "Jun",
"Июл": "Jul",
"Авг": "Aug",
"Сен": "Sep",
"Окт": "Oct",
"Ноя": "Nov",
"Дек": "Dec",
}
)
// checkLoginness checks if downloaded page belongs to user
func checkLoginness(querier *goquery.Document) bool {
authorized := false
2020-02-22 18:33:33 +04:00
querier.Find(".mainmenu").Each(func(i int, sel *goquery.Selection) {
if strings.Contains(sel.Text(), "Выход") {
if strings.Contains(sel.Text(), c.Config.Username) {
authorized = true
}
}
})
2020-02-22 18:33:33 +04:00
return authorized
}
func getDownloadLink(querier *goquery.Document) string {
var downloadLink string
2020-02-22 18:33:33 +04:00
querier.Find("a[rel=nofollow]").Each(func(i int, sel *goquery.Selection) {
if strings.Contains(sel.Text(), "Скачать") {
href, _ := sel.Attr("href")
downloadLink = href
}
})
return downloadLink
}
func getForumName(querier *goquery.Document) string {
return querier.Find("h1").First().Text()
}
func getLastModeratedDate(querier *goquery.Document) string {
var dateValue time.Time
var err error
2020-02-22 18:33:33 +04:00
haveDate := false
2020-02-22 18:33:33 +04:00
querier.Find("table.btTbl td.genmed").Each(func(i int, sel *goquery.Selection) {
if strings.Contains(sel.Text(), "модератором") {
date := strings.TrimPrefix(sel.Text(), " Оформление проверено модератором ")
// Fix russian months names
for i := range russianMonths {
date = strings.Replace(date, i, russianMonths[i], -1)
}
dateValue, err = time.Parse("02 Jan 2006 15:04:05", date)
if err != nil {
dlog.Error().Err(err).Str("строка поиска даты", sel.Text()).
Msg("Не удалось получить дату проверки торрента")
} else {
haveDate = true
}
}
})
if !haveDate {
return ""
}
return dateValue.Format("2006-01-02")
}
func getTopics(querier *goquery.Document) {
querier.Find(".forumline tr").Each(func(i int, sel *goquery.Selection) {
if strings.Contains(sel.Text(), "DL:") {
link := sel.Find("h2 a")
topicName := link.Text()
href, _ := link.Attr("href")
href = "https://" + c.Config.URL + "/forum/" + href
if uberDebug {
dlog.Debug().Str("название", topicName).Str("ссылка", href).Msg("Найден элемент для загрузки")
}
forumTopics[len(forumTopics)] = &forumTopic{
Link: href,
Name: topicName,
}
}
})
}
func isForumPageEmpty(querier *goquery.Document) bool {
isEmpty := false
querier.Find(".forumline tr").Each(func(i int, sel *goquery.Selection) {
if strings.Contains(sel.Text(), "В этом форуме пока нет сообщений") {
isEmpty = true
}
})
return isEmpty
}