2014-12-03 36 views
0

你好办法。我没有兴趣发布这个或试图成为参与者或严重的机器人,也许只是对我想要一次又一次流过的朋友发挥恶作剧。现在,据说我可以继续使用它。抽搐查看次数重置之前每个人都得到所有的工作了超过viewbot我想说它只是一个有趣的项目,我只是想尝试一下,看看它是否会实际工作,并沿学习的东西拿走机器人

我写的建立抽动观众令牌,然后再开始将它们连接的地方,我相信抽搐计数它查看基本程序。当我击中10个机器人时,这是一件奇怪的事情,它将观众人数重置为权责发生的真实观众。我的问题是它是如何弄清楚的。我想说明我正在使用代理进行连接,因此twitch认为这些观众来自世界各地,而不是来自单一地点。
有,我已经尝试另一种方式,它是建立了所有观众的令牌,然后,而不是像上面在那里我得到一个视图令牌,并立即将其发送我建立它们加起来基础上,代理然后在给他们所有同时,这通常会超过10位观众人数上限,但不会过多,但不会重设回应计观众人数。

这是建立令牌代码:(有点乱,所以我会回答这个问题需要回答任何有关它的问题)

ASIHTTPRequest *request43 = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://api.twitch.tv/api/channels/%@/access_token?as3=t",_twitchName]]]; 
     [request43 setProxyHost:host]; 
     [request43 setProxyPort:port]; 
[request43 addRequestHeader:@"Host" value:@"api.twitch.tv"]; 
[request43 addRequestHeader:@"User-Agent" value:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko/20100101 Firefox/33.0"]; 
[request43 addRequestHeader:@"Accept" value:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]; 
[request43 addRequestHeader:@"Accept-Language" value:@"en-US,en;q=0.5"]; 
[request43 addRequestHeader:@"Accept-Encoding" value:@"gzip, deflate"]; 
[request43 addRequestHeader:@"Referer" value:@"http://www-cdn.jtvnw.net/swflibs/TwitchPlayer.rc356cd0c16b6941b7f81b61f6c81628e0af555d9.swf"]; 
[request43 addRequestHeader:@"Cookie" value:@" __qca=P0-1674306474-1405279259134; __utma=165406266.651051162.1405279260.1417284372.1417380722.33; __utmz=165406266.1411832471.26.8.utmcsr=twitch.tv|utmccn=(referral)|utmcmd=referral|utmcct=/nozux; language=en-us; __gads=ID=bc1b6635a26dc0a7:T=1405279267:S=ALNI_MY1rrxM6Qf6aS_lUCRlff0o0gtUaA; unique_id=e8ba8f001f90b6bc293ab6e79ea0b1bb; __utmc=165406266; feature_bucket=88; _twitch_session_id=c06f09efe4c36c8ea46176deabab0cb5; __utmb=165406266.0.10.1417380722; mp_809576468572134f909dffa6bd0dcfcf_mixpanel=%7B%22distinct_id%22%3A%20%22147312bcdb989-0fc383a2c86945-41652d42-13c680-147312bcdba176%22%2C%22%24initial_referrer%22%3A%20%22http%3A%2F%2Fintl.gg%2F%22%2C%22%24initial_referring_domain%22%3A%20%22intl.gg%22%7D"]; 
[request43 addRequestHeader:@"Connection" value:@"keep-alive"]; 
[request43 addRequestHeader:@"If-None-Match" value:@"11b92749f327a27cb4ebfb8b57f12b15"]; 
[request43 addRequestHeader:@"Cache control" value:@"no-cache"]; 
     [request43 setTimeOutSeconds:10]; 
     [request43 setFailedBlock:^{ 
      NSLog(@"failed 1st"); 
      NSLog(@"%@",request43.error); 
     }]; 
     [request43 setCompletionBlock:^{ 

      NSError *error; 
      NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:request43.responseData options:0 error:&error]; 
      NSString *token = [[jsonDic valueForKey:@"token"] stringByAddingPercentEscapesUsingEncoding: 
           NSASCIIStringEncoding]; 

      NSString *sig = [jsonDic valueForKey:@"sig"]; 
      NSLog(@"%@",jsonDic); 

      ASIHTTPRequest *request44 = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://usher.twitch.tv/api/channel/hls/%@.m3u8?token=%@&p=4753325&player=twitchweb&sig=%@&segment_preference=4",_twitchName,token,sig]]]; 
      ////http//usher.twitch.tv/api/channel/hls/%@.m3u8?token=%@&p=4753325&player=twitchweb&sig=%@&segment_preference=4 
          [request44 addRequestHeader:@"Host" value:@"usher.twitch.tv"]; 
      [request44 addRequestHeader:@"User-Agent" value:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko/20100101 Firefox/33.0"]; 
      [request44 addRequestHeader:@"Accept" value:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]; 
      [request44 addRequestHeader:@"Accept-Language" value:@"en-US,en;q=0.5"]; 
      [request44 addRequestHeader:@"Accept-Encoding" value:@"gzip, deflate"]; 
      [request44 addRequestHeader:@"Referer" value:@"http://www-cdn.jtvnw.net/swflibs/TwitchPlayer.rc356cd0c16b6941b7f81b61f6c81628e0af555d9.swf"]; 
      [request44 addRequestHeader:@"Cookie" value:@" __qca=P0-1674306474-1405279259134; __utma=165406266.651051162.1405279260.1417284372.1417380722.33; __utmz=165406266.1411832471.26.8.utmcsr=twitch.tv|utmccn=(referral)|utmcmd=referral|utmcct=/nozux; language=en-us; __gads=ID=bc1b6635a26dc0a7:T=1405279267:S=ALNI_MY1rrxM6Qf6aS_lUCRlff0o0gtUaA; unique_id=e8ba8f001f90b6bc293ab6e79ea0b1bb; __utmc=165406266; feature_bucket=88; _twitch_session_id=c06f09efe4c36c8ea46176deabab0cb5; __utmb=165406266.0.10.1417380722; mp_809576468572134f909dffa6bd0dcfcf_mixpanel=%7B%22distinct_id%22%3A%20%22147312bcdb989-0fc383a2c86945-41652d42-13c680-147312bcdba176%22%2C%22%24initial_referrer%22%3A%20%22http%3A%2F%2Fintl.gg%2F%22%2C%22%24initial_referring_domain%22%3A%20%22intl.gg%22%7D"]; 
      [request44 addRequestHeader:@"Connection" value:@"keep-alive"]; 
      [request44 addRequestHeader:@"Cache control" value:@"no-cache"]; 
      [request44 setProxyHost:host]; 
      [request44 setProxyPort:port]; 
      [request44 setFailedBlock:^{ 
       NSLog(@"failed 2st"); 
       NSLog(@"%@",request44.error); 
      }]; 
      [request44 setCompletionBlock:^{ 

       // NSLog(@"%@",[[NSString alloc] initWithData:request44.responseData encoding:NSUTF8StringEncoding]); 

       NSString *urls = [[NSString alloc] initWithData:request44.responseData encoding:NSUTF8StringEncoding]; 
       // NSLog(@"%@",urls); 
       NSArray *urlArray = [urls componentsSeparatedByString:@"http://"]; 
       NSLog(@"%@",urlArray); 

       if (urlArray.count < 2) { 
        return; 
       } 

       NSString *url = [NSString stringWithFormat:@"http://%@",[[[urlArray objectAtIndex:1] componentsSeparatedByString:@"\n"] objectAtIndex:0]]; 

       //NSString *url = [[NSString stringWithFormat:@"http://%@",[urlArray lastObject]] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
       NSLog(@"%@",url); 
       if ([url rangeOfString:@"video"].location != NSNotFound) { 
        NSLog(@"%@",url); 
        ASIHTTPRequest *final = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:url]]; 


        [final setProxyHost:host]; 
        [final setProxyPort:port]; 
        [final addRequestHeader:@"Cache control" value:@"no-cache"]; 
        [final addRequestHeader:@"Host" value:@"video11.iad02.hls.twitch.tv"]; 
        [final addRequestHeader:@"User-Agent" value:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko/20100101 Firefox/33.0"]; 
        [final addRequestHeader:@"Accept" value:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]; 
        [final addRequestHeader:@"Accept-Language" value:@"en-US,en;q=0.5"]; 
        [final addRequestHeader:@"Accept-Encoding" value:@"gzip, deflate"]; 
        [final addRequestHeader:@"Referer" value:@"http://www-cdn.jtvnw.net/swflibs/TwitchPlayer.rc356cd0c16b6941b7f81b61f6c81628e0af555d9.swf"]; 
        [final addRequestHeader:@"Cookie" value:@"__qca=P0-1674306474-1405279259134; __utma=165406266.651051162.1405279260.1417284372.1417380722.33; __utmz=165406266.1411832471.26.8.utmcsr=twitch.tv|utmccn=(referral)|utmcmd=referral|utmcct=/nozux; language=en-us; __gads=ID=bc1b6635a26dc0a7:T=1405279267:S=ALNI_MY1rrxM6Qf6aS_lUCRlff0o0gtUaA; unique_id=e8ba8f001f90b6bc293ab6e79ea0b1bb; __utmc=165406266; feature_bucket=88; _twitch_session_id=c06f09efe4c36c8ea46176deabab0cb5; __utmb=165406266.0.10.1417380722; mp_809576468572134f909dffa6bd0dcfcf_mixpanel=%7B%22distinct_id%22%3A%20%22147312bcdb989-0fc383a2c86945-41652d42-13c680-147312bcdba176%22%2C%22%24initial_referrer%22%3A%20%22http%3A%2F%2Fintl.gg%2F%22%2C%22%24initial_referring_domain%22%3A%20%22intl.gg%22%7D"]; 
        [final addRequestHeader:@"Connection" value:@"keep-alive"]; 
        [final setFailedBlock:^{ 
         NSLog(@"final failed"); 
        }]; 
        [final setCompletionBlock:^{ 


         if ([final.responseString rangeOfString:@"#EXT-X-MEDIA-SEQUENCE"].location != NSNotFound) { 
          [self.builtRequests addObject:final]; 
          if (proxyDictonary) { 
           [self.SuccessProxies addObject:proxyDictonary]; 
          } 

          [self sendRequest:final]; 
          NSLog(@"%lu",_builtRequests.count); 
         } else { 
          NSLog(@"%@",final.responseHeaders); 
          NSLog(@"%@",final.responseString); 
         } 


        }]; 

        [final startAsynchronous]; 

       } 


      }]; 
      [request44 startAsynchronous]; 

     }]; 
     [request43 startAsynchronous]; 

下面是我的代码的响应头时的连接是成功:

Request43:"Accept-Ranges" = bytes; 
Age = 0; 
"Cache-Control" = "max-age=0, private, must-revalidate"; 
Connection = "keep-alive"; 
"Content-Encoding" = gzip; 
"Content-Length" = 231; 
"Content-Type" = "application/json; charset=utf-8"; 
Date = "Wed, 03 Dec 2014 20:51:39 GMT"; 
Etag = "\"151bb8422eb29f9f33a520ab352f152e\""; 
"Front-End-Https" = on; 
Server = nginx; 
Status = "200 OK"; 
Vary = "Accept-Encoding"; 
Via = "1.1 varnish"; 
"Www-Authenticate" = "OAuth realm='TwitchTV'"; 
"X-API-Version" = 3; 
"X-Frame-Options" = SAMEORIGIN; 
"X-MH-Cache" = "appcache2; M"; 
"X-Request-Id" = 7939f63c1e3130c43a4edfc9a0911629; 
"X-Runtime" = "0.030651"; 
"X-UA-Compatible" = "IE=Edge,chrome=1"; 
"X-Varnish" = 1041100800; 

Request44:Connection = "keep-alive"; 
"Content-Length" = 2268; 
"Content-Type" = "application/vnd.apple.mpegurl"; 
Date = "Wed, 03 Dec 2014 20:52:44 GMT"; 
Server = nginx; 
Via = "usher25:8933"; 
"X-Cache" = "MISS from CLONWLPROX1"; 
"X-Cache-Lookup" = "MISS from CLONWLPROX1:9999"; 
final:"Accept-Ranges" = bytes; 
"Access-Control-Allow-Origin" = "https://secure.twitch.tv"; 
Age = 1; 
"Cache-Control" = "no-cache, no-store, private"; 
Connection = "keep-alive"; 
"Content-Length" = 351; 
"Content-Type" = "application/vnd.apple.mpegurl; charset=utf-8"; 
Date = "Wed, 03 Dec 2014 20:57:56 GMT"; 
Expires = "Wed, 03 Dec 2014 20:57:55 GMT"; 
"Last-Modified" = "Wed, 03 Dec 2014 20:57:53 GMT"; 
Server = nginx; 
Via = "1.1 CLONWLPROX1 (squid/3.3.8)"; 
"X-Cache" = "MISS from CLONWLPROX1"; 
"X-Cache-Lookup" = "MISS from CLONWLPROX1:9999"; 

以下是来自Firefox的响应标题,当我通过浏览器访问流时。

request44:Accept-Ranges:bytes 

年龄:0 缓存控制:最大年龄= 0,民营,必重新验证 连接:保活 内容编码:gzip 的Content-Length:230 内容类型:应用程序/ JSON;字符集= UTF-8 日期:周三,2014年12月3日21时07分44秒GMT 的ETag: “74252dca9d2cf4e5da6f91f0d9fcc6c0” 前端-HTTPS: 服务器:nginx的 状态:200 OK 有所不同:接受编码 通过:1.1 varnish WWW-Authenticate:OAuth realm ='TwitchTV' X-API-Version:3 X-Frame-Options:SAMEORIGIN X-MH-Cache:appcache2;中号 X - 请求-ID:13c6dbe385ebb778b21596eadb83f4bc X-运行时间:0.060941 X-UA-兼容:IE =边沿,铬= 1 X-清漆:1048532873

request44:Connection:keep-alive 

内容长度:2252 内容 - 类型:application/vnd.apple.mpegurl 日期:周三,2014年12月3日21时07分44秒GMT 服务器:nginx 通过:usher16:8947

final:Accept-Ranges:bytes 

访问控制允许来源:https://secure.twitch.tv Age:0 Cache-Control:no-cache,no-store,private Connection:keep-alive Content-Length:351 Content-Type:application/vnd.apple。mpegurl;字符集= UTF-8 日期:周三,2014年12月3日21时07分46秒GMT 到期日:周三,2014年12月3日21时07分47秒GMT 保持活动:超时= 50 的Last-Modified:周三,12月03日2014 21:07:42 GMT 服务器:nginx

+0

它的文字墙对不起,关于那个试图阅读它,但感谢您的帮助! – Charlie 2014-12-03 21:13:36

回答

2

您正在运行Twitch的反viewbot代码。没有人能够证明它是如何工作的。他们根本没有谈论过它。它似乎是有气质的。有时它工作得很好,有时候它似乎只做了一半的工作。有些人认为他们在检测机器人时将结果随机化,以混淆机器人作家。显然Twitch有太多时间。

+0

哇,这是令人印象深刻的,但必须有一种方法来欺骗。如果我们看twitter bot检测器,viewbotting依然存在。 – Charlie 2014-12-04 16:46:10

+0

微博机器人检测聊天和观看人数之间的差异。他们不了解头版上的频道。或嵌入其他网站的频道。 – 2014-12-04 18:34:10

+0

该死的。他们确实做了很好的工作来阻止视频。至少我有几次启动我的朋友到4k ppl可能应该告诉他现在哈哈。 – Charlie 2014-12-04 20:46:37

相关问题