• Как отсортировать в алфавитном порядке элементы внутри объекта типа JsonValue?

    @OZHENN Автор вопроса
    Василий Банников, Спасибо за наводку - сделал все равно по дебильному и по своему :(( Как говорится главное работает а потом уже если вдруг потребуется "причешу".

    Вот конечный код сортировки видео в выбранном плейлисте:
    /**
     * VK Video Sorting
     *
     * Этот Rust код представляет собой программу для взаимодействия с VK (VKontakte) API, которая выполняет следующие действия:
     * 1. Получает список альбомов пользователя VK с помощью метода "video.getAlbums".
     * 2. Запрашивает у пользователя ID альбома, в котором необходимо отсортировать видеоролики.
     * 3. Получает список видеороликов из выбранного альбома с помощью метода "video.get".
     * 4. Сортирует видеоролики в альбоме на основе заголовков с учетом числовых префиксов.
     * 5. Переупорядочивает видеоролики в альбоме в соответствии с отсортированным порядком.
     *
     * Запуск:
     * - Замените "placeholder" на свой токен VK API и желаемый owner_id для взаимодействия с VK API.
     * - Запустите программу, и она выведет список альбомов, запросит ID альбома для сортировки видеороликов,
     *   а затем выведет список видеороликов в новом порядке после сортировки.
     * 
     */
    
    // Импорт необходимых крейтов и модулей
    #[macro_use]
    extern crate vkapi;
    use regex::Regex;
    use std::{cmp::Ordering, io, thread::sleep, time::Duration};
    use tokio;
    #[tokio::main]
    
    // Функция для сравнения заголовков с числовыми префиксами
    async fn main() {
        // Создание нового экземпляра клиента VK API с версией "5.131" и языком "ru"
        let mut api = vkapi::VK::new("5.131", "ru");
    
        // Установка токена доступа для взаимодействия с VK API (замените placeholder на свой токен)
        api.set_access_token("placeholder".to_string());
    
        // Создание параметров запроса для получения списка альбомов пользователя с id "placeholder" (замените placeholder на желаемый owner_id)
        let mut get_albums_params = param! {"owner_id" => "placeholder"};
    
        // Выполнение запроса к VK API для получения списка альбомов пользователя
        let get_albums_response = api
            .request("video.getAlbums", &mut get_albums_params)
            .await
            .unwrap();
    
        let time_to_sleep = Duration::from_secs(5);
        // Асинхронная задержка в течение 5 секунд
        sleep(time_to_sleep);
    
        // Вывод найденных альбомов на экран
        println!("Найденные альбомы:");
        for album in get_albums_response["response"]["items"].members() {
            println!("Название: {}, ID: {}", album["title"], album["id"]);
        }
    
        // Вывод сообщения пользователю для запроса ID выбранного альбома для сортировки видеороликов
        println!("Укажите ID альбома, в котором будем сортировать видеоролики:");
        let mut selected_album_id = String::new();
    
        // Чтение ввода пользователя из стандартного потока ввода (stdin)
        match io::stdin().read_line(&mut selected_album_id) {
            Ok(_) => {
                println!("Хорошо. Вы выбрали альбом с ID {}", selected_album_id);
            }
            Err(error) => {
                println!("Ошибка чтения ввода: {}", error);
            }
        }
    
        // Создание параметров запроса для получения списка видеороликов из выбранного альбома
        let mut get_album_videos_params = param! {"album_id" => &selected_album_id};
    
        // Выполнение запроса к VK API для получения списка видеороликов из выбранного альбома
        let get_album_videos_response = api
            .request("video.get", &mut get_album_videos_params)
            .await
            .unwrap();
    
        // Определение структуры для представления информации о видео (ID и заголовок)
        struct Video {
            id: i32,
            title: String,
        }
    
        let mut sorted_videos: Vec<Video> = Vec::new();
        // Вывод на экран видеороликов, находящихся в выбранном альбоме
        println!("Видео, которые находятся в выбранном вами альбоме:\n");
        for video in get_album_videos_response["response"]["items"].members() {
            // Создание объекта Video для каждого видео с ID и заголовком
            let vid = Video {
                id: video["id"].as_i32().unwrap(),
                title: video["title"].as_str().unwrap().to_string(),
            };
    
            sorted_videos.push(vid);
        }
    
        // Функция для сравнения заголовков с числовыми префиксами
        fn compare_titles(title_a: &str, title_b: &str) -> Ordering {
            // Определение регулярного выражения для поиска числовых префиксов в начале заголовков
            let re = Regex::new(r"^\d+").unwrap();
    
            // Извлечение числовых префиксов из обоих заголовков (если они присутствуют)
            let num_a = re
                .find(title_a)
                .map(|num_str| num_str.as_str().parse::<i32>().unwrap());
            let num_b = re
                .find(title_b)
                .map(|num_str| num_str.as_str().parse::<i32>().unwrap());
    
            // Сравнение числовых префиксов как целых чисел
            match (num_a, num_b) {
                (Some(num_a), Some(num_b)) => num_a.cmp(&num_b),
                _ => title_a.cmp(title_b),
            }
        }
    
        // Сортировка видеороликов на основе заголовков
        sorted_videos.sort_by(|a, b| compare_titles(&a.title, &b.title));
    
        // Вывод отсортированного списка видеороликов на экран
        sorted_videos
            .iter()
            .for_each(|video| println!("{} {}", video.title, video.id));
    
        // Создание переменной "last_processed_video_id" типа i32 и инициализация её значением "0"
        let mut last_processed_video_id: String;
    
        // Создание параметров запроса для переупорядочивания видеороликов в альбоме
        let mut reorder_videos_first_params = param! {"owner_id" => "placeholder",
            "album_id" => &selected_album_id,
            "video_id" => &sorted_videos[0].id.to_string(),
            "before_video_id" => &get_album_videos_response["response"]["items"][0]["id"].to_string(),
            "before_owner_id" => "placeholder"
        };
    
        // Выполнение запроса к VK API для переупорядочивания первого видео в альбоме
        let reorder_videos_first_response = api
            .request("video.reorderVideos", &mut reorder_videos_first_params)
            .await
            .unwrap();
        println!("{}", reorder_videos_first_response);
    
        // Сохранение ID первого видео в качестве последнего обработанного ID виде
    
        last_processed_video_id = sorted_videos[0].id.to_string();
        println!("{}", sorted_videos[0].id);
    
        // Асинхронная задержка в течение 5 секунд
        sleep(time_to_sleep);
    
        // Переупорядочивание остальных видеороликов в альбоме
        for (index, video) in sorted_videos.iter().enumerate() {
            if index == 0 {
                // Пропустить первый элемент (уже обработан)
                continue;
            }
            let mut p = param! {"owner_id" => "placeholder",
                "album_id" => &selected_album_id,
                "video_id" => &video.id.to_string(),
                "after_video_id" => &last_processed_video_id,
                "after_owner_id" => "placeholder"
            };
            // Выполнение запроса к VK API для переупорядочивания видеоролика
            let res = api.request("video.reorderVideos", &mut p).await.unwrap();
            println!("{}", res);
            println!("{} id:{}", video.title, video.id);
            last_processed_video_id = video.id.to_string();
            // Асинхронная задержка в течение 5 секунд
            sleep(time_to_sleep);
        }
    }


    Нужно было отсортировать данный плейлист.
    Написано
  • Как отсортировать в алфавитном порядке элементы внутри объекта типа JsonValue?

    @OZHENN Автор вопроса
    Василий Банников, лучше к сожалению найти не смог. Запросы к API проходят (те что проверял) - ну и славно.
    Написано
  • Как отсортировать в алфавитном порядке элементы внутри объекта типа JsonValue?

    @OZHENN Автор вопроса
    [package]
    name = "vk-tools"
    version = "0.1.0"
    edition = "2021"
    
    # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
    
    [dependencies]
    tokio = { version = "0.2", features = ["full"] }
    vkapi = "0.2.0"
    Написано
  • Как отсортировать видео в альбоме в алфавитном порядке в vk используя python?

    @OZHENN Автор вопроса
    Сергей Кузнецов, эх, если бы. Я не с проста приложил ссылку на доки. Там нельзя одним запросом отсортировать. Там нужно каждому(каждому!!!) видео из списка отдельно менять позицию. Помимо этого оказывается api библа не содержит описания метода video.reorderVideos. Поэтому нужно использовать другую - vk_api и использовать execute метод чтобы передать в теле code джавахрип подобный код.
    Написано
  • Как составить программу обучения?

    @OZHENN Автор вопроса
    Выбор пал на js и ts исключительно из-за внутреннего рынка... Смотришь вакансии а там php+react... сплошное уныние. Так бы изучал какой-нибудь Dart + Flutter в свое удовольствие + Python использовал бы для обработки данных с использованием AI)
  • Как получить ссылку на соседнюю ячейку(справа) в libre?

    @OZHENN Автор вопроса
    Спасибо.

    Немного подправил:
    =SUM(INDIRECT("B"&ROW())-INDIRECT("B"&ROW()-1)) + STYLE(IF(CURRENT()>8500000; "green"; "red"))
  • Как получить ссылку на соседнюю ячейку(справа) в libre?

    @OZHENN Автор вопроса
    Первый раз в жизни открываю подобные программы для работы с документами... Сделал достаточно подебильному т.к срочняк: =SUM(OFFSET(B1;ROW()-1;0)-OFFSET(B1;ROW()-2;0)).

    Слепил из того что было ибо времени все доки кошмарить нету.
  • Как снизить энергопотребление ПК в 2 раза?

    @OZHENN Автор вопроса
    а реально ли включить undervolt в 'один клик'?
  • Для чего используют прокси на стороне сервера?

    @OZHENN Автор вопроса
    Ternick, больше 10$ в мес не дам. Хотелось бы в замен получить от 1к рабочих адресов
  • Как сделать объект доступным во всех файлах без импорта?

    @OZHENN Автор вопроса
    нужно чтобы bot.command выполнилась перед bot.launch()
  • Как сделать объект доступным во всех файлах без импорта?

    @OZHENN Автор вопроса
    index.js
    import Telegraf from 'telegraf'
    
    const token = 'hdfgjkhdsfkjsdhfk'
    const bot = Telegraf(token)
    
    bot.launch()


    ./commands/test.command.js
    Тут должна быть функция хендлер
    Мне нужно просто из этого получить доступ к объекту который находится в index.js
    bot.command('test',ctx => console.log(ctx.user.id))
  • Как сделать объект доступным во всех файлах без импорта?

    @OZHENN Автор вопроса
    У меня задача заключается в том чтобы функционал разнести по разным файлам.

    Есть объект а у него есть хендлеры. Мне нужно хендлеры разкидать по разным файлам. Нужно чтобы все было стилистике ES6 и чтобы все эти файлы подхватились перед запуском метода launch.
  • Почему dimm2 отображается как dimm3?

    @OZHENN Автор вопроса
    longclaps, заметил этот глюк в iCue когда настраивал ЛГБТ подстветку