static void worker(Object s) { while (true) { try { using (HttpRequest req = new HttpRequest()) { HttpResponse res; Proxy proxy; string url; string urlToGet; string cl; string ei; string of; string vm; lock (locker) { if (proxyType == 0 && scraper.Time < (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds - 300) { scraper.Scrape(); } proxy = scraper.Next(); } switch (proxyType) { case 0: case 1: req.Proxy = proxy.Http; break; case 2: req.Proxy = proxy.Socks4; break; case 3: req.Proxy = proxy.Socks5; break; } req.UserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Mobile/15E148 Safari/604.1"; res = req.Get($"https://m.youtube.com/watch?v={id}"); url = res.ToString().Split(new string[] { "videostatsWatchtimeUrl\\\":{\\\"baseUrl\\\":\\\"" }, StringSplitOptions.None)[1]; url = url.Split(new string[] { "\\\"}" }, StringSplitOptions.None)[0]; url = url.Replace(@"\\u0026", "&").Replace("%2C", ",").Replace(@"\/", "/"); cl = url.Split(new string[] { "cl=" }, StringSplitOptions.None)[1].Split('&')[0]; ei = url.Split(new string[] { "ei=" }, StringSplitOptions.None)[1].Split('&')[0]; of = url.Split(new string[] { "of=" }, StringSplitOptions.None)[1].Split('&')[0]; vm = url.Split(new string[] { "vm=" }, StringSplitOptions.None)[1].Split('&')[0]; urlToGet = $"https://s.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=isWmmj2C9Y2vULKF&docid={id}&ver=2&cmt=7334&ei={ei}&fmt=133&fs=0&rt=1003&of={of}&euri&lact=4418&live=dvr&cl={cl}&state=playing&vm={vm}&volume=100&c=MWEB&cver=2.20200313.03.00&cplayer=UNIPLAYER&cbrand=apple&cbr=Safari%20Mobile&cbrver=12.1.15E148&cmodel=iphone&cos=iPhone&cosver=12_2&cplatform=MOBILE&delay=5&hl=ru&cr=GB&rtn=1303&afmt=140&lio=1556394045.182&idpj=&ldpj=&rti=1003&muted=0&st=7334&et=7634"; req.AddHeader("Referrer", $"https://m.youtube.com/watch?v={id}"); req.Get(urlToGet); lock (loglocker) { botted++; log(); } } } catch (Exception) { lock (locker) { errors++; log(); } } } }
static void worker(Object s) { while (true) { try { using (HttpRequest req = new HttpRequest()) { HttpResponse res; Proxy proxy; string url; string urlToGet; string cl; string ei; string of; string vm; double vol = random.Next(200, 1000) / 10d; proxy = scraper.Next(); switch (proxyType) { case Https: req.Proxy = proxy.Http; break; case Public: case Socks4: req.Proxy = proxy.Socks4; break; case Socks5: req.Proxy = proxy.Socks5; break; } req.UserAgent = UserAgent.Get(); res = req.Get($"https://m.youtube.com/watch?v={id}"); url = url_re.Match(res.ToString()).Groups[1].Value; url = url.Replace(@"\\u0026", "&").Replace("%2C", ",").Replace(@"\/", "/"); cl = cl_re.Match(url).Groups[1].Value; ei = ei_re.Match(url).Groups[1].Value; of = of_re.Match(url).Groups[1].Value; vm = vm_re.Match(url).Groups[1].Value; cl = url.Split(new string[] { "cl=" }, StringSplitOptions.None)[1].Split('&')[0]; ei = url.Split(new string[] { "ei=" }, StringSplitOptions.None)[1].Split('&')[0]; of = url.Split(new string[] { "of=" }, StringSplitOptions.None)[1].Split('&')[0]; vm = url.Split(new string[] { "vm=" }, StringSplitOptions.None)[1].Split('&')[0]; urlToGet = $"https://s.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=isWmmj2C9Y2vULKF&docid={id}&ver=2&cmt=7334&ei={ei}&fmt=133&fs=0&rt=1003&of={of}&euri&lact=4418&live=dvr&cl={cl}&state=playing&vm={vm}&volume={vol}&c=MWEB&cver=2.20200313.03.00&cplayer=UNIPLAYER&cbrand=apple&cbr=Safari%20Mobile&cbrver=12.1.15E148&cmodel=iphone&cos=iPhone&cosver=12_2&cplatform=MOBILE&delay=5&hl=ru&cr=GB&rtn=1303&afmt=140&lio=1556394045.182&idpj=&ldpj=&rti=1003&muted=0&st=7334&et=7634"; req.AddHeader("Referrer", $"https://m.youtube.com/watch?v={id}"); req.AddHeader("Host", "m.youtube.com"); req.AddHeader("Proxy-Connection", "keep-alive"); req.AddHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); req.AddHeader("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7"); req.AddHeader("Accept-Encoding", "gzip, deflate"); req.Get(urlToGet); Interlocked.Increment(ref botted); log(); } } catch { Interlocked.Increment(ref errors); log(); } } }
static void Worker() { Random random = new Random(); while (true) { try { using (HttpRequest req = new HttpRequest()) { HttpResponse res; Proxy proxy; proxy = scraper.Next(); switch (proxyType) { case Https: req.Proxy = proxy.Http; break; case Public: case Socks4: req.Proxy = proxy.Socks4; break; case Socks5: req.Proxy = proxy.Socks5; break; } req.UserAgentRandomize(); res = req.Get($"https://www.youtube.com/watch?v={id}"); string viewersTemp = res.ToString().Split(new[] { "\"viewCount\":{\"videoViewCountRenderer\":{\"viewCount\":{\"runs\":[{\"text\":\"" }, StringSplitOptions.None)[1].Split(':')[1].Split(new[] { "\"}]}," }, StringSplitOptions.None)[0].Trim(); try { int.Parse(viewersTemp.Trim()); viewers = viewersTemp; } catch { } title = res.ToString().Split(new[] { "\"title\":{\"runs\":[{\"text\":\"" }, StringSplitOptions.None)[1].Split(new[] { "\"}]}," }, StringSplitOptions.None)[0].Trim(); string url = res.ToString().Split(new[] { "videostatsWatchtimeUrl\":{\"baseUrl\":\"" }, StringSplitOptions.None)[1].Split('"')[0]; url = url.Replace(@"\u0026", "&").Replace("%2C", ",").Replace(@"\/", "/"); string cl = url.Split(new string[] { "cl=" }, StringSplitOptions.None)[1].Split('&')[0]; string ei = url.Split(new string[] { "ei=" }, StringSplitOptions.None)[1].Split('&')[0]; string of = url.Split(new string[] { "of=" }, StringSplitOptions.None)[1].Split('&')[0]; string vm = url.Split(new string[] { "vm=" }, StringSplitOptions.None)[1].Split('&')[0]; byte[] buffer = new byte[100]; random.NextBytes(buffer); string cpn = Convert.ToBase64String(buffer).Replace("=", "").Replace("/", "").Replace("+", "").Substring(0, 16); int st = random.Next(1000, 10000); int et = st + random.Next(200, 700); int rt = random.Next(10, 200); int lact = random.Next(1000, 8000); int rtn = rt + 300; Dictionary <string, string> args = new Dictionary <string, string>(); args["ns"] = "yt"; args["el"] = "detailpage"; args["cpn"] = cpn.ToString(); args["docid"] = id; args["ver"] = "2"; args["cmt"] = et.ToString(); args["ei"] = ei; args["fmt"] = "243"; args["fs"] = "0"; args["rt"] = rt.ToString(); args["of"] = of; args["euri"] = ""; args["lact"] = lact.ToString(); args["live"] = "dvr"; args["cl"] = cl; args["state"] = "playing"; args["vm"] = vm; args["volume"] = "100"; args["cbr"] = "Firefox"; //TODO: parse from header args["cbrver"] = "83.0"; // ^ args["c"] = "WEB"; args["cplayer"] = "UNIPLAYER"; args["cver"] = "2.20201210.01.00"; args["cos"] = "Windows"; args["cosver"] = "10.0"; args["cplatform"] = "DESKTOP"; args["delay"] = "5"; args["hl"] = "ru_RU"; args["rtn"] = rtn.ToString(); args["aftm"] = "140"; args["lio"] = "1556394045.182"; args["idpj"] = "-5"; args["ldpj"] = "-8"; args["rti"] = rt.ToString(); args["muted"] = "0"; args["st"] = st.ToString(); args["et"] = et.ToString(); string urlToGet = buildUrl(args); req.AddHeader("Referrer", $"https://www.youtube.com/watch?v={id}"); req.AddHeader("Host", "www.youtube.com"); req.AddHeader("Proxy-Connection", "keep-alive"); req.AddHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); req.AddHeader("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7"); req.AddHeader("Accept-Encoding", "gzip, deflate"); res = req.Get(urlToGet); Interlocked.Increment(ref botted); } } catch { Interlocked.Increment(ref errors); } } }