Jump to content
Korean Random
Sign in to follow this  
zGorikzz

Программа на javascript

Recommended Posts

Приветствую всех! Всё началось с того когда я увидел бойца с ником djalil у которого просто сумасшедшее количество боёв на ис-7. Сам я очень люблю объект 140 и без малого откатал на этом замечательном танке 5к+ боёв. И тогда я задался вопросом, а есть ли ещё игроки у которых на аккаунте на объекте 140 больше боёв чем у меня. Думаю множество из Вас подумали, что конечно есть ведь для многотысячной аудитории worldoftanks это пустяк ( какие то 5к на определённом танке). Но я  решил не останавливаться на каких то догадках и проверить на практике мои предположения. Сервисы типо kttc.ru, wot-new.com инфы о количестве боёв на танке по всем игрокам ру-кластера не предоставляют( если это не так то очень буду благодарен если дадите ссылочку). Тогда я решил отправиться на офф. сайт танков далее кабинет разработчика и изучил API. Затем написал небольшой код на javascript'e. Алгоритм работы такой: берем URL ссылку по которой обращаемся к серверу он даёт ответ такого вида: {"status":"ok","count":1,"data":{"10776079":[{"all":{"battles":5137}}]}}. Нам интересно поле battles с его значением. В строке URL фигурирует такой параметр как account_id собственно его нам и нужно менять от 0 грубо говоря до какого то конечного числа. В итоге всё заработало т.е в цикле пробегали значения account_id=0 к примеру до account_id=1000. И через alert ( выводилось значение max кол-ва боёв на объекте 140 в заданном диапазоне). НО сразу хочу заметить, что данная операция занимало ~ 2 минуты. 

 

После того как я увеличил диапазон до 10000 и прождал примерно минут 11 всё завершилось ошибкой javascript execution exceeded timeout. Даже если избавиться от данной ошибки и заставить скрипт и далее обрабатывать строки и делать запросы к серверу данная операции при количестве acсount_ id в несколько сотен тысяч займёт очень, очень, очень длительно время.  

 

Прошу помощи, если у кого то есть идеи.Заранее спасибо!!!

Share this post


Link to post

Short link
Share on other sites

 

 

Прошу помощи, если у кого то есть идеи.

WG API умеет отдавать информацию о сотне игроков за один запрос - account_id нужно указывать через запятую.

Браузер замените на Chrome/Opera, а ещё лучше воспользоваться Node JS.

 

P.S. Обрабатывать большой объём данных на JS - не очень хорошая идея.

Share this post


Link to post

Short link
Share on other sites

WG API умеет отдавать информацию о сотне игроков за один запрос - account_id нужно указывать через запятую.

Браузер замените на Chrome/Opera, а ещё лучше воспользоваться Node JS.

 

P.S. Обрабатывать большой объём данных на JS - не очень хорошая идея.

Ну мне получается через запятую нужно будеть прописать несколько тысяч account_id. В качестве среды разрабокти я использовал NetBeans, который в свою очередь запускал Chrome

Edited by zGorikzz

Share this post


Link to post

Short link
Share on other sites

Имхо, js - не совсем тот ЯП, который пригоден для Ваших целей. Может, Шарп или с++? Опять же, это мое мнение.

Share this post


Link to post

Short link
Share on other sites

 

 

Ну мне получается через запятую нужны будеть прописать несколько тысяч account_id.

Нет. Через запятую нельзя указать больше сотни ID - это ограничение API.

Вам нужно в цикле с увеличением счётчика на 100 создавать массив ID ([1,2,3 ...], [101,102,103 ...] и так далее), после чего добавлять в строку обычным Array.join(',').

var i = 0 
while(i <= 1000) {
  var id = new Array();
  for(var n = i; n <= i + 100; n++) 
    id.push(n);
  i = i + 100;
  //Тут формируем запрос с помощью id.join(','); и производим различные действия
  'http://wgapi.com/bla/bla/bla/?someparam=1&account_id=' + id.join(',');
}

 

 

js - не совсем тот ЯП

Согласен, странный выбор языка...

 

 

Шарп или с++?

Я бы посоветовал Perl, так как он создавался специально для таких целей (обработки списков\данных и невероятных извращений).

Судя по всему ТС занимается web-программированием и переход на C#\C++ будет очень тяжёлым. Тут будет лучше Lua - быстрая, маленькая и лёгкая.

 

 

В качестве среды разрабокти я использовал NetBeans

Ух ты! Я и не думал, что для JS есть среда разработки.

Share this post


Link to post

Short link
Share on other sites

Согласен, странный выбор языка...

 

Я бы посоветовал Perl, так как он создавался специально для таких целей (обработки списков\данных и невероятных извращений).

Судя по всему ТС занимается web-программированием и переход на C#\C++ будет очень тяжёлым.

Точно, про перл забыл. Про переход н c# - не сказал бы,языки схожи по синтаксису, ну запомнить названия библиотек, их описания, поользоваться удобным мсдн, никакого дискомфорта здесь не вижу. Плюсы легко учить после шарпа, с жс - да, сложно. Но это по переход, а так, лучше уж перл, про него, честно, подзабыл.

Share this post


Link to post

Short link
Share on other sites

Сам я очень люблю объект 140 и без малого откатал на этом замечательном танке 5к+ боёв. И тогда я задался вопросом, а есть ли ещё игроки у которых на аккаунте на объекте 140 больше боёв чем у меня.

"Это возможно не все:"

vbattles   vdmg  battles xwn8 winrate  account

   11437   1676   40370   49   49.0%   http://worldoftanks.ru/community/accounts/7663786-

    9563   2119   35067   60   50.3%   http://worldoftanks.ru/community/accounts/7893824-

    7514   1775   30543   39   47.4%   http://worldoftanks.ru/community/accounts/18078325-

    7065   1855   23743   52   50.0%   http://worldoftanks.ru/community/accounts/5144526-

    6435   1636   16742   44   49.1%   http://worldoftanks.ru/community/accounts/8531715-

    6402   3198   56194   88   58.3%   http://worldoftanks.ru/community/accounts/53655-

    6393   1877   70086   57   49.9%   http://worldoftanks.ru/community/accounts/488609-

    6303   2261   44022   79   55.1%   http://worldoftanks.ru/community/accounts/8533551-

    6294   1543   35325   40   47.9%   http://worldoftanks.ru/community/accounts/13694410-

    6193   2120   10354   66   53.3%   http://worldoftanks.ru/community/accounts/18298912-

    6162   2563   34752   88   56.1%   http://worldoftanks.ru/community/accounts/7361644-

    6097   2184   15835   67   50.8%   http://worldoftanks.ru/community/accounts/541996-

    5788   2505   35842   83   54.6%   http://worldoftanks.ru/community/accounts/708266-

    5654   3001   26286   99   67.7%   http://worldoftanks.ru/community/accounts/15239062-

    5610   1765   25930   45   50.3%   http://worldoftanks.ru/community/accounts/16065597-

    5596   2017   26427   55   48.7%   http://worldoftanks.ru/community/accounts/10667387-

    5585   2067   12450   63   52.9%   http://worldoftanks.ru/community/accounts/18197279-

    5519   1834   56856   39   47.5%   http://worldoftanks.ru/community/accounts/15031022-

    5302   1690   36195   46   48.4%   http://worldoftanks.ru/community/accounts/15108520-

    5249   1662   24120   44   47.3%   http://worldoftanks.ru/community/accounts/3589995-

    5105   1403   19154   39   47.9%   http://worldoftanks.ru/community/accounts/15871446-

    5045   2522   36917   75   55.3%   http://worldoftanks.ru/community/accounts/2113867-

    5030   1588   17044   38   46.3%   http://worldoftanks.ru/community/accounts/12494670-

    5028   2029   43170   60   52.6%   http://worldoftanks.ru/community/accounts/11277977-

    5016   1898   20672   47   48.0%   http://worldoftanks.ru/community/accounts/13214777-

Через запятую нельзя указать больше сотни ID

20

Share this post


Link to post

Short link
Share on other sites
, нежданчик. 20 вроде было

Share this post


Link to post

Short link
Share on other sites

Нет. Через запятую нельзя указать больше сотни ID - это ограничение API.

Вам нужно в цикле с увеличением счётчика на 100 создавать массив ID ([1,2,3 ...], [101,102,103 ...] и так далее), после чего добавлять в строку обычным Array.join(',').

var i = 0 
while(i <= 1000) {
  var id = new Array();
  for(var n = i; n <= i + 100; n++) 
    id.push(n);
  i = i + 100;
  //Тут формируем запрос с помощью id.join(','); и производим различные действия
  'http://wgapi.com/bla/bla/bla/?someparam=1&account_id=' + id.join(',');
}

Согласен, странный выбор языка...

 

 

Я бы посоветовал Perl, так как он создавался специально для таких целей (обработки списков\данных и невероятных извращений).

Судя по всему ТС занимается web-программированием и переход на C#\C++ будет очень тяжёлым. Тут будет лучше Lua - быстрая, маленькая и лёгкая.

 

 

Ух ты! Я и не думал, что для JS есть среда разработки.

хочу попробовать твоим способом сделать через join, если что дельного получится сообщу

Нет. Через запятую нельзя указать больше сотни ID - это ограничение API.

Вам нужно в цикле с увеличением счётчика на 100 создавать массив ID ([1,2,3 ...], [101,102,103 ...] и так далее), после чего добавлять в строку обычным Array.join(',').

var i = 0 
while(i <= 1000) {
  var id = new Array();
  for(var n = i; n <= i + 100; n++) 
    id.push(n);
  i = i + 100;
  //Тут формируем запрос с помощью id.join(','); и производим различные действия
  'http://wgapi.com/bla/bla/bla/?someparam=1&account_id=' + id.join(',');
}

Согласен, странный выбор языка...

 

 

Я бы посоветовал Perl, так как он создавался специально для таких целей (обработки списков\данных и невероятных извращений).

Судя по всему ТС занимается web-программированием и переход на C#\C++ будет очень тяжёлым. Тут будет лучше Lua - быстрая, маленькая и лёгкая.

 

 

Ух ты! Я и не думал, что для JS есть среда разработки.

В запросе нельзя указывать массив id, только одно значение, так что способ такой не работает 

Share this post


Link to post

Short link
Share on other sites

Share this post


Link to post

Short link
Share on other sites

спасибо большое, от души, немного в другой вкладке смотрел, там тип numeric был тольк, а не list

Share this post


Link to post

Short link
Share on other sites

Честно говоря так ничего и не получилось с учётом того, что account_id предложенным способом не более 100 запросов можно выполнять. То очень много времени понадобится чтобы обработать несколько миллионов((

Share this post


Link to post

Short link
Share on other sites

 

 

account_id предложенным способом не более 100 запросов можно выполнять

Нет. За один запрос вы получаете информацию о 100 игроках. Это в 100 раз быстрее изначального метода.

 

 

То очень много времени понадобится чтобы обработать несколько миллионов((

Ничего с этим не поделать. Хотя, можно узнать приблизительное время.

Если за 2 минуты изначально обрабатывалось 1000 игроков, то по-новому вы обработаете это количество игроков за 1.2 секунды.

Один миллион - 1200 секунд или 20 минут.

75 миллионов (Последнее зафиксированное кол-во аккаунтов на RU,EU,NA кластерах) - 25 часов.

-----------------------

Но на практике это время скорее всего увеличится на 20-40%

Share this post


Link to post

Short link
Share on other sites

ну да в этом то всё и дело поэтому наверное и нет такого сервиса по боям на отдельном танке, так бы сделали давно 

Share this post


Link to post

Short link
Share on other sites

 

 

сервиса по боям на отдельном танке

Тут, например. Статистика танка -> Лучшие игроки по количеству игр.

Share this post


Link to post

Short link
Share on other sites

Тут, например. Статистика танка -> Лучшие игроки по количеству игр.

офигеть как они это сделали?) они же исходники не покажут

Share this post


Link to post

Short link
Share on other sites

 

 

как они это сделали

Отдельный сервер собирает и анализирует данные из API, после чего складывает их в базу данных. А основной сервер лишь читает эту БД, выбирая лучших.

И это явно не на JS - сборкой данных занимается Perl/Python, а отображением - PHP. Хотя это только догадки, ведь ничто не мешает и на BF написать.

Share this post


Link to post

Short link
Share on other sites

на GET - запросы ограничение - 256 символов в URL, отсюда следует что 100 игроков в GET не поместится, поэтому надо использовать POST запросы

 

ничто не мешает и на BF написать.

Сразу на Assembler'е тогда уж) 

 

Многие используют в back-end'е нативные языки: Java EE или ASP.NET.

Знаю, что XVM сейчас работает на Java, а БД держит на Mongo DB

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

 

 

Сразу на Assembler'е тогда уж)

Написать на ассемблере будет гораздо легче, чем на BF. В Windows есть куча функций в WinAPI, в *nix - системные вызовы (Можно использовать libc, но это не труЪ метод).

Проблемы могут возникнуть только с JSON'ом. Нужно будет писать свой парсер, или воспользоваться какой-нибудь библиотекой.

Я никогда не понимал тех, кто считает, что ассемблер - очень сложный язык. Он прост, проще чем современные "комбайны". Вот только он навязывает иной способ мышления, понять который может не каждый.

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...