Ap2pGalar, я бы посмотрел в сторону интерфейса LibreOffice UNO. Есть штатная утилита unoconv, которая умеет через него конвертировать файлы, в справке не вижу никаких опций для фильтрации части документа, но там можно на python писать функционал, работающий с содержимым документа.
Допустим, у нас есть сайт, на котором есть фронт, бэк и целый ряд микросервисов.
Фронт - это js, тут понятно, его отдаёт, например, nginx статикой.
Бэк - приложение, которое запущено минимум в N+1 экземплярах, где N - минимальное количество для обеспечения обработки нагрузки.
Бэк может обращаться к различным другим сервисам внутри инфраструктуры. Скажем, вот сервис авторизации, единственный сервис с доступом к базе пользователей, другие даже пароля от этой базы не знают (и может даже по сети не имеют к ней доступа). Или вот сервис для обработки платёжных документов, который умеет общаться с банками и платёжными системами.
И каждый из них в нескольких экземплярах. При этом никакая часть инфраструктуры даже не задумывается о том, сколько каких сервисов и где они сейчас находятся. Они через discovery находят нужный сервис и его используют. При этом сервис может быть доступен как непосредственно (например, в DNS имя вроде auth-service.svc ведёт на N+1 разных IP), так и через прокси/балансер (nginx, envoy, haproxy...), который скрывает от других логику и практику выбора конкретного инстанса сервиса.
При падении инстанса сервиса система оркестрации сама его перезапускает и возвращает в кластер. При обновлении постепенно запускаются новые инстансы сервиса, но старые гасятся только когда новые переходят в состояние ready to serve requests (что проверяется через healthcheck), и только в таком состоянии на них начинают идти новые запросы.
Также если нужно поддерживать обратную совместимость, в сервисе могут быть микросервисы разных версий, в том числе и совсем старых, и на них распределяются запросы по каким-то правилам (например, как это принято, через передачу версии сервиса в URL, типа вызов /v1.17/method прокидывается в обработчик версии v1.17).
Можно ли в монолитное приложение загрузить десятки dll разных и даже одинаковых версий и распределять по ним запросы? А зачем? А вдруг в одной из старых версий будет баг, который повалит вообще всё, а не только эту старую версию?
Это можно сделать только с предоставлением пользователю хорошо защищённого и качественно опечатанного собственного оборудования. Помещать пользователю гонять предоставленное приложение в виртуалке/отладчике крайне сложно.
С какой это вообще всё целью? Нужно понимать, что на по-настоящему критически важной инфраструктуре никто в здравом уме не будет ковырять чужое приложение без каких-то невероятно важных причин.
Не видел такого вживую. Но, скорее всего, создаётся бот, которого не жалко, ему из-под юзера загружается файл, а затем бот генерит ссылку на скачивание файла со своим токеном и эту ссылку вставляют на сайт. Проблем тут много. И токен бота увести могут, и работает всё это не очень удобно-надёжно, надо постоянно отслеживать живость ссылок и делать новые. Большой вопрос насколько хорошо там работает перемотка видео...
Я уж не говорю о том, что там может быть на деле нет никакого Телеграма...
В любом случае, это решение не для чистого WordPress. Ну и Телеграм может легко начать с этим бороться, если слишком много умных будет. Лучше на такое не закладываться вообще.
vladimir_avshtolis, надо читать доку по клиентскому API (есть библиотеки типа tdlib, telethon), не путать с Bot API, это не на http-запросах.
Но знание id пользователя всё равно бесполезно, потому что пока пользователь не нажмёт /start, бот ничего не сможет с этим id сделать.
Для автоматизаций лучше использовать telegram web login или ещё какой-то механизм. Например, можно предложить пользователям из личного кабинета брать код, который посылать командой боту. Ещё можно, чтобы пользователь вводил боту телефон, бот посылал пользователю на этот телефон смс для верификации. В общем, варианты есть.
geiwoooj, нет, мы очень добрые и очень много помогаем посетителям этого сайта. И в данном случае мы настоятельно рекомендуем изучить базовые основы, тем более они не такие уж сложные.
pro100gram, разработчики тоже разные бывают, одни делают сайты, другие игры, третьи банковский софт... Что именно просело или выросло в этих условиях надо изучать отдельно. В том числе исследовать изменения вакансий на сайтах поиска работы, возможно, что по некоторым областям изменения можно будет увидеть прям сразу.
А ещё в тэгах есть фриланс. Вот с ним, полагаю, стало сложно, так как многие украинские фрилансеры работали на российских заказчиков. Да и рынок внутреннего фриланса наверняка уменьшился, а внешние рынки не каждому подойдут. Но и с фрилансом можно по сайтам бирж оценить обстановку.
pro100gram, изменилась прежде всего структура рынка. Например, услуги продвижения сайтов наверняка упали, потому как непосредственно для функционирования многих бизнесов они не особо нужны (в кратковременной перспективе уж точно). Поэтому начинать надо с того, что именно умеешь и уже тогда изучать, какие есть изменения в востребованности специалистов именно этого профиля. А не так вот, абстрактно-отвлечённо.
JSjun26, модель в django - это абстракция для прозрачного доступа к данным: создание, получение, фильтрация, изменение, удаление. Распаковку файлов надо выносить туда, где с ними идёт обработка, поскольку это элемент логики, а не абстракции данных. Например, пользователь загружает архив с фотографиями, сайт распаковывает их и создаёт для каждой фотки свой объект модели, который с помощью .save() сохраняется в базе.
JSjun26, вытащить распаковку zip из __str__ обязательно. Это как запускать ракеты при раскрывании объектива бинокля - совершенно нелогичное поведение. Тем более что всё осмысленное поведение этого метода - возврать self.name.
soremix, F3ANG, к слову, я считаю, что лучше не использовать id пользователя (from_user.id) как id чата (chat.id). Теоретически, они могут не совпадать не только для групповых чатов, и кто знает, не сделает ли Телеграм их когда-нибудь разными?
А так советую по пальца разобрать, что тут написано:
1. Сначала присваиваем a=0
2. Если текст сообщения '/get' - увеличиваем a на 1. То есть получается a=1
3. Если текст '/get' и a больше или равно 2... Но ведь в предыдущем пункте a=1, так что условие ложно...
И да, рекомендую также попробовать самому ЗАПУСТИТЬ "упрощённую версию", чтобы убедиться что она не просто не работает, а не работает совсем-совсем...