и снова dll и маркет - страница 15

 
Реter Konow:
Что означает ошибка 401?

в яндекс вбиваешь "http 401" и там всё в деталях рассказано

 
Nikolai Karetnikov:

результат выполнения кода - "Webrequest4Voice (EURCHF,D1) Ошибка загрузки 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', код 401"

401 это server requires authentication

возьмите какой-нибудь эмулятор запросов (postman например) и сформируйте там нормальный запрос, потом это запрос переносите в mql.

или как написал Максим выше
 
Maxim Kuznetsov:

в яндекс вбиваешь "http 401" и там всё в деталях рассказано

А кто сказал, что ошибка http? ТС не пояснил, а я искать должен?)))
 

https://example-files.online-convert.com/audio/wav/example.wav

отсюда загрузилось без проблем 

Снимок3

и воспроизводит звук 

 
Alexsandr San:

https://example-files.online-convert.com/audio/wav/example.wav

отсюда загрузилось без проблем 


А насколько загруженный файл воспроизводим PlaySound, если его после загрузки сразу записать в папку Files? Там в коде пару строк добавить и уже можно проверить.
 
Реter Konow:
А насколько загруженный файл воспроизводим PlaySound, если его после загрузки сразу записать в папку Files? Там в коде пару строк добавить и уже можно проверить.

так он сразу в папку и загружается Files и всё работает звук

------------------------------------------------------------------

вот так я сделал 

он скачивается и сразу проигрывает 

         int filehandle=FileOpen("example.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл
            FileClose(filehandle);
            Sleep(1*1000);
            PlaySound("\\Files\\example.wav");
           }
 
Alexsandr San:

так он сразу в папку и загружается Files

Ок, а после этого вызов PlaySound в коде есть? Чтобы как только загрузил, сразу воспроизвел.
 
Maxim Kuznetsov:

Чтобы перевести запрос HTTP из опций curl в параметры WebRequest, надо:

1. в общих чертах, в википедии, посмотреть как устроен HTTP

2. в документации Curl глянуть какая опция что значит и зачем служит

3. прочесть справку по WebRequest и посмотреть примеры которых даже в этой ветке немало

4. писать код, осознавая содеянное :-) что, зачем, почему подставляется.

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

Но это всё равно придётся сделать самому

Maxim, ) ну вот к чему это?

В curl параметр всего один - "-u" это авторизация или user, за ним идет apikey

В справке по WebRequest разобран пример с заполнением результирующего массива json ответом из yahoo finance

В этой ветке все примеры по WebRequest это и есть тот единственный скрипт в справке, который я же и постил все это время ))))

Осознавая содеянное - как раз это без примера и сложно сделать. На сайтах, где коммерчески предлагаются TTS разобраны примеры с .NET, Java, curl. Так сказать, со зрелыми языками программирования. О детках, вроде MQL они и не догадываются. 

Так что по теории Ваш пост значим, а по полезной нагрузке незначителен. 

Конкретно, мне например, не ясно в каком месте:

1) headers,

2) url или

3) где-то еще,

необходимо указывать вывод в wav файл и примеров, книжек, где было бы это сказано я не могу найти

 

короче, вот так работает 

//+------------------------------------------------------------------+
//|                                                   WebRequest.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string cookie=NULL,headers;
   char   post[],result[];
   char cost_char_data[];
   string  result_headers;

   headers = "-u apikey:GR1bb3zVMs9fcNKL6pA9-5zj9ptWliCu6eh9oupUnpZB --output hello_world.wav";
   string url="https://example-files.online-convert.com/audio/wav/example.wav";
   ResetLastError();
   int res = WebRequest("GET",url,headers,1000,cost_char_data,result,result_headers);
   if(res==-1)
     {
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(res==200)
        {
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         //PrintFormat("Заголовки сервера: %s",headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("example.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл
            FileClose(filehandle);
            Sleep(1*1000);
            PlaySound("\\Files\\example.wav");
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         PrintFormat("Ошибка загрузки '%s', код %d",url,res);
     }
  }
//+------------------------------------------------------------------+

только сайт не тот 

Снимок4

 
Alexsandr San:

так он сразу в папку и загружается Files и всё работает звук

------------------------------------------------------------------

вот так я сделал 

он скачивается и сразу проигрывает 

Ясно, значит работает. Теперь ТС осталось разобраться с вебреквест и готово.