Интеграция FAST API и ZennoPoster: запуск и вызов функций из Python

volody00

Client
Регистрация
06.09.2016
Сообщения
981
Благодарностей
1 077
Баллы
93

133851

В прошлом конкурсе @KolkaPetkinSyn показал нам, как можно использовать python в зеннопостер с помощью exe файлов. В этой же статье я хочу показать еще один способ с разворачиванием своего API. Это гораздо удобнее (по моему мнению) если вам надо не просто вызывать какую-то программу, а дергать конкретные функции.

Суть в следующем:
  • Пишем какие-то методы на python с помощью нейросетей
  • Разворачиваем API на python
  • В результате будем посылать запросы вроде http://127.0.0.1:8000/upper/?name={-Variable.name-}, а на выходе получать результат в переменную

Пишем код в deepseek

Я решил продемонстрировать все на простом примере. У нас будет программа, где мы на входе подаем pdf файл, а на выходе получаем запароленный pdf.

Иду в deepseek и пишу промпт: “с помощью библиотеки PyPDF2 напиши функцию, которая будет добавлять пароль на pdf файл”

Открываю vs code, открываю терминал (вверху Terminal -> New Terminal) и устанавливаю библиотеку
pip install PyPDF2



Создаем файл test.py (правая кнопка мыши по левой панели -> new file) и вставляем код:

Python:
from PyPDF2 import PdfReader, PdfWriter

def add_password_to_pdf(input_pdf_path: str, output_pdf_path: str, password: str) -> None:
    """Ваша функция для добавления пароля к PDF"""
    reader = PdfReader(input_pdf_path)
    writer = PdfWriter()

    for page in reader.pages:
        writer.add_page(page)

    writer.encrypt(password)

    with open(output_pdf_path, "wb") as f:
        writer.write(f)

add_password_to_pdf('Python.pdf', 'output.pdf', '123')
Запускаем его прописав в терминале
python [URL='http://test.py?roistat_visit=1569852']test.py[/URL]
Как убедились, что все работает, идем поднимать API.

Реализуем API


Использовать будем Fast API.
Устанавливаем библиотеки
pip install fastapi uvicorn PyPDF2 python-multipart
Давайте сначала разберемся на простом примере. Создаем файл testing.py и пишем свой первый код:
Python:
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse

app = FastAPI()

# вот эту часть меняем, остальное просто копируем
@app.get("/upper/", response_class=PlainTextResponse)
async def upper_text(name: str):
    return name.upper()

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
Запускаем в терминале. Если у вас как на скрине ниже то сервер успешно запустился

Теперь идем в зеннопостер, создаем кубик GET

Вот и все! Теперь мы можем посылать GET запрос, передавая какое-то значение, а на выходе получаю строку в верхнем регистре.

А как нам использовать написанную ранее add_password_to_pdf? На самом деле все, что нам нужно - это вместо return name.upper() вызвать add_password_to_pdf().

Код:
Python:
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse
from PyPDF2 import PdfReader, PdfWriter

def add_password_to_pdf(input_pdf_path: str, output_pdf_path: str, password: str) -> None:
    """Ваша функция для добавления пароля к PDF"""
    reader = PdfReader(input_pdf_path)
    writer = PdfWriter()

    for page in reader.pages:
        writer.add_page(page)

    writer.encrypt(password)

    with open(output_pdf_path, "wb") as f:
        writer.write(f)

app = FastAPI()

# вот эту часть меняем, остальное просто копируем
@app.get("/upper/", response_class=PlainTextResponse)
async def upper_text(input: str, output: str, password: str):
    add_password_to_pdf(input, output, password)
    return "ok"

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
Кубик:



Перезапускаем сервер (сначала ctrl+C, чтобы остановить, а затем как обычно python testing.py) , пробуем и все работает.

Это если у вас и python и ZennoPoster работают на одном ПК. Если они на разных ПК, то вам нужно сначала из зенки отправить файл на сервер -> там его принять -> создать файл с паролем -> отправить обратно в зеннопостер -> сохранить файл на пк через зеннопостер. Тут мы будем уже использовать POST запрос. Расписывать долго, образец есть в приложенном шаблоне.

На этом все. Надеюсь, статья была полезна. Если что непонятно заснял еще видео, где я еще раз покажу то, что расписал тут уже на примере библиотеки.

 

Вложения

Последнее редактирование модератором:

Asmus003

Client
Регистрация
25.03.2018
Сообщения
294
Благодарностей
67
Баллы
28
а если нужно сделать несколько совершенно разных скриптов, как это реализовать? тут как я понимаю, запуск 1 скрипта с разными параметрами. и тогда что, на скриптов надо поднимать 10 серверов?
 

volody00

Client
Регистрация
06.09.2016
Сообщения
981
Благодарностей
1 077
Баллы
93
а если нужно сделать несколько совершенно разных скриптов, как это реализовать? тут как я понимаю, запуск 1 скрипта с разными параметрами. и тогда что, на скриптов надо поднимать 10 серверов?
Не надо тебе 10 серверов. Я не думаю, что у тебя там скрипты на десятки тысяч строк кода. По файлам и функциям раскидываешь и всё. Deepseek поспрашивай. Или если есть конкретный пример, то можешь сюда скинуть свои скрипты, покажу как
 

Viking01

Client
Регистрация
19.08.2017
Сообщения
238
Благодарностей
176
Баллы
43
В зенке можно подключать проекты visual studio, а в проекте на c# есть уже готовые методы по выполнению питоновского кода.
и этот проект visual studio потом компилируется в одну dll для использования в зенке.
Не сочти за критику ни разу, это еще один вариант реализации твоей задумки)
 
  • Спасибо
Реакции: Metrix, bvbfor и volody00

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)