Всем здрасьте! Имеется скрипт на Python для обработки долгого запроса с апи (более 8 минут ответа). Стоит задача реализовать обработчик данного скрипта на пхп. Подскажите люди добрые каким образом сделать? Так же необходимо сохранять полученные данные в файл на сервере. Данных много. Таблица отчета. Код пайтона прилагаю. Про крон/очереди знаю, но их использование не поддерживает тимлид. В консоле данный запрос получается. Необходим вывод в браузере пользователю. import aiohttp import asyncio async def main(): headers = {'api-key': '5e6880491f99d2d226e92987b7d48650', 'Content-Type' : 'application/json' } url = 'http://161.97.168.124/admin_api/v1/report/build' payload = {"range":{"interval":"first_day_of_this_year","timezone":"Europe/Warsaw"},"columns":[],"metrics":["conversions","leads","sales","rejected","approve","cr","crs","crl","roi","roi_confirmed","cps","cpa","cpc","ecpc","ecpm","ecpm_confirmed","ec","ec_confirmed","landing_clicked_period","profitability","revenue","profit","lead_revenue","sale_revenue","rejected_revenue","cost","profit_confirmed","epc","epc_confirmed"],"grouping":["campaign","datetime"],"summary":True,"limit":"20","offset":"100"} timeout = aiohttp.ClientTimeout(total=600) async with aiohttp.ClientSession() as session: async with session.post(url, json = payload, headers = headers, timeout = timeout) as response: html = await response.json() if 'rows' in html: for s in html['rows']: print("{}\n".format(s)) else: print("{}\n".format(html)) asyncio.run(main())
Ну если пыху, запощеную без отступов, ещё можно как-то разобрать, то пихать питон вне тега кода, и без отступов сразу - это вообще Там же отступы решающее значение имеют. См. мою подпись --- Добавлено --- Curl, если кратко, для обращения к сторонним апи. Или что-то попродвинутее типа Guzzle --- Добавлено --- Ну и max_execution_time отрубить в -1, хотя, большинство браузеров не будут ждать 8 минут сами, поэтому скажи тимлиду, что он дурак ) --- Добавлено --- А уж пользователи как любят 8 минут пустую страницу смотреть....
Исправлюсь) Пробовал ими тоже, ловил 500. Хотя еще не совсем ясно, косяк на моей стороне или на стороне апи Тоже делал, хром и мозила падали. Другие не тестил Пока что не позволяет опыт и вес в конторе)) но в глубине души уже сказано и не такое. Спасибо за ответ! Лишний раз убедился, что шел по правильному пути
Ну а ты аргументируй. Пусть веб-скрипт только ставит задание в очередь, а долгая обработка пусть делается в фоне "консольным" скриптом, неважно на пайтоне или пи-эйч-пи. --- Добавлено --- Как правило, php-cli не имеет таймаута на выполнение.
Ну если я выступаю как фронтендер, и с бэка приходит 500 с непонятным объяснением или вообще без (часто с жабой такое, и с питоном тоже бывает), то я могу так сказать. Но если я пишу бэк на пхп, и 500, то есть же логи, есть же дебагер, да куча способов разобраться, и точно определить причину.
Если скрипт на Питоне относительно короткий, то лучше всего перевести его на PHP вручную. Не надо программировать часами то, что можно сделать за пять минут вручную. Конечно, при условии, что скрипт относительно короткий.
Та скрипт на 13 строк. Надо реализовать его через пхп. Ппока добился только фоновой работы. По идее надо добавить функции проверки записи в базе и фунцию ответа на страницу клиенту, может еще какую PHP: <?php chmod('/home/alex/PhpstormProjects/untitled/plugins/Offer_Report/Controllers/test.py', 0777); $result = exec("/home/alex/PhpstormProjects/untitled/plugins/Offer_Report/Controllers/test.py 1>/dev/null 2>/dev/null &"); $result_array = json_decode($result); if ($result_array) foreach($result_array as $row){ echo $row . "<BR>"; } ?>