2019-09-28 19:59:02 +04:00
|
|
|
|
// NNM-Club torrent filess mass downloader
|
|
|
|
|
// Created for Uploaders group
|
|
|
|
|
// Copyright (c) 2012-2019 Vladimir "fat0troll" Hodakov
|
|
|
|
|
|
|
|
|
|
package fetcherv1
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"strings"
|
2019-09-28 22:51:10 +04:00
|
|
|
|
"time"
|
2019-09-28 19:59:02 +04:00
|
|
|
|
|
|
|
|
|
"github.com/PuerkitoBio/goquery"
|
|
|
|
|
)
|
|
|
|
|
|
2019-09-28 22:51:10 +04:00
|
|
|
|
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",
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
2019-09-28 19:59:02 +04:00
|
|
|
|
// checkLoginness checks if downloaded page belongs to user
|
|
|
|
|
func checkLoginness(querier *goquery.Document) bool {
|
|
|
|
|
authorized := false
|
2020-02-22 18:33:33 +04:00
|
|
|
|
|
2019-09-28 19:59:02 +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
|
|
|
|
|
2019-09-28 19:59:02 +04:00
|
|
|
|
return authorized
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-28 22:51:10 +04:00
|
|
|
|
func getDownloadLink(querier *goquery.Document) string {
|
|
|
|
|
var downloadLink string
|
2020-02-22 18:33:33 +04:00
|
|
|
|
|
2019-09-28 22:51:10 +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
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-28 19:59:02 +04:00
|
|
|
|
func getForumName(querier *goquery.Document) string {
|
|
|
|
|
return querier.Find("h1").First().Text()
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-28 22:51:10 +04:00
|
|
|
|
func getLastModeratedDate(querier *goquery.Document) string {
|
|
|
|
|
var dateValue time.Time
|
|
|
|
|
var err error
|
2020-02-22 18:33:33 +04:00
|
|
|
|
|
2019-09-28 22:51:10 +04:00
|
|
|
|
haveDate := false
|
2020-02-22 18:33:33 +04:00
|
|
|
|
|
2019-09-28 22:51:10 +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")
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-28 19:59:02 +04:00
|
|
|
|
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("Определено количество страниц")
|
|
|
|
|
}
|
2019-09-28 22:51:10 +04:00
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|