// 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, } } }) }