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

 
Alexsandr San:

Вот на этом сайте - я загрузил текстовый файл - и получил .wav файл 

как организовать это автоматически - это вопрос!?https://audio.online-convert.com/convert-to-wav

только английский

Ваш пример хорош, но на этом сайте нет авторизации, т.е. нет необходимости указывать несколько headers в запросе, а значит нет необходимости разбираться в синтаксисе такой записи. 

Может быть, может быть, я неправ, но другого объяснения зависанию в случае с одним заголовком и ошибке в авторизации в случае с другим заголовком, не нахожу. Вот код с двумя заголовками

//+------------------------------------------------------------------+
//|                                                   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;
   
   ResetLastError();
   ArrayFree(result);
  // headers = "Authorization: Basic YXBpa2V5OkdSMWJiM3pWTXM5ZmNOS0w2cEE5LTV6ajlwdFdsaUN1NmVoOW91cFVucFpC/r/n";
   headers = "Authorization: Basic YXBpa2V5OkdSMWJiM3pWTXM5ZmNOS0w2cEE5LTV6ajlwdFdsaUN1NmVoOW91cFVucFpC";
//   headers = headers + "Accept: audio/wav";
   headers = headers + "/r/nAccept: audio/wav/r/n";
  // headers = headers + "Accept: audio/wav/r/n";
 
   string url="https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST";
               
   int res = WebRequest("GET",url,headers,1000,cost_char_data,result,result_headers);

   if(res==-1)
     {
      printf("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(res==200)
        {
         //--- успешная загрузка
         printf("Файл успешно загружен, размер %d байт.",ArraySize(result));
         printf("Заголовки сервера: %s",result_headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("testmql5.ogg",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,WHOLE_ARRAY);
            //--- закрываем файл
            FileClose(filehandle);
            printf("FileClose");
            
           }
         else
            printf("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         printf("Ошибка загрузки '%s', код %d",url,res);
     }
  }
//+------------------------------------------------------------------+

как только добавляется второй заголовок, авторизация перестает работать

2020.06.01 12:46:45.044 Webrequest4Voice (EURAUD,H1) Ошибка загрузки 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', код 401

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

 
Nikolai Karetnikov:

еще какая-то проблема. Как говорят у нас в среде экспертов: "там какая-то неисправность" ))

Чуть выше, я подробно написал как WebRequest замирает, но тем не менее получает поток. Поток попадая в файл оказывается битым. Возможно я неверно его помещаю в файл, но скорее всего в момент "подвисания" char массив оказывается заполненным посторонней информацией. 

Вот с этим сейчас и надо бы разобраться

почитайте (!!) в каком виде http отдаёт данные..кое-что про chunked :-)

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

 
возможно, символы перевода строки /r/n надо иначе добавлять к заголовкам, возможно что-то еще, допустим пробел нужен в начале или в конце заголовка. Без работающего примера с этим сложно разобраться
Документация по MQL5: Основы языка / Типы данных / Целые типы / Символьные константы
Документация по MQL5: Основы языка / Типы данных / Целые типы / Символьные константы
  • www.mql5.com
Символы, как элемент строки, в MQL5 - это индексы в наборе символов Unicode. Они являются 16-разрядными значениями, которые можно преобразовывать в целые числа и с которыми можно манипулировать целочисленными операциями, такими как сложение и вычитание. Любой одиночный символ, заключенный в одинарные кавычки, или шестнадцатеричный ASCII-код...
 
Nikolai Karetnikov:

еще какая-то проблема. Как говорят у нас в среде экспертов: "там какая-то неисправность" ))

Чуть выше, я подробно написал как WebRequest замирает, но тем не менее получает поток. Поток попадая в файл оказывается битым. Возможно я неверно его помещаю в файл, но скорее всего в момент "подвисания" char массив оказывается заполненным посторонней информацией. 

Вот с этим сейчас и надо бы разобраться

Это попадает в пункт 3 - "Либо функция WebRequest работает специфическим образом и внутри ограничена для подобного использования."

Я тестировал скрипт и у меня остался вопрос: ОТКУДА ВЗЯЛСЯ КЛЮЧ? 

Беседовал в чате с их агентом. Первый вопрос который он задал:

Ok no worries, Are you using a free or paid plan?  

И еще:

Hello, thank you for contacting IBM Cloud. for technical assistance we would recommend to check all the available docs at your disposal as we are mainly a self service platform.

Но, дал ссылки где можно поговорить подробнее на интересующую тему: https://www.ibm.com/watson  внизу есть иконка чата Let's talk!

Далее, еще одна его ссылка мне открыла эту страницу:


Документация по MQL5: Сетевые функции / WebRequest
Документация по MQL5: Сетевые функции / WebRequest
  • www.mql5.com
Для использования функции WebRequest() следует добавить адреса серверов в список разрешенных URL во вкладке "Советники" окна "Настройки". Порт сервера выбирается автоматически на основе указанного протокола - 80 для "http://" и 443 для "https://". Функция WebRequest() является синхронной, это означает, что она приостанавливает выполнение...
 

Судя по всему, сервис платный.

Бесплатно можно до 10 000 символов в месяц озвучить.

 
Реter Konow:

Это попадает в пункт 3 - "Либо функция WebRequest работает специфическим образом и внутри ограничена для подобного использования."

Я тестировал скрипт и у меня остался вопрос: ОТКУДА ВЗЯЛСЯ КЛЮЧ? 

Беседовал в чате с их агентом. Первый вопрос который он задал:

Ok no worries, Are you using a free or paid plan?  

И еще:

Hello, thank you for contacting IBM Cloud. for technical assistance we would recommend to check all the available docs at your disposal as we are mainly a self service platform.

Но, дал ссылки где можно поговорить подробнее на интересующую тему: https://www.ibm.com/watson  внизу есть иконка чата Let's talk!

Далее, еще одна его ссылка мне открыла эту страницу:


Maxim Kuznetsov:

почитайте (!!) в каком виде http отдаёт данные..кое-что про chunked :-)

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

Спасибо!

Почитал кое-что, нашел у себя косяк в коде, исправил, WebRequest перестал зависать, качает поток, но в файле все-равно вот такое вот вижу

видимо где-то еще "какая-то неисправность" ))

 
Посмотрите на картинку. Бесплатный план до 10 000 символов в месяц.
 
Maxim Kuznetsov:

почитайте (!!) в каком виде http отдаёт данные..кое-что про chunked :-)

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

т.е. я теперь понимаю, что в возращаемом потоке 


00000089 это служебная информация, но как сделать так, чтобы она игнорировалась, пока не понимаю

 
Реter Konow:
Посмотрите на картинку. Бесплатный план до 10 000 символов в месяц.

да, да Вы правы. Я об этом тоже здесь писал уже

и снова dll и маркет
и снова dll и маркет
  • 2020.05.31
  • www.mql5.com
День добрый! Правило №1 dll на Маркете запрещен...
 
Реter Konow:
Посмотрите на картинку. Бесплатный план до 10 000 символов в месяц.

когда регистрируешься у них на сайте и идешь по подсказкам, то появляется в один прекрасный момент страница, где указан apikey

Причина обращения: