Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "io"
- "net/http"
- "os"
- "strings"
- "sync"
- )
- const PREFIX = "https://telegra.ph/"
- var names = []string{"vid"}
- var blacklist = []string{
- "steallers",
- "vpn",
- "proxy",
- "hack",
- "free", "VIP ", "премиум", "приват", "купить", "скачать", "скачать бесплатно",
- "premium", "private", "buy", "download", "download free", "билет", "цена", "стоимость",
- "ticket", "price", "cost",
- "subscribe", "подписка", "подписаться"}
- func main() {
- // names := []string{
- // "nata",
- // "anya",
- // "kata",
- // "lena",
- // "mila",
- // "olya",
- // "vika",
- // "ira",
- // "tanya",
- // "dasha",
- // "sveta",
- // "nastya",
- // }
- printer := make(chan string)
- logger := make(chan string)
- defer close(logger)
- go func() {
- for msg := range logger {
- f, err := os.OpenFile("found.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
- if err != nil {
- fmt.Println(err)
- continue
- }
- if _, err := f.WriteString(msg + "\n"); err != nil {
- fmt.Println(err)
- }
- f.Close()
- }
- }()
- defer close(printer)
- go func() {
- for msg := range printer {
- fmt.Print(msg)
- }
- }()
- wg := &sync.WaitGroup{}
- for _, name := range names {
- for i := 1; i <= 12; i++ {
- for j := 0; j < 31; j++ {
- url := fmt.Sprintf("%s-%02d-%02d", PREFIX+name, i, j)
- wg.Add(1)
- go func(url string) {
- defer wg.Done()
- checkURL(&url, &printer, &logger)
- }(url)
- // printer <- "checking " + url + "\n"
- }
- }
- }
- wg.Wait()
- }
- func checkURL(url *string, printer *chan string, logger *chan string) {
- resp, err := http.Get(*url)
- if err != nil {
- return
- }
- body, err := io.ReadAll(resp.Body)
- if err != nil {
- return
- }
- defer resp.Body.Close()
- bodyStr := string(body)
- for _, word := range blacklist {
- if strings.Contains(strings.ToLower(bodyStr), word) {
- return
- }
- }
- if resp.StatusCode == http.StatusOK {
- // Simple regex-based extraction since we don't want to import a full HTML parser for this snippet
- // Note: In production code, use "golang.org/x/net/html"
- wg := &sync.WaitGroup{}
- // Extract img src
- imgStart := 0
- for {
- idx := strings.Index(bodyStr[imgStart:], "<img src=\"")
- if idx == -1 {
- break
- }
- idx += imgStart
- startQuote := idx + 10 // len("<img src=\"")
- endQuote := strings.Index(bodyStr[startQuote:], "\"")
- if endQuote == -1 {
- break
- }
- endQuote += startQuote
- src := bodyStr[startQuote:endQuote]
- if strings.HasPrefix(src, "/") {
- *logger <- "https://telegra.ph" + src
- }
- imgStart = endQuote
- }
- // Extract video src
- vidStart := 0
- for {
- idx := strings.Index(bodyStr[vidStart:], "<video src=\"")
- if idx == -1 {
- break
- }
- idx += vidStart
- startQuote := idx + 12 // len("<video src=\"")
- endQuote := strings.Index(bodyStr[startQuote:], "\"")
- if endQuote == -1 {
- break
- }
- endQuote += startQuote
- src := bodyStr[startQuote:endQuote]
- if strings.HasPrefix(src, "/") {
- *logger <- "https://telegra.ph" + src
- }
- vidStart = endQuote
- }
- *printer <- fmt.Sprintf("Found: %s\n", *url)
- wg.Wait()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment