За последние 24 часа нас посетили 21056 программистов и 1110 роботов. Сейчас ищет 391 программист ...

Обработчик скрипта Python на PHP

Тема в разделе "PHP для новичков", создана пользователем yaltinets, 21 ноя 2022.

  1. yaltinets

    yaltinets Новичок

    С нами с:
    21 ноя 2022
    Сообщения:
    3
    Симпатии:
    0
    Всем здрасьте! Имеется скрипт на 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())
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Ну если пыху, запощеную без отступов, ещё можно как-то разобрать, то пихать питон вне тега кода, и без отступов сразу - это вообще :) Там же отступы решающее значение имеют. См. мою подпись
    --- Добавлено ---
    Curl, если кратко, для обращения к сторонним апи. Или что-то попродвинутее типа Guzzle
    --- Добавлено ---
    Ну и max_execution_time отрубить в -1, хотя, большинство браузеров не будут ждать 8 минут сами, поэтому скажи тимлиду, что он дурак :))
    --- Добавлено ---
    А уж пользователи как любят 8 минут пустую страницу смотреть....
     
    yaltinets нравится это.
  3. yaltinets

    yaltinets Новичок

    С нами с:
    21 ноя 2022
    Сообщения:
    3
    Симпатии:
    0
    Исправлюсь)
    Пробовал ими тоже, ловил 500. Хотя еще не совсем ясно, косяк на моей стороне или на стороне апи
    Тоже делал, хром и мозила падали. Другие не тестил
    Пока что не позволяет опыт и вес в конторе)) но в глубине души уже сказано и не такое. Спасибо за ответ! Лишний раз убедился, что шел по правильному пути
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Ну а ты аргументируй. Пусть веб-скрипт только ставит задание в очередь, а долгая обработка пусть делается в фоне "консольным" скриптом, неважно на пайтоне или пи-эйч-пи.
    --- Добавлено ---
    Как правило, php-cli не имеет таймаута на выполнение.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Ну если я выступаю как фронтендер, и с бэка приходит 500 с непонятным объяснением или вообще без (часто с жабой такое, и с питоном тоже бывает), то я могу так сказать. Но если я пишу бэк на пхп, и 500, то есть же логи, есть же дебагер, да куча способов разобраться, и точно определить причину.
     
  6. alexphp

    alexphp Активный пользователь

    С нами с:
    5 дек 2019
    Сообщения:
    98
    Симпатии:
    12
    Если скрипт на Питоне относительно короткий, то лучше всего перевести его на PHP вручную. Не надо программировать часами то, что можно сделать за пять минут вручную. Конечно, при условии, что скрипт относительно короткий.
     
  7. yaltinets

    yaltinets Новичок

    С нами с:
    21 ноя 2022
    Сообщения:
    3
    Симпатии:
    0
    Та скрипт на 13 строк. Надо реализовать его через пхп. Ппока добился только фоновой работы. По идее надо добавить функции проверки записи в базе и фунцию ответа на страницу клиенту, может еще какую

    PHP:
    1. <?php
    2. chmod('/home/alex/PhpstormProjects/untitled/plugins/Offer_Report/Controllers/test.py', 0777);
    3. $result = exec("/home/alex/PhpstormProjects/untitled/plugins/Offer_Report/Controllers/test.py 1>/dev/null 2>/dev/null &");
    4. $result_array = json_decode($result);
    5. if ($result_array)
    6. foreach($result_array as $row){
    7.         echo $row . "<BR>";
    8. }
    9. ?>