Guest User

Parser

a guest
Nov 20th, 2025
962
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.21 KB | Help | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "io"
  6.     "net/http"
  7.     "os"
  8.     "strings"
  9.     "sync"
  10. )
  11.  
  12. const PREFIX = "https://telegra.ph/"
  13.  
  14. var names = []string{"vid"}
  15.  
  16. var blacklist = []string{
  17.     "steallers",
  18.     "vpn",
  19.     "proxy",
  20.     "hack",
  21.     "free", "VIP ", "премиум", "приват", "купить", "скачать", "скачать бесплатно",
  22.     "premium", "private", "buy", "download", "download free", "билет", "цена", "стоимость",
  23.     "ticket", "price", "cost",
  24.     "subscribe", "подписка", "подписаться"}
  25.  
  26. func main() {
  27.     // names := []string{
  28.     //  "nata",
  29.     //  "anya",
  30.     //  "kata",
  31.     //  "lena",
  32.     //  "mila",
  33.     //  "olya",
  34.     //  "vika",
  35.     //  "ira",
  36.     //  "tanya",
  37.     //  "dasha",
  38.     //  "sveta",
  39.     //  "nastya",
  40.     // }
  41.  
  42.     printer := make(chan string)
  43.     logger := make(chan string)
  44.     defer close(logger)
  45.     go func() {
  46.         for msg := range logger {
  47.             f, err := os.OpenFile("found.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
  48.             if err != nil {
  49.                 fmt.Println(err)
  50.                 continue
  51.             }
  52.             if _, err := f.WriteString(msg + "\n"); err != nil {
  53.                 fmt.Println(err)
  54.             }
  55.             f.Close()
  56.         }
  57.     }()
  58.     defer close(printer)
  59.     go func() {
  60.         for msg := range printer {
  61.             fmt.Print(msg)
  62.         }
  63.     }()
  64.  
  65.     wg := &sync.WaitGroup{}
  66.     for _, name := range names {
  67.         for i := 1; i <= 12; i++ {
  68.             for j := 0; j < 31; j++ {
  69.                 url := fmt.Sprintf("%s-%02d-%02d", PREFIX+name, i, j)
  70.                 wg.Add(1)
  71.                 go func(url string) {
  72.                     defer wg.Done()
  73.                     checkURL(&url, &printer, &logger)
  74.                 }(url)
  75.                 // printer <- "checking " + url + "\n"
  76.             }
  77.         }
  78.     }
  79.     wg.Wait()
  80. }
  81.  
  82. func checkURL(url *string, printer *chan string, logger *chan string) {
  83.     resp, err := http.Get(*url)
  84.     if err != nil {
  85.         return
  86.     }
  87.     body, err := io.ReadAll(resp.Body)
  88.     if err != nil {
  89.         return
  90.     }
  91.     defer resp.Body.Close()
  92.  
  93.     bodyStr := string(body)
  94.     for _, word := range blacklist {
  95.         if strings.Contains(strings.ToLower(bodyStr), word) {
  96.             return
  97.         }
  98.     }
  99.  
  100.     if resp.StatusCode == http.StatusOK {
  101.         // Simple regex-based extraction since we don't want to import a full HTML parser for this snippet
  102.         // Note: In production code, use "golang.org/x/net/html"
  103.         wg := &sync.WaitGroup{}
  104.         // Extract img src
  105.         imgStart := 0
  106.         for {
  107.             idx := strings.Index(bodyStr[imgStart:], "<img src=\"")
  108.             if idx == -1 {
  109.                 break
  110.             }
  111.             idx += imgStart
  112.             startQuote := idx + 10 // len("<img src=\"")
  113.             endQuote := strings.Index(bodyStr[startQuote:], "\"")
  114.             if endQuote == -1 {
  115.                 break
  116.             }
  117.             endQuote += startQuote
  118.             src := bodyStr[startQuote:endQuote]
  119.             if strings.HasPrefix(src, "/") {
  120.                 *logger <- "https://telegra.ph" + src
  121.  
  122.             }
  123.             imgStart = endQuote
  124.         }
  125.  
  126.         // Extract video src
  127.         vidStart := 0
  128.         for {
  129.             idx := strings.Index(bodyStr[vidStart:], "<video src=\"")
  130.             if idx == -1 {
  131.                 break
  132.             }
  133.             idx += vidStart
  134.             startQuote := idx + 12 // len("<video src=\"")
  135.             endQuote := strings.Index(bodyStr[startQuote:], "\"")
  136.             if endQuote == -1 {
  137.                 break
  138.             }
  139.             endQuote += startQuote
  140.             src := bodyStr[startQuote:endQuote]
  141.             if strings.HasPrefix(src, "/") {
  142.                 *logger <- "https://telegra.ph" + src
  143.             }
  144.             vidStart = endQuote
  145.         }
  146.         *printer <- fmt.Sprintf("Found: %s\n", *url)
  147.         wg.Wait()
  148.     }
  149. }
  150.  
Advertisement
Add Comment
Please, Sign In to add comment