Форум программистов, компьютерный форум, киберфорум
PHP: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400

Периодичные запросы JSON на сторонний сайт

31.10.2017, 17:34. Показов 4129. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Как должна выглядеть схема отправки периодичных запросов прием и их обработка с выводом результата?

Ситуация:
Пользователь зашел на сайт.
Ввел "Данные" в поле ввода.
I) "Нажал кнопку." или произошло событие, отправляющее JSON.
II) JSON возвращает результат который надо обработать, после обработки получаются новые "Данные".
III) Выводим полученные "Данные"
IV) Повторить I) с новыми "Данными"

Интересует сами механизмы / технологии и "правильность" мысли.
Небольшое условие которое еще больше запутывает: После отправки JSON стороннему сайту результат выдается с задержкой (надо отправлять другой JSON с проверкой: готовы ли данные?)

к примеру:
I.а) Отправка AJAX на файл обработки
I.б) В файле обработки отправить JSON на сторонний сайт (Куда придет ответ?)
I.в) Обработать ответ и вернуть AJAX`у результат.
и т.д.

В общем до этого всё было на десктопе писал на делфи, теперь делаю веб версию и немного плыву. Можно без кода, но словами которые реально помогут) но Сейчас у меня даже AJAX не делает то, что я хочу:
Кнопка "Выйти"
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script type="text/javascript">
    $('#exit').click(function() {
      $.ajax({
        type: "POST",
        url: "secret/obrabotka.php",
        data: ({ exit : true}),
        success: function(resp) {
            alert('До свидания!');
        },
        error: function(resp) {
          alert('Выход невозможен');
        }
      });
      return false;
    });
</script>
В сессии обрабатывается активная сессия. В старт подключение в БД. Сама БД в виде класса: objProd -> durl.
Тут я делаю релокейт на главную страницу (страницу Входа) в которой в начале удаляю сессию. Якорь вешаю чтоб понять попадаю в обработку или нет. Ответ: Нет)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include("../tmpl/session.php");
include("../conf/start.php");
 
if(!empty($_POST))
{
    if  (isset($_POST['exit'])){
        header ('location: http://'.$sitemain.'/'.$objProd->durl.'/#323');  
        $_SESSION['exit'] = 'true';
        $_SESSION['AS'] = '11';
    }
}
?>
Добавлено через 6 часов 57 минут
В общем во время I) Данные передаются в БД, затем в II) полученные новые Данные также передаются в БД, и грубо говоря, переходим к следующей строке в БД и повторяем.

Это API яндекса кстати.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2017, 17:34
Ответы с готовыми решениями:

Открываются вкладка на сторонний сайт
Здравствуйте друзья. Собственно вчера проводил сканирование в безопасном режиме антивирусами Avirf и Malwarebytes Anti-Malware. Второй...

Убрать ссылку на сторонний сайт
Внизу справа вы можете увидеть лого при нажатии кидает на стороний сайт, я уважаю все права создателей шаблона, но он тут мешает совсем,...

Получение GET-параметров и передача на сторонний сайт
Доброго времени суток! Имеется страница, на которую попадают пользователи, имея в адресе UTM-метки. Например:...

10
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 316
31.10.2017, 23:31
Лучший ответ Сообщение было отмечено vino0s как решение

Решение

Цитата Сообщение от vino0s Посмотреть сообщение
Как должна выглядеть схема отправки периодичных запросов прием и их обработка с выводом результата?
- Если "периодичностью" рулить на стороне клиента (из js'a), то setInterval
Можно написать функцию, которая будет делать ajax-запрос, и в случае удачного его выполнения - обновлять отображаемые данные.
Затем в нужном месте (по кнопке, или onload) запускаете эту функцию в setInterval с нужной периодичностью.

- Если же у Вас запросы отправляются централизовано "1 для всех", а не по 1 для каждого, то стоит вспомнить про cron на стороне сервера. Написать скрипт, который будет отправлять запрос/парсить ответ/складывать всё в БД, а клиентская сторона уже будет брать/обновлять данные с собственной БД сайта.

Касательно
Цитата Сообщение от vino0s Посмотреть сообщение
попадаю в обработку или нет. Ответ: Нет)
Попробуйте вывести хоть куда-нибудь что Вам возвращает Ваш ajax-запрос:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    $('#exit').click(function() {
      $.ajax({
        type: "POST",
        url: "secret/obrabotka.php",
        data: ({ exit : true}),
        success: function(resp) {
            alert(resp);
            //alert('До свидания!');
        },
        error: function(resp) {
          alert(resp);
          //alert('Выход невозможен');
        }
      });
      return false;
    });
может там ошибка в пути include, или "попытка повторного объявления" (кстати, сейчас многие советуют не использовать include "в чистом виде", а вместо него писать require_once)

Добавлено через 10 минут
Кстати - "не кстати", вспомнил: у меня на нескольких разных хостингах, где стоял php 5.3 и младше, скрипты частенько падали от этой конструкции:
Цитата Сообщение от vino0s Посмотреть сообщение
if(!empty($_POST))
То ли empty() придумали позже (хотя справка говорит, что нет же), то ли я не знаю, но факт остается фактом: if(!empty(...)) на php 5.3 давало фатал еррор.
Переписывал тогда всё на isset(), count() или strlen() - работало.
1
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
01.11.2017, 18:58  [ТС]
Цитата Сообщение от ИмяПользователя Посмотреть сообщение
isset(), count() или strlen()
Огромное буду пробовать.
Цитата Сообщение от ИмяПользователя Посмотреть сообщение
Если "периодичностью" рулить на стороне клиента (из js'a), то setInterval
Здесь такая ситуация: предполагается что есть несколько пользователей, каждый может ввести свои "Данные". Если это можно сделать на стороне своего сервера я был бы только рад. У каждого пользователя есть свой токен по которому считаются потраченные баллы за получение новых данных. Иногда Данные разных пользователей могут совпадать, ну это уже о оптимизации... Сейчас мне бы хоть что то одно получить...

Есть десктопная версия всего что хочется сделать в мобильной... Но тут механизм другой и я завис...

Не так давно раскрыли глаза что использую "примитивные" методы разработки мобильных приложений)) Начал смотреть в сторону DJango... Если у меня получится сделать на PHP поможет ли мне это если затем переносить на Django?
Не делаю сразу в связи с отсутствием знания: Как на хостинге развернуть Django? ) Мне пишут что просто кинуть папки)) А я что то туплю...
0
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 316
02.11.2017, 15:02
Цитата Сообщение от vino0s Посмотреть сообщение
Начал смотреть в сторону DJango
- Sorry, с этим фреймверком я не знаком, тут мало чего смогу подсказать;

Цитата Сообщение от vino0s Посмотреть сообщение
Здесь такая ситуация: предполагается что есть несколько пользователей, каждый может ввести свои "Данные". Если это можно сделать на стороне своего сервера я был бы только рад. У каждого пользователя есть свой токен по которому считаются потраченные баллы за получение новых данных. Иногда Данные разных пользователей могут совпадать, ну это уже о оптимизации... Сейчас мне бы хоть что то одно получить...
- Всё-равно мне не очевидно: почему "на сервере" было бы лучше... и совершенно не понятно: что именно не получается с "одинарным" запросом...

Если всё делать в рамках веб-страницы (пользовательская сторона на html + css + js), то на сайте пишете форму, куда вводятся/подставляются данные пользователя (молчу о ранее пройденной авторизации);
Форма Вам пригодится в любом случае;
Дальше по нажатию кнопки (или перехода по какой-то определенной ссылке, или просто по событию onLoad страницы, т.е. сразу после загрузки страницы) js начинает отправлять ajax-запросы и обновлять информацию на странице пользователя.

Куда слать - решать Вам, если хотите, что бы запросы к стороннему API исходили с Вашего сервера, значит ajax-запрос от клиента должен идти на Ваш скрипт, который в свою очередь сделает нужный запрос к стороннему серверу и вернет результат клиенту в подготовленном виде (+ может промежуточно что-то обработать/сохранить/залогировать).

Если же промежуточная обработка на сервере не нужна, тогда можно сразу организовать ajax-запрос к Вашему поставщику API, и далее по необходимости обработать/отобразить данные.

Периодичностью обновления отображаемых данных у пользователя Вы, в любом случае, будете организовывать на стороне клиента в js'e.
Периодичность запросов к API можно централизованно управлять, если обращаться к стороннему ресурсу с сервера, если же отдать это в клиентскую часть, то 2-3-10 открытых у клиента одинаковых вкладок, теоретически, смогут сгенерировать соответствующее кол-во параллельных запросов, что теоретически, в перспективе, может привести к "глобальному" бану на стороне поставщика API.
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
03.11.2017, 13:33  [ТС]
AJAX работает. Странное поведение замечалось именно с авторизацией ( с выходом ), ну да ладно черт с ней.
Одиночный запрос оправляется, там был один лишний заголовок.
Цитата Сообщение от ИмяПользователя Посмотреть сообщение
Всё-равно мне не очевидно: почему "на сервере" было бы лучше...
Я не спорю, было бы знание не спрашивал бы) Я просто говорю о своем понимании, как могло бы выглядеть.
Сейчас большая часть вопросов потихоньку отпадает. Остается именно автоматизация периодичной отправки запросов.

Вот он ввел, далее * AJAX (отправился запрос, получил данные, обработал ( записал в базу данных и вернул в клиент )) - тут пока не точно ясно, будет ли результат приходить сразу или с задержкой, это тоже пока уточняется - представим что сразу для простоты - тогда в AJAX на succes повесить выполнение скрипта который вернется к * (см. в начало абзаца).

но в другом случае, если данные подготавливаются с задержкой, мне нужно снова отправить этот же запрос ( как я понял на сейчас из API ). Вот в делфи я это организовывал с помощью таймера, и всё было легко) А тут как?) Что будет происходить если он (клиент) начнет постоянно обновлять страницу. Придумалось мне сохранять отправленный запрос в БД в 2 статуса: Отправлен, получен. Тогда вся (да да, тут я уже прям вижу всю задачу решенной, это больше для себя ) задача сводится к периодичной проверке статуса в моей БД.

Цитата Сообщение от ИмяПользователя Посмотреть сообщение
"глобальному" бану на стороне поставщика API
В этом плане там есть ограничение по количеству запросов в день и единовременному количеству запросов.

Вот в-общем и упростилась вся суть топика до самой функции которая бы вызывала сама себя с каким то периодом - как такое сделать? Делать это на PHP или JS. Просто если делать это на JS то получится что клиенту необходимо находиться на сайте чтобы данные формировались ( предполагается что процесс может затянуться на 5 часов ). Поэтому наверно надо как то сделать это на PHP, а в окно клиента выдавать только те данные которые уже были получены.

Как сделать периодичный запуск какого то скрипта на PHP?
0
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 316
03.11.2017, 14:11
Лучший ответ Сообщение было отмечено vino0s как решение

Решение

Цитата Сообщение от vino0s Посмотреть сообщение
Вот в делфи я это организовывал с помощью таймера, и всё было легко) А тут как?)
Цитата Сообщение от ИмяПользователя Посмотреть сообщение
- Если "периодичностью" рулить на стороне клиента (из js'a), то setInterval
Цитата Сообщение от vino0s Посмотреть сообщение
тогда в AJAX на succes повесить выполнение скрипта который вернется к * (см. в начало абзаца).
но в другом случае
- повесить на succes проверку данных, если пришел полноценный ответ - вывести, если "please wait" (или что там возвращается) - запустить setInterval (можно и через setTimer), по которым дублировать запросы и проверять "готовность" данных.
Когда данные наконец вернутся - удалить таймер.

Дочитал до конца Ваш кмомент на счет "5 часов", Ok, тогда либо крон, либо есть уйма "велосипедов", которые эмулируют крон с той или иной успешностью... Я бы рекомендовал (если хостинг поддерживает) работать по крону, т.е. php-скрипт по крону на сервере запускается, запрашивает данные, выгружается, потом (каждые 15-30-60 минут) оять загружается, проверяет данные, если есть - сохраняет в свою БД, выгружается и так до бесконечности.

Клиент: заходит на сайт, смотрит инфу из базы, по setInterval запускается ajax-запрос, который с установленной периодичностью отбновляет отображаемую инфу.
1
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
03.11.2017, 18:04  [ТС]
так, cron есть) Там вообще мозги нужны?
0
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 316
03.11.2017, 19:20
Цитата Сообщение от vino0s Посмотреть сообщение
Там вообще мозги нужны?
- Зачем?
Там "кодер", обычно, нужен:
- взять документацию (к Вашему API в том числе);
- взять справочник функций выбранного ЯП. Если выбрали несколько ЯП - несколько справочников;
- описать методы из документации функциями языка, на котором реализуете эти самые методы.

Над чем тут думать?! )
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
03.11.2017, 21:52  [ТС]
Ну я думал это другой язык))) Ещё не делал такого ни ког да)

Добавлено через 47 минут
Крч я там ни черта не понял, Там одно поле Команда и выбор периода запуска. Больше ничего нет.

Как я понял надо просто написать путь к файлу который нужно запускать?
/home/login/site.ru/curl3.php

А в нем делать запрос в БД, искать статус отчёта "сформирован", пытать его "получить". В случае удачи "перейти к следующему". И всё?

Добавлено через 5 минут
Плохо что нельзя запускать чаще, придется лепить костыль, хотя я не знаю как. Мне нужно запускать каждые 5-10 секунд. А там только минута.
0
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 316
03.11.2017, 22:50
Цитата Сообщение от vino0s Посмотреть сообщение
Как я понял надо просто написать путь к файлу который нужно запускать?
/home/login/site.ru/curl3.php
- Не совсем так: php - интерпретируемый язык. В отличии от делфы - скрипты "транслируются" интерпретатором "на лету". Когда Вы запрашиваете скрипт из браузера, интерпретатора для Вас запускает веб-сервер. Если Вы хотите запустить скрипт из консоли, то необходимо самому запустить интерпретатор, и передать ему параметром путь к запускаемому скрипту.
Что бы по крону стартовать "веб-версию", обычно используют консольный вызов curl'а:
Bash
1
curl -X GET "http://www.site.ru/curl3.php/"
Что бы запустить скрипт из консоли, указывается полный путь (если добавлен в PATH - относительный) к "бинарнику php" и как обычно в консоли - через пробел параметром путь к нужному скрипту, например:
Bash
1
"/usr/bin/php /home/login/site.ru/curl3.php"
Цитата Сообщение от vino0s Посмотреть сообщение
Плохо что нельзя запускать чаще, придется лепить костыль, хотя я не знаю как. Мне нужно запускать каждые 5-10 секунд. А там только минута.
Как вариант: тыц
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
04.11.2017, 07:57  [ТС]
Цитата Сообщение от ИмяПользователя Посмотреть сообщение
Bash
1
/usr/bin/php /home/login/site.ru/curl3.php
она сама дописалась)
А мне в итоге написать так
Цитата Сообщение от ИмяПользователя Посмотреть сообщение
Bash
1
curl -X GET "http://www.site.ru/curl3.php/"
или оставить так
Цитата Сообщение от ИмяПользователя Посмотреть сообщение
Bash
1
"/usr/bin/php /home/login/site.ru/curl3.php"
Добавлено через 4 минуты
крч она работает) и спамит мне в емайл))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.11.2017, 07:57
Помогаю со студенческими работами здесь

При запуске браузера вылетает сторонний сайт
При запуске гугл хрома вылетает сайт вулкан.

Перенаправляет на сторонний сайт в ссылках Google Play
Доброго времени суток. Надеюсь на помощь. Браузер Chrome Проблема такая: например, есть ссылка на приложения в магазин Google Play...

Самовольный переход вкладок в Опере на сторонний сайт
При открытии браузера Опера периодически (раз в 5-10 минут) на некоторых вкладках самопроизвольно переходят на сайт onlinegazeta. Логи...

Браузер выполняет переход на сторонний веб-сайт
Добрый день! После перехода на некоторые ресурсы браузеры открывают сторонний сайт, который выполняет циклическую перезагрузку...

Какой сторонний браузер может открыть сайт?
мне нужно открыть сайт https://linktest.ru/, но через свой стандартный webBrower бесмысленно, пытался открыть установив Awesomium, тоже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru