안녕하세요. 모두가 viewbot에서 모든 작업을 끝내기 전에 저는 재미있는 프로젝트를 말하고 싶습니다. 그리고 실제로 작동하는지 확인하고 싶습니다. 방법. 나는 이것을 공개하지 않겠다는 생각이 들지 않거나 진지하게 봇을 쓰는 사람들은 어쩌면 지금 당장 다시 흘러 나오고 싶어하는 내 친구에게 장난을 칠 수도 있습니다. 이제는 그걸로 만날 수있다.twitch view count 봇을 없애기 위해 재설정
트위치 뷰어 토큰을 작성한 다음, 트 위치 카운트로 볼 수있는 곳으로 연결하는 기본 프로그램을 작성했습니다. 여기 내가 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, 개인, 연결-재 검증해야합니다 유지 (keep-alive) 콘텐츠 인코딩 : gzip을에게 콘텐츠 길이 : 230 내용 - 형식 : 응용 프로그램/json; 문자셋 = UTF-8 날짜 : 2014년 (수) 그리니치 표준시 21시 07분 44초 의 ETag 12월 3일 "74252dca9d2cf4e5da6f91f0d9fcc6c0" 프런트 엔드-HTTPS : 서버 : nginx를 상태 : 200 OK 비바리 : 수락 - 인코딩 을 통해를 : 1.1 바니시 WWW- 인증 : OAuth 영역 = 'TwitchTV' X-API 버전 : 3 X 프레임 옵션 : SAMEORIGIN X-MH 캐시 : appcache2; M X-요청 ID : 13c6dbe385ebb778b21596eadb83f4bc X-런타임 : 0.060941 X-UA-지원 : IE = 에지, 크롬 = 1 X-니스 : 1048532873
request44:Connection:keep-alive
콘텐츠 길이 : 2252 콘텐츠 - 유형 : 응용 프로그램/vnd.apple.mpegurl 날짜 : 2014년 12월 3일 (수) 그리니치 표준시 21시 07분 44초 서버 : nginx를 를 통해 : usher16 : 8947
final:Accept-Ranges:bytes
액세스 제어 - 허용 - 원산지 : https://secure.twitch.tv 나이 : 0 캐시 제어 : no-cache, no-store, private 연결 : 연결 유지 콘텐츠 길이 : 351 콘텐츠 형식 : application/vnd.apple.mpegurl; charset = utf-8 날짜 : 2014 년 12 월 3 일 수요일 21:07:46 GMT 만료 : 2014 년 12 월 3 일 21:07:47 GMT Keep-Alive : timeout = 50 마지막으로 수정 된 날짜 : 12 월 3 일 수요일 2014 21:07:42 GMT 서버 : nginx
텍스트를 읽으려는 사람은 유감스럽게 생각하지만 도움을 주셔서 감사합니다! – Charlie