• Как человекообразно отсортировать json в python?

    @deliro
    In [1]: x=["1-1", "1-12", "1-2", "1-3"]
    
    In [2]: sorted(x, key=lambda t: tuple(map(int,t.split("-"))))
    Out[2]: ['1-1', '1-2', '1-3', '1-12']
    Ответ написан
    Комментировать
  • Парсинг сайта Яндекс.Музыка на Python, как?

    @duff89
    Вот реальный код, только что написан и проверен, защиты там нет:
    import requests
    
    headers = {
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,fi;q=0.6,nb;q=0.5,is;q=0.4,pt;q=0.3,ro;q=0.2,it;q=0.1,de;q=0.1',
        'Connection': 'keep-alive',
        'Referer': 'https://music.yandex.ru/chart',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
        'X-Current-UID': '403036463',
        'X-Requested-With': 'XMLHttpRequest',
        'X-Retpath-Y': 'https://music.yandex.ru/chart',
        'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Linux"',
    }
    
    params = {
        'what': 'chart',
        'lang': 'ru',
        'external-domain': 'music.yandex.ru',
        'overembed': 'false',
        'ncrnd': '0.23800355071570123',
    }
    response = requests.get('https://music.yandex.ru/handlers/main.jsx', params=params, headers=headers)
    chart = response.json()['chartPositions']
    for track in chart:
        position = track['track']['chart']['position']
        title = track['track']['title']
        author = track['track']['artists'][0]['name']
        print(f"N-{position} - {title} - {author}")

    Выход:
    N-1 - ЗА ДЕНЬГИ ДА - INSTASAMKA
    N-2 - Отключаю телефон - INSTASAMKA
    N-3 - Komarovo - DVRST
    N-4 - Кукла колдуна - Король и Шут
    N-5 - Ножевой - A.V.G
    N-6 - Лесник - Король и Шут
    ...
    Ответ написан
    2 комментария
  • Почему все говорят что писать ботов это сложно?

    Dr_Elvis
    @Dr_Elvis
    В гугле забанен
    Если нужно сделать Эхо-бот, то этого достаточно.
    Если чуть более интереснее, то тут нужно много логики, знание языка, библиотек. На этом как раз таки начинающие программисты и запинаются. Более-менее опытному программисту написать бота не сложно и везде в уроках пишут что это легко, но не упоминают о том что легко только если программист знает хотя бы основы или хотя бы есть желание их изучить.
    Ответ написан
    Комментировать
  • Почему все говорят что писать ботов это сложно?

    Vindicar
    @Vindicar
    RTFM!
    А сложность начинается, как только задачи, стоящие перед ботом, перерастают уровень примера в документации видеотуториале пятилетней давности.

    Нужно сделать несколько под-команд у команды. Напишу цепочку if-elif-else, делов то. Ой, а теперь простыня кода на пять экранов, в которой фиг чего найдёшь. Потому что нет привычки структурировать код.

    Нужно, чтобы несколько команд/событий формировали цепочку (сценарий). Например, пользователь отправил тре сообщения, первое с именем, второе с возрастом, третье с адресом. Ой, а как это сделать вообще? Не зная понятия "конечный автомат" (finite state machine, FSM), очень трудно догадаться, как тут поступить.

    Нужно, чтобы ботом могли пользоваться несколько человек. Ой, их данные перепутались! Потому что бот использует глобальные переменные.

    Нужно, чтобы бот выполнил длительную задачу, и написал сообщение, когда она выполнится. Не вопрос, напишу функцию, вызову её, а сразу после отправлю сообщение. Ой, а бот не отвечает! Потому что рабочий цикл asyncio занят этой длительной операцией и не может отреагировать на поступающие данные. Нужно иметь хорошее представление о том, как работает асинхронная программа.

    Нужно добавить боту графический интерфейс - админку. Ой, а работает или интерфейс, или сам бот! Потому что нужно представлять, как устроено большинство GUI-фреймворков, и как устроена асинхронное приложение. А заодно понимать многопоточность, вопросы синхронизации действий между двумя потоками, и особенности работы с asyncio в многопоточных приложениях. Потому что одним потоком тут обойтись будет очень непросто.

    Нужно хранить данные в БД. Ой, а почему у меня проблемы при записи в БД имени пользователя? А потому что погромист собирает SQL-запрос через форматирование строк. Надо было почитать доки, чтобы наткнуться на prepared statements, они же parameterized queries.

    Нужно хранить данные в БД. Вот только данные имеют связи многие-ко-многим. Я знаю! Я буду просто добавлять или удалять столбцы в таблицу! Потому что не освоены даже азы проектирования БД. Тут уже nuff said. И да, я такое видел на этом сайте.

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

    @Some-one
    Попробуй вот это:
    decision_ = []
    decision_formatted = ""
    for letter in list(decision):
        if(letter != "" and letter !="\n"):
            decision_.append(letter)
    decision_formatted = str(decision_)
    Ответ написан
    Комментировать
  • Как правильно задать addEventListener?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Когда элементы создаются-добавляются динамически, удобно использовать делегирование событий:
    слушать клики не на самих чекбоксах, а выше, на общем родителе, на этом settParent.

    Тогда не нужно вешать слушателя на каждый новый чекбокс.
    settParent.addEventListener('input', ({ target }) => console.log(target.value));
    Ответ написан
    Комментировать
  • Как добавить click event ко всем чекбоксам с определенным именем?

    otdameskapizm
    @otdameskapizm
    Помог ответ? Отметь решением...
    Вот так попробуйте
    const checkboxes = document.querySelectorAll('[name="firstChecks[]"]');
    checkboxes.forEach((elem) => {
      elem.addEventListener('change', (event) => {
        // Здесь логика
      });
    });
    Ответ написан
    1 комментарий
  • Как запустить приложение с локальной базой данных на другом пк?

    Почему не sqlite?
    Ответ написан
    Комментировать
  • Как правильно объединить два запроса в один?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    SELECT uid,
      (SELECT COUNT(`id`) FROM `ds` WHERE `uid`= uid ) AS count1,
      (SELECT COUNT(`id`) FROM `jh` WHERE `device_uid`= uid) AS count2
    Ответ написан
    Комментировать
  • Как узнать имя массива при foreach?

    foreach ($data as $name => $values) {
       echo 'Название массива: ', $name, PHP_EOL;
    }
    Ответ написан
    4 комментария