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

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\";
 

Ахилес

Client
Read only
Регистрация
11.11.2020
Сообщения
956
Благодарностей
393
Баллы
63
не проверял.... попробуй... думаю GPT-4 более лучший результат выдаст....

122265
 
  • Спасибо
Реакции: Maks Kraevoj

Maks Kraevoj

Client
Регистрация
26.04.2015
Сообщения
36
Благодарностей
0
Баллы
6

Ахилес

Client
Read only
Регистрация
11.11.2020
Сообщения
956
Благодарностей
393
Баллы
63
  • Спасибо
Реакции: Maks Kraevoj

Maks Kraevoj

Client
Регистрация
26.04.2015
Сообщения
36
Благодарностей
0
Баллы
6

jackmar

Client
Регистрация
11.08.2023
Сообщения
23
Благодарностей
3
Баллы
3
Всем привет! есть такой кусок 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

Maks Kraevoj

Client
Регистрация
26.04.2015
Сообщения
36
Благодарностей
0
Баллы
6
Ответ от чат гпт 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# код?
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 276
Благодарностей
622
Баллы
113
В самом первом ответе есть уже развернутый ответ на вопрос.

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

Maks Kraevoj

Client
Регистрация
26.04.2015
Сообщения
36
Благодарностей
0
Баллы
6
Всем спасибо) Все работает
 

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