• Как создать образ докер для чтения input?

    Razgildai
    @Razgildai Автор вопроса
    Благодарю, утрамбовал скрипт в py2exe.
    Написано
  • Как запустить Python скрипт на сервере Linux Ubuntu?

    Razgildai
    @Razgildai Автор вопроса
    Vindicar, нет, сейчас он упал и не встает снова :(
    В ps -AF сервиса нет

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

    Но вот поднять через systemd файл снова не удается.

    Статус дает ошибку.
    × system_wb.service - WB_API
         Loaded: loaded (/etc/systemd/system/system_wb.service; enabled; vendor preset: enabled)
         Active: failed (Result: exit-code) since Sat 2024-07-13 17:06:05 UTC; 7min ago
        Process: 1062 ExecStart=/usr/bin/python3 /home/wb_api/WB_API_D01/main.py (code=exited, status=1/FAILURE)
       Main PID: 1062 (code=exited, status=1/FAILURE)
            CPU: 241ms
    
    Jul 13 17:06:05 wb-test-python systemd[1]: system_wb.service: Scheduled restart job, restart counter is at 5.
    Jul 13 17:06:05 wb-test-python systemd[1]: Stopped WB_API.
    Jul 13 17:06:05 wb-test-python systemd[1]: system_wb.service: Start request repeated too quickly.
    Jul 13 17:06:05 wb-test-python systemd[1]: system_wb.service: Failed with result 'exit-code'.
    Jul 13 17:06:05 wb-test-python systemd[1]: Failed to start WB_API.
    Jul 13 17:06:05 wb-test-python systemd[1]: system_wb.service: Start request repeated too quickly.
    Jul 13 17:06:05 wb-test-python systemd[1]: system_wb.service: Failed with result 'exit-code'.
    Jul 13 17:06:05 wb-test-python systemd[1]: Failed to start WB_API.


    UPD:

    Удалось таки запустить все, но теперь я столкнулся с новой проблемой.
    Спасибо логам из sudo journalctl -xe -u, хотя бы ошибки видно.

    Судя по ошибке, проблема с чтением из файла .env.
    Т.к. в requests из двух параметров я отдаю endpoint - объявлен в самой функции выше в виде строки,
    и api_wb - а вот эту переменную я получаю как раз из файла .env.

    И кажется какая то проблема с библиотекой dotenv при таком запуске скрипта, ибо если его запустить с терминала, то все прекрасно работает. :(

    config = dotenv_values(".env")  # config = {}
    api_wb = config.get("URL_Method_Statistic")


    Jul 13 18:11:09 wb-test-api python3[3511]:   File "/home/WB_API_D01/main.py", line 64, in update_sales_schedule
    Jul 13 18:11:09 wb-test-api python3[3511]:     update_sales_orders(url=url_stat,
    Jul 13 18:11:09 wb-test-api python3[3511]:   File "/home/WB_API_D01/update_order_sales_wb_dg_gs.py", line 69, in update_sales_orders
    Jul 13 18:11:09 wb-test-api python3[3511]:     response = orders_sales_get_wb(url=url, token=api_key_1, endpoint=endpoint, date_from=date_download_data_wb.date())
    Jul 13 18:11:09 wb-test-api python3[3511]:   File "/home/WB_API_D01/script_wb.py", line 19, in orders_sales_get_wb
    Jul 13 18:11:09 wb-test-api python3[3511]:     response = wildberries_api_get(key=token, api_wb=url, endpoint=endpoint, params=params)
    Jul 13 18:11:09 wb-test-api python3[3511]:   File "/home/WB_API_D01/api_wb.py", line 21, in wildberries_api_get
    Jul 13 18:11:09 wb-test-api python3[3511]:     response = requests.get(api_wb + endpoint, headers=headers, params=params)
    Jul 13 18:11:09 wb-test-api python3[3511]: TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'


    UPD2:

    Ура! Я понял в каком месте я дурак.
    Я из файла .service, исключил параметр WorkingDirectory, скорее всего из-за этого скрипт перестал видеть файлы, в т.ч. и .env.

    Спасибо за sudo journalctl -xe -u, не знал про эту команду, спасла неимоверно за счет наличия информации об ошибке)
    Написано
  • Как запустить Python скрипт на сервере Linux Ubuntu?

    Razgildai
    @Razgildai Автор вопроса
    Vindicar, добрый день!

    Я кажется все же нашел статью которая смогла мне объяснить как это должно работать.
    rafox@wb-test-python:/home/wb_api/WB_API_D01$ systemctl status system_wb.service
    ● system_wb.service - WB_API
         Loaded: loaded (/etc/systemd/system/system_wb.service; enabled; vendor preset: enabled)
         Active: active (running) since Sat 2024-07-13 14:47:03 UTC; 22min ago
       Main PID: 1519 (python3)
          Tasks: 1 (limit: 1010)
         Memory: 20.8M
            CPU: 317ms
         CGroup: /system.slice/system_wb.service
                 └─1519 /usr/bin/python3 /home/wb_api/WB_API_D01/main.py


    Однако рано я обрадовался(

    Судя по журналу sudo journalctl -xe -u

    Jul 13 14:26:40 wb-test-python systemd[1]: Stopped WB_API.
    ░░ Subject: A stop job for unit system_wb.service has finished
    ░░ Defined-By: systemd
    ░░ Support: http://www.ubuntu.com/support
    ░░
    ░░ A stop job for unit system_wb.service has finished.
    ░░
    ░░ The job identifier is 2526 and the job result is done.
    Jul 13 14:26:40 wb-test-python systemd[1]: system_wb.service: Start request repeated too quickly.
    Jul 13 14:26:40 wb-test-python systemd[1]: system_wb.service: Failed with result 'exit-code'.
    ░░ Subject: Unit failed
    ░░ Defined-By: systemd
    ░░ Support: http://www.ubuntu.com/support
    ░░
    ░░ The unit system_wb.service has entered the 'failed' state with result 'exit-code'.
    Jul 13 14:26:40 wb-test-python systemd[1]: Failed to start WB_API.
    ░░ Subject: A start job for unit system_wb.service has failed
    ░░ Defined-By: systemd
    ░░ Support: http://www.ubuntu.com/support
    ░░
    ░░ A start job for unit system_wb.service has finished with a failure.
    ░░
    ░░ The job identifier is 2526 and the job result is failed.
    Jul 13 14:47:03 wb-test-python systemd[1]: Started WB_API.
    ░░ Subject: A start job for unit system_wb.service has finished successfully
    ░░ Defined-By: systemd
    ░░ Support: http://www.ubuntu.com/support
    ░░
    ░░ A start job for unit system_wb.service has finished successfully.
    ░░
    ░░ The job identifier is 2758.
    Jul 13 15:10:51 wb-test-python systemd[1]: Stopping WB_API...
    ░░ Subject: A stop job for unit system_wb.service has begun execution
    ░░ Defined-By: systemd
    ░░ Support: http://www.ubuntu.com/support
    ░░
    ░░ A stop job for unit system_wb.service has begun execution.
    ░░
    ░░ The job identifier is 3439.
    Jul 13 15:10:51 wb-test-python systemd[1]: system_wb.service: Deactivated successfully.
    ░░ Subject: Unit succeeded
    ░░ Defined-By: systemd
    ░░ Support: http://www.ubuntu.com/support
    ░░
    ░░ The unit system_wb.service has successfully entered the 'dead' state.
    Jul 13 15:10:51 wb-test-python systemd[1]: Stopped WB_API.
    ░░ Subject: A stop job for unit system_wb.service has finished
    ░░ Defined-By: systemd
    ░░ Support: http://www.ubuntu.com/support
    ░░
    ░░ A stop job for unit system_wb.service has finished.
    ░░
    ░░ The job identifier is 3439 and the job result is done.
    -- Boot 4e3c7ccde73440cd8244179bfcd4df4e --
    Jul 13 15:11:51 wb-test-python systemd[1]: Started WB_API.
    ░░ Subject: A start job for unit system_wb.service has finished successfully
    ░░ Defined-By: systemd
    ░░ Support: http://www.ubuntu.com/support
    ░░
    ░░ A start job for unit system_wb.service has finished successfully.
    ░░
    ░░ The job identifier is 171.
    Написано
  • Python - Telebot как реализовать метод отложенных постов?

    Razgildai
    @Razgildai Автор вопроса
    Totem, Смотрел, pyrogram наследует большую часть методов оттуда(либо вообще все эти библиотеки, так или иначе наследуют методы и классы друг у друга).
    У telethon есть точно такой же атрибут schedule_date в методе send_message.

    https://docs.telethon.dev/en/stable/modules/client...
  • Python - Telebot как реализовать метод отложенных постов?

    Razgildai
    @Razgildai Автор вопроса
    Totem, Спасибо!) Покурил пару часов документации по pyrogram, благо ребята самые самые стандартные методы снабдили подробным описанием, кое как, но получилось что то.
    Сейчас уже воюю с методом для создания кнопочек в постах.)

    P.S. Методом проб и ошибок выяснено, что боты не могут отправлять запланированные сообщения, а авторизованные пользователи могут. Но вот авторизованные пользователи не могут отправлять сообщения с кнопками, а боты могут. Дилемма века)

    Оставлю тут кусочек кода, который позволяет создавать отложенный пост в тг, вдруг кому пригодится.)
    from pyrogram import Client, types, raw
    from settings import *
    from _datetime import datetime
    
    app = Client(name=name_uset_admin, api_id=api_id, api_hash=api_hash)
    
    async def main(image, date, button):
        async with app:
            await app.send_photo(channel, photo=image, caption="Set Total", schedule_date=date, reply_markup=button)
    
    date = datetime(year=2022, month=6, day=17, hour=00, minute=9)
    image = "url image"
    
    app.run(main(image, date))
  • Python - Telebot как реализовать метод отложенных постов?

    Razgildai
    @Razgildai Автор вопроса
    Totem, Благодарю. Правда как я понял по описанию, что telethon. что pyrogram это некие асинхронные методы работы с ТГ, а я пока, увы, не дошел до такого. Только-только ООП прошел с методами и классами) Но все равно спасибо, почитаю, мб смогу понять что и как там.)
  • Python - Telebot как реализовать метод отложенных постов?

    Razgildai
    @Razgildai Автор вопроса
    Михаил Кростелев, благодарю. Установил, открыл документацию, сполз под стол от кол-ва методов. Попробую ознакомится, возможно смогу решить свой вопрос с помощью этой библиотеки.
  • Python - Telebot как реализовать метод отложенных постов?

    Razgildai
    @Razgildai Автор вопроса
    shurshur, не знаете какой нибудь подходящей библиотеки для этого?
    Гугл не помогает найти ответ. Решение через бота тг не является критичным. Его я взял как первую пришедшую мне в голову идею.
  • Python - Telebot как реализовать метод отложенных постов?

    Razgildai
    @Razgildai Автор вопроса
    Рамис, это вариант когда сообщения будут отправятся в тг напрямую. Я же про другое имею ввиду.
    Что бы скрипт после запуска создавал в канале ТГ к пример 2-5 постов которые падают в "Отложенные" в самом канале.
    62aa267001b63433070107.png
  • Хотел написать бота с ютуба, но у меня не работает, выдаёт ошибку. Как ее исправить?

    Razgildai
    @Razgildai
    Пётр Пнев, для этого бота нужно куда-нибудь(сервер) залить. Что бы запустить бота уже на сервере который будет работать постоянно. Т.к. вы запускаете исполняемый код на пк и работает он только когда этот код запущен.
  • Хотел написать бота с ютуба, но у меня не работает, выдаёт ошибку. Как ее исправить?

    Razgildai
    @Razgildai
    Пётр Пнев, так пропиши токен прямо вот сюда bot = telebot.TeleBot("TOKEN" )
    Вместо Токен.
  • Python - бот для телеграмм с погодой?

    Razgildai
    @Razgildai Автор вопроса
    JiMoon, спасибо. Пока ковыряю свой вариант что бы лучше понять что к чему, и столкнулся с новой проблемой. Не подскажете что именно делаю не так?
    Если в кратце, пытаюсь сделать так что бы при выводе текста пользователю с температурой, адекватно ставилось окончание в слове "градус/ов/а"" и столкнулся с тем что не пойму в какую часть кода нужно воткнуть проверку. По отдельности этот кусок работает адекватно(через pip pyowm), но стоит воткнуть его в этот бот, как тут же ловлю ошибку такого характера:
    Traceback (most recent call last):
      File "D:\Python\Code\test1\telegramBot.py", line 26, in <module>
        temp = int(temp)
    NameError: name 'temp' is not defined


    Сам кусок кода который пытаюсь воткнуть в бота выглядит так:
    temp = int(temp)
    tempMin = int(tempMin)
    tempMax = int(tempMax)
    WindSpeed = int(WindSpeed)
    
    if (temp >= 2 and temp <= 4) or (temp >= 22 and temp <= 24) or (temp >= 32 and temp <= 34) or (temp >= 42 and temp <= 44):
    	textGradus = " градуса"
    elif (temp >= 5 and temp <= 20) or (temp >= 25 and temp <= 30) or (temp == 0) or (temp >= 35 and temp <= 40) or (temp >= 45 and temp <= 50):
    	textGradus = " градусов"
    elif temp == 21 or temp == 31 or temp == 41 or temp == 51:
    	textGradus = " градус"
    elif (temp <= -2 and temp >= -4) or (temp <= -22 and temp >= -24) or (temp <= -32 and temp >= -34) or (temp <= -42 and temp >= -44):
    	textGradus = " градуса"
    elif (temp <= -5 and temp >= -20) or (temp <= -25 and temp >= -30) or (temp <= -35 and temp >= -40) or (temp <= -45 and temp >= -50):
    	textGradus = " градусов"
    elif temp == -21 or temp == -31 or temp == -41 or temp == -51:
    	textGradus = " градус"
    
    if (tempMin >= 2 and tempMin <= 4) or (tempMin >= 22 and tempMin <= 24) or (tempMin >= 32 and tempMin <= 34) or (tempMin >= 42 and tempMin <= 44):
    	textGradusMin = " градуса"
    elif (tempMin >= 5 and tempMin <= 20) or (tempMin >= 25 and tempMin <= 30) or (tempMin == 0) or (tempMin >= 35 and tempMin <= 40) or (tempMin >= 45 and tempMin <= 50):
    	textGradusMin = " градусов"
    elif tempMin == 21 or tempMin == 31 or tempMin == 41 or tempMin == 51:
    	textGradusMin = " градус"
    elif (tempMin <= -2 and tempMin >= -4) or (tempMin <= -22 and tempMin >= -24) or (tempMin <= -32 and tempMin >= -34) or (tempMin <= -42 and tempMin >= -44):
    	textGradusMin = " градуса"
    elif (tempMin <= -5 and tempMin >= -20) or (tempMin <= -25 and tempMin >= -30) or (tempMin <= -35 and tempMin >= -40) or (tempMin <= -45 and tempMin >= -50):
    	textGradusMin = " градусов"
    elif tempMin == -21 or tempMin == -31 or tempMin == -41 or tempMin == -51:
    	textGradusMin = " градус"
    
    if (tempMax >= 2 and tempMax <= 4) or (tempMax >= 22 and tempMax <= 24) or (tempMax >= 32 and tempMax <= 34) or (tempMax >= 42 and tempMax <= 44):
    	textGradusMax = " градуса"
    elif (tempMax >= 5 and tempMax <= 20) or (tempMax >= 25 and tempMax <= 30) or (tempMax == 0) or (tempMax >= 35 and tempMax <= 40) or (tempMax >= 45 and tempMax <= 50):
    	textGradusMax = " градусов"
    elif tempMax == 21 or tempMax == 31 or tempMax == 41 or tempMax == 51:
    	textGradusMax = " градус"
    elif (tempMax <= -2 and tempMax >= -4) or (tempMax <= -22 and tempMax >= -24) or (tempMax <= -32 and tempMax >= -34) or (tempMax <= -42 and tempMax >= -44):
    	textGradusMax = " градуса"
    elif (tempMax <= -5 and tempMax >= -20) or (tempMax <= -25 and tempMax >= -30) or (tempMax <= -35 and tempMax >= -40) or (tempMax <= -45 and tempMax >= -50):
    	textGradusMax = " градусов"
    elif tempMax == -21 or tempMax == -31 or tempMax == -41 or tempMax == -51:
    	textGradusMax = " градус"


    P.S. понимаю что не самый изящный вариант, но пока додумался только до такого.
    И я вроде как понимаю что он не может сравнить данные из переменной temp, потому что на момент старта бота, их еще нет, так как пользователь не дал город ему. Но как не пойму как заставить его не трогать этот кусок кода, пока он не получит данные.
  • Хотел написать бота с ютуба, но у меня не работает, выдаёт ошибку. Как ее исправить?

    Razgildai
    @Razgildai
    Пётр Пнев, я так понимаю ошибку выдает из-за "import config".
    Посмотри что у тебя в нем. Ибо я не очень понимаю что именно импортируется в него.)
    Я сам только начал изучать пайтон по урокам с тытрубы.)
  • Python - бот для телеграмм с погодой?

    Razgildai
    @Razgildai Автор вопроса
    Добавил способ ответа пользователю через bot.send_message(message.chat.id, answer)
    Но все равно что то не так.

    upd: решил вопрос, спасибо.
  • Python - бот для телеграмм с погодой?

    Razgildai
    @Razgildai Автор вопроса
    В этом случае ошибка:
    File "D:\Python\Code\test1\import telebot.py", line 16
    msg = bot.send_message(message.chat.id, "Пожалуйста, укажите ваш город."
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    SyntaxError: invalid syntax. Perhaps you forgot a comma?