@Ilya78rus

Как правильно парсить динамическое JSON Api?

Доброго времени суток. Разрабатываю проект, требуется помощь
Имеется api другого ресурса, в котором данные обновляются раз в 1-2 секунды.
Необходимо постоянно иметь актуальные данные этого API у себя + перегруппировать его по своим нуждам и соответственно по запросу отдавать своему сайту. Главное - это получать актуальные значения.
Пробовал получать курлом и в цикле создавать требуемый ответ в json, но это достаточно долго и занимает порядка 5-10 секунд + иногда ответ совсем не возвращался с ресурса. Есть вариант получать api с js конкретно на странице, но это издевательство + тонна кода на стороне клиента.
  • Вопрос задан
  • 453 просмотра
Пригласить эксперта
Ответы на вопрос 4
@Ambrosian
Обычный кэширующий прокси.
Ответ написан
rim89
@rim89
программист-велосипедист
Чтобы иметь актуальные данные из источника, которые обновляется раз в секунду , вы должны менее чем за секунду их получить, обработать и сохранить. Если этого сделать никак нельзя, значит нужно принять допущение что у вас будет задержка. И тут же надо думать надо ли у себя хранить всё или запускать скрипт по запросу клиента.
1 секунда - это очень быстро, у вас половину этого времени может только занять получения ответа от API. Поэтому -
- нужно иметь своей сервер максимально близко к API, это что то даст в + какие то миллисекунды
- если все это добро храниться в БД , и если это SQL решение - подумать над архитектурой, чтобы не терять время на блокировки таблицы, если такие сейчас есть
- разделить процессы: один занят только получением данных, другой только обработкой и тд
Ответ написан
@TimsTims
тогда писать бота так, чтобы ходил каждую 1 секунду на чужое api.
Если не хватает мощности парсить результаты - увеличивать мощность железа, либо бота запускать на другой виртуалке.
Если важна прям точность в данных , то пишете своего демона с вебсокетами (смотрите примеры с чатами). Тут от php почти ничего не остаётся. Суть такая;
1) есть ваш php демон который каждые 1 секунду выгружает данные и результат отправляет в программу 2:
2) программа #2 по-сути это сервер вебсокетов - как только получает данные от вашего php-демона, сразу же рассылает данные на всех подключенных клиентов (смотрите реализации чатов).
3) клиенты которые подключены через js websockets к вашей программе 2: немедленно все разом получают самую свежайшую информацию практически в тот же момент, когда о ней узнал ваш демон php.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега Веб-разработка
♬♬
Два независимых потока: из API в ваше хранилище, и из хранилища посетителям сайта.

Один процесс забирает данные из API и обрабатывает их. (Никак не должно это занимать аж 5 секунд!) Результат обработки записывается в БД или какой-нибудь Redis.

Посетители запрашивают или получают push'ем актуальные данные из вашей БД или Redis.

upd. Это похоже на ваше, описанное в комменте к другому ответу, решение. Чем оно не устраивает?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы