@Screpka

Как работать с CREST api (EVE online)?

Есть такое вот api. Там есть документация, но, если нет опыта, то в данном случае, она мало чем может помочь.
Согласно документации eve-market-data-relay.readthedocs.org/en/latest/us..., я научился подключаться к серверу, с помощью этого кода
/*
 * Example PHP EMDR client.
 */

$context = new ZMQContext();
$subscriber = $context->getSocket(ZMQ::SOCKET_SUB);

// Connect to the first publicly available relay.
$subscriber->connect("tcp://relay-us-central-1.eve-emdr.com:8050");
// Disable filtering.
$subscriber->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, "");

while (true) {
    // Receive raw market JSON strings.
    $market_json = gzuncompress($subscriber->recv());
    // Un-serialize the JSON data to a named array.
    $market_data = json_decode($market_json);
    // Dump the market data to stdout. Or, you know, do more fun things here.
    var_dump($market_data);
}

На текущий момент, главная проблема состоит в том, что не смотря на скорость php7, я не могу получить всю информацию из цикла. Даже, если убираю ограничение на продолжительность скрипта в php (скрипт работал более двух часов, и так не закончил работать, далее не продолжал, это не позволительно долго для моей цели).

И вот первая просьба о помощи: как работать с таким большим количеством данных? База должна быть актуальной, так как это база сервера игры, его рынка, где информация меняется каждую минуту.

Может быть можно через другие языки получать эту базу, допустим, через c++? Но дело в том, что в нем я не разбираюсь. Но, если бы кто-то подробно, по этому вопросу объяснил как это сделать в связке с php, то, возможно я бы быстрее разобрался.
  • Вопрос задан
  • 4763 просмотра
Решения вопроса 1
okwinza
@okwinza
PHP Developer
Ок. наконец-то стоящий вопрос.
  1. Во-первых: в названии вопроса у вас стоит CREST, а код вы приводите для работы с апи стороннего сервиса, который сам получает инфу в том числе через CREST. То есть это разные вещи. CREST - официальное RESTful Api евы, а eve-central - сторонний проект со своим апи.
  2. Во-вторых: код в вашем вопросе используется для постоянного приема данных с eve-central. То есть как только что-то обновилось и запушилось в их релей, вы получаете эти данные. Эти данные обновляются в реальном времени. Этот код не предназначен, чтобы получить сразу ВСЕ данные.


Если хотите сделать что-то похожее на риал-тайм апдейт цен, то прикрутите к вашему скрипту какой-нить WS или Long-polling сервер, например socketo.me На клиенте можно заюзать autobahn.ws/js для прослушивания и отображения данных.

Дамп базы игры можно найти на офф. форуме. Полезно для конвертации ID в названия, добавления описаний и т.п. Хотя это все можно также делать уже через CREST.

Либу для работы с CREST можно заюзать отсюда https://github.com/EvELabs/oauth2-eveonline
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
DPechurkin
@DPechurkin
Веб разработчик
насколько мне известно, у EVE очень ... очень - очень громадное количество информации.
И тут твоя первая ошибка, ты хочешь её копировать не имею мощностей для достижения цели.
Как это можно решить:
1. разграничивать информацию на отдельные разделы категории и прочее.
2. отслеживать нужные значения, к примеру не копировать всё себе , а по запросу пользователя тут же подтягивать нужные данные. При толковой реализации пункта 1 у тебя будет довольно шустро всё работать .
3. попробуй малыми порциями понять какая инфа приходит, нужна ли она вся тебе , у столь масштабной компании должно быть толковое API и там скорее всего нужно правильно запрос делать, тогда и информации может стать в разы меньше, обработка быстрее и т.д.
Ответ написан
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
А чего собственно не поняли в API eve-central?
Конечно соглашусь с Дмитрий Печуркин в том что вся база вам не нужна вообще от слова совсем, темболее что в JSON формате можно дёргать реалтаймово с евыцентрал.

Единственное что вам нужно это хранить у себя базу соответсвия имён итемов с их ID,
если собираетесь ещё и по многим системам мониторить то соответствие имём систем с их id.
Дампы баз итемов и т.д. когда-то выкладывали на офф. wiki, сейчас не знаю, итемы можно вообще взять из дампа самого евецентрала на их гитхабе https://raw.githubusercontent.com/theatrus/eve-cen...

А API у централа простейшее
http://api.eve-central.com/api/marketstat/json?typeid=29668&usesystem=30000142&hours=4

JSON ответ с положением дел плекса за последнии 4-е часа в жите.
Данные лучше брать за 4-е часа, минимум 2 часа, данные актуальностью менее 2-х часов вы не получите в большинстве случаев хотя скорее всего что вообще не получите.

Так что ваша задумка с получением данных каждую минуту не реальна из любых источников.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы