Задать вопрос
  • Как можно оптимизировать этот код?

    Vindicar
    @Vindicar
    RTFM!
    Для начала определи, что у тебя занимает время - скачивание, или парсинг. Подходы будут разные.
    Если хочется в лоб решать задачу - то multiprocessing в руки, даёшь дочернему процессу URL, он тебе возвращает структуру данных. Главный процесс раздаёт URLы и собирает ответы в какое-то итоговое хранилище.
    Пример работы с пулом процессов.
    Ответ написан
    Комментировать
  • Как можно оптимизировать этот код?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Все не смотрел, но простыни типа:
    def get_contact(ids):
        for id in ids:
            template = f'https://etender.gov.az/api/events/{id}/contact-persons'
            try:
                response = requests.get(template, timeout=20)
                if response.status_code == 200:
                    data_list = response.json()
                    for data in data_list:
                        main_data['Full_name'].append(data.get('fullName', 'None') if data.get('fullName') else 'None')
                        main_data['Contact'].append(data.get('contact', 'None') if data.get('contact') else 'None')
                        main_data['Position'].append(data.get('position', 'None') if data.get('position') else 'None')
                        main_data['Phone_number'].append(data.get('phoneNumber', 'None') if data.get('phoneNumber') else 'None')
    
                else:
                    main_data['Full_name'].append('None')
                    main_data['Contact'].append('None')
                    main_data['Position'].append('None')
                    main_data['Phone_number'].append('None')
            except requests.Timeout:
                main_data['Full_name'].append('None')
                main_data['Contact'].append('None')
                main_data['Position'].append('None')
                main_data['Phone_number'].append('None')


    пишутся гораздо проще. Да и структуру данных я бы поправил. К примеру простыня выше заменяется более лаконичным кодом:
    main_data = []
    ...
    
    def get_contact(ids):
        for id in ids:
        	current_data = {'Full_name': 'None', 'Contact': 'None', 'Position': 'None',  'Phone_number': 'None'}
            template = f'https://etender.gov.az/api/events/{id}/contact-persons'
            try:
                response = requests.get(template, timeout=20)
                if response.status_code == 200:
                    data_list = response.json()
                    for (elem_to, elem_from) in [
                         ('Full_name', 'fullName'),
                         ('Contact', 'contact'),
                         ('Position', 'position'),
                         ('Phone_number', 'phoneNumber')
                    ]:
                    	current_data[elem_to] = data.get(elem_from, 'None')
             except requests.Timeout:
                   pass
            main_data.append(current_data)
    Ответ написан
    Комментировать
  • Как сделать логи в python?

    @Everything_is_bad
    Логи надо делать стандартным модулем logging, а не писать собственные кривые костыли
    Ответ написан
    2 комментария
  • Как автоматизировать telegramm с помощью python?

    @Everything_is_bad
    срочно нужна библиотека
    это не сюда, это на фриланс
    Ответ написан
    Комментировать
  • Как хранить данные таблицы содержащие описание множества товаров без ошибки "ValueError: All arrays must be of the same length"?

    Maksim_64
    @Maksim_64
    Data Analyst
    Все очень просто, когда ты пытаешься создать фрейм, у тебя списки разной длинны получаются. Вот код который выдаст точно такую же ошибку.
    (
        pd.DataFrame({
            'A':[1,2,3],
            'B':[100,200]
        })
    )

    А вот исправленная версия кода
    (
        pd.DataFrame({
            'A':pd.Series([1,2,3]),
            'B':pd.Series([100,200])
        })
    )
    Не достающий элемент он заполнит пропущенным значением.
    Ответ написан
    1 комментарий
  • Почему не совпадают хэши тг авторизации?

    @Everything_is_bad
    Не совпадают только по одной причине, ты их неправильно посчитал, разбираться в твоих вычислениях большинству будет лень, так что давай самостоятельно, можешь посмотреть как это делает тот же aiogram
    Ответ написан
    Комментировать
  • Как настроить del в python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну класс чуть переделать желательно бы. У тебя аргументы хранятся как кортеж (не мутабельный объект). Сменить для начала на список (мутабельный тип), и затем определить подходящий дандер метод. Например как то так.
    class MyClass():
        def __init__(self, *args):
            self.args = list(args)  
    
        def __delitem__(self, key):
            if key in self.args:
                self.args.remove(key)
    
    example = MyClass('ab', '12', 100, None)
    print(example.args)
    del example['12']
    print(example.args)

    Ну и там покрыть исключением если ключа нет и т.д.
    Ответ написан
    1 комментарий
  • Как импортировать контакты (клиентов из CRM) в группу Телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Такого способа нет. Поиск в Телеграме такого большого количества номеров гарантирует бан аккаунта. Кроме того, у многих пользователей номер может быть скрыт настройками приватности.

    Приавильное решение - разослать пользователем SMS со ссылкой на канал. Также канал пихать на сайт, в личный кабинет, письма о заказах, визитки менеджеров итд итп. Параллельно не забывать вести канал интересным контентом, не очень редко, чтобы канал не казался заброшенным, но не слишком часто, чтобы пользователей не задолбало и они не отписались (тем паче сейчас почти любой пользователь подписан как минимум на пару-тройку каналов заведомо интереснее вашего).
    Ответ написан
    Комментировать
  • Подойдет ли backend на python?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    какой фреймворк для подобной проблемы

    Django + DRF/Ninja + Nginx.
    Слышал про GIL, но не знаю, будут ли из-за него трудности.

    При средних нагрузках - будут, но обходится это относительно не сложно (многопроцессорность или внешние библиотеки). При больших нагрузках Python не используют.
    Справится ли этот backend с нагрузкой до 1000 запущенных процессов (операций работы с файлами, обрабатываемых на сервере единовременно)?

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

    Если есть сомнения в Ваших возможностях, то Java или Go справятся с этой задачей лучше.

    Но с другой стороны, Python позволит быстро написать MVP, а узкие места потом всегда можно переписать на Go.
    Ответ написан
    4 комментария
  • Как сделать, чтобы бот работал всегда в телеграмме?

    @Everything_is_bad
    Смотрю курс на ютубе по созданию ботов с помощью библиотеки aiogram 2, но у меня самого скачана aiogram 3.
    перестать смотреть протухшие курсы, а еще лучше перестать смотреть курсы на ютубе, новички не способны найти там нормальные
    Ответ написан
    Комментировать
  • Функции в питоне. Как избавиться от None?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Что возвращает функция print()?
    # s=print("Ниже нуля:", count1,'Выше нуля:',count,'Равно нулю',count2)
    s = f"Ниже нуля: {count1}, Выше нуля: {count}, Равно нулю: {count2}"

    https://stackoverflow.com/questions/28812851/why-i...
    https://stackoverflow.com/questions/7053652/why-is...
    Ответ написан
    1 комментарий
  • Можно ли писать div вне body?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    Это так.
    Браузер прожуёт довольно страшную хрень, которую напишет разработчик, но есть ровно ноль причин её писать сознательно.
    Ответ написан
    1 комментарий
  • Как исправить аномальное снижение производительности при импорте модуля в Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Создай 2 незвависимых процесса. Один пускай работает без ultralytics и передает
    результаты следующему процессу через файлы который уже в свою очередь
    будет подключать ultralytics.

    Современные стеки технологий очень сложны и забагованы и их иногда проще не фиксить
    а изолировать и просто принять как данность что они вот так вот работают.
    Ответ написан
    1 комментарий
  • Как получать информацию о подарках в прямых эфирах TikTok?

    Vindicar
    @Vindicar
    RTFM!
    Вот трудно вбить в гугл "API tiktok gift"?
    Вторая же ссылка ведёт на гитхаб подходящей под описание библиотеки. А там и примеры есть...
    Вторая ссылка, Карл!
    Ответ написан
    1 комментарий
  • Какой аналог CryptoJS.AES.encrypt от js?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Симметричный шифр типа AES параметризируется многими настройками. В частности
    - длина ключа и длина блока. Например 128, 192, 256
    - вектором инициализации. Это что-то вроде виртуального первого блока. IV.
    - режимом сцепления блоков (ECB, CFB, CBC ... e.t.c.) в данном случае исходник на Python явным образом нам указывает и режим ECB является вобщем-то самым плохим и нежелательным для нужд криптографии.
    (на этот режим а в JS берется какое-то умолчание).
    - если мы генерируем ключ на основе парольной фразы то нам должен быть известен этот метод. Это не
    всегда преобразование символов в UTF-8. Могут быть нюансы.

    Для выравнивания хвоста открытого текста по границе блока есть еще режимы padding-a.
    Подозреваю что там - несколько вариантов может быть. Это - тоже надо прояснить.

    Поэтому автор должен взять все параметры. Привести их к общему знаменателю и убрать все
    defaults на явные параметры чтоб было все одинаково. Тогда и результат дешифрования будет
    ожидаемый.
    Ответ написан
    Комментировать
  • Как правильно заказать разработку по для контроллера?

    VoidVolker
    @VoidVolker Куратор тега Железо
    Dark side eye. А у нас печеньки! А у вас?
    1. Описать что у вас за система - основные характеристики и какие задачи она решает.
    2. Каким именно оборудованием в ней необходимо управлять и с помощью чего (и почему именно).
    3. Описать что именно вы хотите от системы управления - автоматическое управление, ручное, дистанционное и прочее.
    4. Сформировать краткое ТЗ: есть вот такое-то оборудование и такой-то контроллер, надо к нему написать прошивку или разработать плату и написать прошивку, которая делает то-то и то-то.
    5. Сформировать детальное ТЗ со всеми деталями - что, как, где, почему и зачем. Если сами не можете - нанять опытного консультанта, который либо поможет либо сам составит его.
    6. Далее идете на https://freelance.habr.com
    7. Размещаете там заказ с кратким ТЗ. Если детальное ТЗ не секрет - отдельным ПДФ файлом выкладываете. Ключевые слова: разработка микроконтроллеров и/или ПО для микроконтроллеров, встраиваемая разработка.

    ЯП в МК обычно С/С++. В очень редких случаях используется что-то еще. Специалист - разработчик ПО для микроконтроллеров или встраиваемых систем.
    Ответ написан
    5 комментариев
  • Как переслать медиагруппу в Aiogram? Есть ли готовые решения?

    Wispik
    @Wispik
    На aiogram 2 делал так, через middleware:
    class AlbumMiddleware(BaseMiddleware):
        """This middleware is for capturing media groups."""
    
        album_data: dict = {}
    
        def __init__(self, latency = 0.6):
            """
            You can provide custom latency to make sure
            albums are handled properly in highload.
            """
            self.latency = latency
            super().__init__()
    
        async def on_process_message(self, message: types.Message, data: dict):
            if not message.media_group_id:
                if message.photo :
                    data["one_photo"] = message
                elif message.animation or message.video or message.video_note or message.voice or message.audio:
                    data["album"] = [message]
                return
            try:
                self.album_data[message.media_group_id].append(message)
                raise CancelHandler()  # Tell aiogram to cancel handler for this group element
            except KeyError:
                self.album_data[message.media_group_id] = [message]
                await asyncio.sleep(self.latency)
    
                message.conf["is_last"] = True
                data["album"] = self.album_data[message.media_group_id]
    
        async def on_post_process_message(self, message: types.Message, result: dict, data: dict):
            """Clean up after handling our album."""
            if message.media_group_id and message.conf.get("is_last"):
                del self.album_data[message.media_group_id]

    И потом при обработке сообщения, будет 2 переменные album, one_photo:
    async def func(
        message: types.Message,
        album: Optional[List[types.Message]] = None,
        one_photo: Optional[types.Message] = None
    ):

    если в сообщении только одна картинка, она будет в one_photo, в остальном случае все будет в album
    Ответ написан
    2 комментария
  • Как генерировать крипто-кошельки для оплаты?

    @maksam07
    Есть как готовые платежные решения, которые генерируют уникальный кошельки, так и свои собственные кошельки, но там значительно больше разработки. Один из доступных вариантов - westwallet
    Ответ написан
  • Выдает ошибку NameError: name 'send' is not defined?

    @nozzy
    Symfony, Laravel, SQL, Python, Telegram
    message.send("@тгюзернейм" f"отк {message.text}")
    Ответ написан
    Комментировать