1
uploader_tools/domains/fetcher/v1/parser.go

122 lines
3.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.

// NNM-Club torrent filess mass downloader
// Created for Uploaders group
// Copyright (c) 2012-2019 Vladimir "fat0troll" Hodakov
package fetcherv1
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
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
}
}
})
return authorized
}
func getDownloadLink(querier *goquery.Document) string {
var downloadLink string
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
haveDate := false
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 getNavigation(querier *goquery.Document) {
querier.Find("td[align=right] .nav a").Each(func(i int, sel *goquery.Selection) {
if !strings.Contains(sel.Text(), "След") {
href, _ := sel.Attr("href")
forumPagesLinks[sel.Text()] = href
}
})
dlog.Info().Int("количество страниц", len(forumPagesLinks)+1).Msg("Определено количество страниц")
}
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,
}
}
})
}