Как взять рандомную картинку из папки?

Maks Kraevoj

Client
Регистрация
26.04.2015
Сообщения
36
Реакции
0
Баллы
6
Всем привет! есть такой кусок C# кода, который отправляет изображение и подпись в телегу в бот или групу (нашел тут же на форуме)


C#:
Развернуть Свернуть Копировать
//картинка c описанием
string img = @"x:\PROJECTS_ZENNOPOSTER\k\img\";
string strToken = "";
string strChatId = "";
string proxy = "";
string message = "";
string mode = "&parse_mode=html";

string data = "--8d769bc78125cd4\n";
data += string.Format("Content-Disposition: form-data; name=\"photo\"; filename=\"{0}\"\n", img);
data += "Content-Type: application/octet-stream\n";
data += img;

string resRequest = ZennoPoster.HttpPost(
"https://api.telegram.org/bot" + strToken + "/sendPhoto?chat_id=" + strChatId+"&caption="+message+mode,
data,"multipart/form-data",proxy,"UTF-8",ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
30000,"","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",true,5,
new[] {"Host: api.telegram.org"});

У меня есть папка с картинками, подскажите пожалуйста как сделать так, чтобы бралась рандомная картинка из папки и вставлялась в эту переменную
C#:
Развернуть Свернуть Копировать
string img = @"x:\PROJECTS_ZENNOPOSTER\k\img\";
 
не проверял.... попробуй... думаю GPT-4 более лучший результат выдаст....

122265
 
  • Спасибо
Реакции: Maks Kraevoj
  • Спасибо
Реакции: Maks Kraevoj
Всем привет! есть такой кусок C# кода, который отправляет изображение и подпись в телегу в бот или групу (нашел тут же на форуме)


C#:
Развернуть Свернуть Копировать
//картинка c описанием
string img = @"x:\PROJECTS_ZENNOPOSTER\k\img\";
string strToken = "";
string strChatId = "";
string proxy = "";
string message = "";
string mode = "&parse_mode=html";

string data = "--8d769bc78125cd4\n";
data += string.Format("Content-Disposition: form-data; name=\"photo\"; filename=\"{0}\"\n", img);
data += "Content-Type: application/octet-stream\n";
data += img;

string resRequest = ZennoPoster.HttpPost(
"https://api.telegram.org/bot" + strToken + "/sendPhoto?chat_id=" + strChatId+"&caption="+message+mode,
data,"multipart/form-data",proxy,"UTF-8",ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
30000,"","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",true,5,
new[] {"Host: api.telegram.org"});

У меня есть папка с картинками, подскажите пожалуйста как сделать так, чтобы бралась рандомная картинка из папки и вставлялась в эту переменную
C#:
Развернуть Свернуть Копировать
string img = @"x:\PROJECTS_ZENNOPOSTER\k\img\";
Ответ от чат гпт 4
чат гпт 4:
Развернуть Свернуть Копировать
using System;
using System.IO;

public class RandomImageSelector
{
    public static void Main()
    {
        // Путь к папке с картинками
        string imgFolderPath = @"x:\PROJECTS_ZENNOPOSTER\k\img\";
       
        // Получаем все файлы в папке
        string[] files = Directory.GetFiles(imgFolderPath);

        // Проверяем, есть ли файлы в папке
        if (files.Length == 0)
        {
            Console.WriteLine("No images found in the specified folder.");
            return;
        }

        // Создаем экземпляр класса Random для выбора случайного файла
        Random rnd = new Random();
        string randomImage = files[rnd.Next(files.Length)];

        // Выводим выбранное изображение
        Console.WriteLine("Selected image: " + randomImage);

        // Используем выбранное изображение в переменной img
        string img = randomImage;

        // Остальной код
        string strToken = "";
        string strChatId = "";
        string proxy = "";
        string message = "";
        string mode = "&parse_mode=html";

        string data = "--8d769bc78125cd4\n";
        data += string.Format("Content-Disposition: form-data; name=\"photo\"; filename=\"{0}\"\n", img);
        data += "Content-Type: application/octet-stream\n";
        data += img;

        string resRequest = ZennoPoster.HttpPost(
        "https://api.telegram.org/bot" + strToken + "/sendPhoto?chat_id=" + strChatId + "&caption=" + message + mode,
        data, "multipart/form-data", proxy, "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
        30000, "", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0", true, 5,
        new[] { "Host: api.telegram.org" });

        // Выводим результат запроса
        Console.WriteLine("Response: " + resRequest);
    }
}


В этом коде:
  1. Используется Directory.GetFiles для получения всех файлов в указанной папке.
  2. Проверяется, что в папке есть файлы.
  3. Создается экземпляр класса Random для выбора случайного файла из списка.
  4. Выбранный случайный файл используется для отправки сообщения через API Telegram.
Этот код можно адаптировать для работы в вашей системе и интеграции с ZennoPoster.



Улучшенная версия кода

C#:
Развернуть Свернуть Копировать
using System;
using System.IO;

public class RandomImageSelector
{
    public static void Main()
    {
        try
        {
            // Путь к папке с картинками
            string imgFolderPath = @"x:\PROJECTS_ZENNOPOSTER\k\img\";

            // Получаем все файлы в папке
            string[] files = Directory.GetFiles(imgFolderPath, "*.*", SearchOption.TopDirectoryOnly);

            // Проверяем, есть ли файлы в папке
            if (files.Length == 0)
            {
                Console.WriteLine("No images found in the specified folder.");
                return;
            }

            // Создаем экземпляр класса Random для выбора случайного файла
            Random rnd = new Random();
            string randomImage = files[rnd.Next(files.Length)];

            // Выводим выбранное изображение
            Console.WriteLine("Selected image: " + randomImage);

            // Используем выбранное изображение в переменной img
            string img = randomImage;

            // Остальной код
            string strToken = ""; // Убедитесь, что этот токен заполнен
            string strChatId = ""; // Убедитесь, что этот чат ID заполнен
            string proxy = ""; // Убедитесь, что прокси заполнен, если необходимо
            string message = "Your caption here"; // Ваше сообщение
            string mode = "&parse_mode=html";

            string boundary = "----8d769bc78125cd4";
            string data = $"--{boundary}\n";
            data += $"Content-Disposition: form-data; name=\"photo\"; filename=\"{Path.GetFileName(img)}\"\n";
            data += "Content-Type: application/octet-stream\n\n";
            data += File.ReadAllText(img);
            data += $"\n--{boundary}--";

            string url = $"https://api.telegram.org/bot{strToken}/sendPhoto?chat_id={strChatId}&caption={Uri.EscapeDataString(message)}{mode}";

            string resRequest = ZennoPoster.HttpPost(
                url,
                data,
                "multipart/form-data; boundary=" + boundary,
                proxy,
                "UTF-8",
                ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
                30000,
                "",
                "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",
                true,
                5,
                new[] { "Host: api.telegram.org" });

            // Выводим результат запроса
            Console.WriteLine("Response: " + resRequest);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
    }
}

В этом коде добавлены улучшения:
  1. Проверка на пустую папку: Код теперь проверяет, есть ли файлы в указанной папке, и выводит сообщение, если файлов нет.
  2. Использование Path.GetFileName: Улучшено формирование заголовка Content-Disposition для включения только имени файла.
  3. Чтение файла: Используется File.ReadAllText для чтения содержимого изображения. Возможно, вам потребуется File.ReadAllBytes для работы с двоичными данными.
  4. Формирование строки данных: Строка данных формируется более структурировано с использованием границы boundary.
  5. Escape данных: Uri.EscapeDataString используется для правильного форматирования caption.
Этот код должен быть более надежным и понятным. Убедитесь, что у вас есть действительные значения для strToken, strChatId, и что файл изображений читается корректно в вашем окружении.
 
Последнее редактирование:
  • Спасибо
Реакции: Maks Kraevoj
Ответ от чат гпт 4
чат гпт 4:
Развернуть Свернуть Копировать
using System;
using System.IO;

public class RandomImageSelector
{
    public static void Main()
    {
        // Путь к папке с картинками
        string imgFolderPath = @"x:\PROJECTS_ZENNOPOSTER\k\img\";
      
        // Получаем все файлы в папке
        string[] files = Directory.GetFiles(imgFolderPath);

        // Проверяем, есть ли файлы в папке
        if (files.Length == 0)
        {
            Console.WriteLine("No images found in the specified folder.");
            return;
        }

        // Создаем экземпляр класса Random для выбора случайного файла
        Random rnd = new Random();
        string randomImage = files[rnd.Next(files.Length)];

        // Выводим выбранное изображение
        Console.WriteLine("Selected image: " + randomImage);

        // Используем выбранное изображение в переменной img
        string img = randomImage;

        // Остальной код
        string strToken = "";
        string strChatId = "";
        string proxy = "";
        string message = "";
        string mode = "&parse_mode=html";

        string data = "--8d769bc78125cd4\n";
        data += string.Format("Content-Disposition: form-data; name=\"photo\"; filename=\"{0}\"\n", img);
        data += "Content-Type: application/octet-stream\n";
        data += img;

        string resRequest = ZennoPoster.HttpPost(
        "https://api.telegram.org/bot" + strToken + "/sendPhoto?chat_id=" + strChatId + "&caption=" + message + mode,
        data, "multipart/form-data", proxy, "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
        30000, "", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0", true, 5,
        new[] { "Host: api.telegram.org" });

        // Выводим результат запроса
        Console.WriteLine("Response: " + resRequest);
    }
}


В этом коде:
  1. Используется Directory.GetFiles для получения всех файлов в указанной папке.
  2. Проверяется, что в папке есть файлы.
  3. Создается экземпляр класса Random для выбора случайного файла из списка.
  4. Выбранный случайный файл используется для отправки сообщения через API Telegram.
Этот код можно адаптировать для работы в вашей системе и интеграции с ZennoPoster.



Улучшенная версия кода

C#:
Развернуть Свернуть Копировать
using System;
using System.IO;

public class RandomImageSelector
{
    public static void Main()
    {
        try
        {
            // Путь к папке с картинками
            string imgFolderPath = @"x:\PROJECTS_ZENNOPOSTER\k\img\";

            // Получаем все файлы в папке
            string[] files = Directory.GetFiles(imgFolderPath, "*.*", SearchOption.TopDirectoryOnly);

            // Проверяем, есть ли файлы в папке
            if (files.Length == 0)
            {
                Console.WriteLine("No images found in the specified folder.");
                return;
            }

            // Создаем экземпляр класса Random для выбора случайного файла
            Random rnd = new Random();
            string randomImage = files[rnd.Next(files.Length)];

            // Выводим выбранное изображение
            Console.WriteLine("Selected image: " + randomImage);

            // Используем выбранное изображение в переменной img
            string img = randomImage;

            // Остальной код
            string strToken = ""; // Убедитесь, что этот токен заполнен
            string strChatId = ""; // Убедитесь, что этот чат ID заполнен
            string proxy = ""; // Убедитесь, что прокси заполнен, если необходимо
            string message = "Your caption here"; // Ваше сообщение
            string mode = "&parse_mode=html";

            string boundary = "----8d769bc78125cd4";
            string data = $"--{boundary}\n";
            data += $"Content-Disposition: form-data; name=\"photo\"; filename=\"{Path.GetFileName(img)}\"\n";
            data += "Content-Type: application/octet-stream\n\n";
            data += File.ReadAllText(img);
            data += $"\n--{boundary}--";

            string url = $"https://api.telegram.org/bot{strToken}/sendPhoto?chat_id={strChatId}&caption={Uri.EscapeDataString(message)}{mode}";

            string resRequest = ZennoPoster.HttpPost(
                url,
                data,
                "multipart/form-data; boundary=" + boundary,
                proxy,
                "UTF-8",
                ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
                30000,
                "",
                "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",
                true,
                5,
                new[] { "Host: api.telegram.org" });

            // Выводим результат запроса
            Console.WriteLine("Response: " + resRequest);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
    }
}

В этом коде добавлены улучшения:
  1. Проверка на пустую папку: Код теперь проверяет, есть ли файлы в указанной папке, и выводит сообщение, если файлов нет.
  2. Использование Path.GetFileName: Улучшено формирование заголовка Content-Disposition для включения только имени файла.
  3. Чтение файла: Используется File.ReadAllText для чтения содержимого изображения. Возможно, вам потребуется File.ReadAllBytes для работы с двоичными данными.
  4. Формирование строки данных: Строка данных формируется более структурировано с использованием границы boundary.
  5. Escape данных: Uri.EscapeDataString используется для правильного форматирования caption.
Этот код должен быть более надежным и понятным. Убедитесь, что у вас есть действительные значения для strToken, strChatId, и что файл изображений читается корректно в вашем окружении.
спасибо, а этот код вставить нужно в кубик свой C# код?
 
В самом первом ответе есть уже развернутый ответ на вопрос.

C#:
Развернуть Свернуть Копировать
string pathToPictures = @"x:\PROJECTS_ZENNOPOSTER\k\img\"; // Путь к папке с картинками
string img = Directory.GetFiles(pathToPictures, "*.*", SearchOption.TopDirectoryOnly)
                      .Where(file => file.ToLower().EndsWith("jpg") ||
                                      file.ToLower().EndsWith("jpeg") ||
                                     file.ToLower().EndsWith("png") ||
                                     file.ToLower().EndsWith("gif") ||
                                     file.ToLower().EndsWith("bmp"))
                      .OrderBy(x => Guid.NewGuid())
                      .FirstOrDefault();
if (string.IsNullOrEmpty(img)) {
    // Если файлы не найдены, выбросим исключение    
throw new Exception("No image files found in the specified directory."); 
} 
else 
{   
 // Сохранение пути случайного изображения в переменную ZennoPoster    
project.Variables["imgPath"].Value = img;  // Кладем путь к конечной картинке в переменную проекта imgPath
}

Благо, гпт, с такими легкими задачами действительно справляется легко и быстро.
 
  • Спасибо
Реакции: Maks Kraevoj
Всем спасибо) Все работает
 

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