y de nuevo dll y el mercado - página 20

 
Alexsandr San:

Aquí en este sitio - subí un archivo de texto - y obtuve un archivo .wav

¿cómo organizarlo automáticamente?https://audio.online-convert.com/convert-to-wav

Sólo en inglés.

Su ejemplo es bueno, pero en este sitio no hay autorización, es decir, no es necesario especificar varias cabeceras en la solicitud, y por lo tanto no es necesario entender la sintaxis de dicha entrada.

Puede que me equivoque, pero no encuentro otra explicación para que se cuelgue en el caso de una cabecera y se produzca un error de autorización en el caso de otra cabecera. Este es el código con dos cabeceras

//+------------------------------------------------------------------+
//|                                                   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);
     }
  }
//+------------------------------------------------------------------+

en cuanto se añade la segunda cabecera, la autorización deja de funcionar

2020.06.01 12:46:45.044 Webrequest4Voice (EURAUD,H1) Error de carga 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', código 401

Con una cabecera la autorización funciona, pero el flujo es conducido al archivo con caracteres extra que hacen imposible la reproducción del archivo de audio

 
Nikolai Karetnikov:

Hay otro problema. Como decimos entre los expertos: "hay algún tipo de avería" )).

Justo arriba escribí en detalle cómo WebRequest se congela pero recibe un flujo sin embargo. El flujo llega al archivo y resulta estar roto. Quizás lo estoy poniendo en el archivo de forma incorrecta, pero lo más probable es que el array de char se llene de información extraña en el momento del bloqueo.

Esto es lo que debemos tratar ahora

leer (!!!) como http transfiere datos... algo sobre chunked :-)

La primera línea del contenido son los datos del servicio (la longitud si la memoria no me falla), y sólo después los datos del archivo binario

 
quizás los caracteres de avance de línea /r/n deberían añadirse a las cabeceras de forma diferente, quizás algo más, como un espacio al principio o al final de la cabecera. Sin un ejemplo que funcione es difícil entenderlo
Документация по MQL5: Основы языка / Типы данных / Целые типы / Символьные константы
Документация по MQL5: Основы языка / Типы данных / Целые типы / Символьные константы
  • www.mql5.com
Символы, как элемент строки, в MQL5 - это индексы в наборе символов Unicode. Они являются 16-разрядными значениями, которые можно преобразовывать в целые числа и с которыми можно манипулировать целочисленными операциями, такими как сложение и вычитание. Любой одиночный символ, заключенный в одинарные кавычки, или шестнадцатеричный ASCII-код...
 
Nikolai Karetnikov:

Hay otro problema. Como decimos entre los expertos: "hay algún tipo de avería" )).

Justo la función WebRequest funciona de una manera específica y está restringida internamente para tal uso. "

He estado probando el script y me he quedado con la duda: ¿de dónde ha salido la clave?

Tuve una charla con su agente. La primera pregunta que hizo fue:

Vale, no te preocupes, ¿estás usando un plan gratuito o de pago?

Y otra:

Hola, gracias por contactar con IBM Cloud. Para la asistencia técnica, le recomendamos que consulte todos los documentos disponibles, ya que se trata principalmente de una plataforma de autoservicio.

Pero, dio enlaces donde se puede hablar más sobre el tema de interés:https://www.ibm.com/watson en la parte inferior hay un icono de chat ¡Hablemos!

Además, otro enlace que me dio abrió esta página:


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

Aparentemente, el servicio es de pago.

Hasta 10.000 caracteres al mes se pueden vocalizar gratuitamente.

 
Реter Konow:

Esto entra en el punto 3 - "O bienla función WebRequest funciona de una manera específica y está restringida internamente para tal uso. "

Estuve probando el script y me quedé con la duda: ¿de dónde sale la llave?

Tuve una charla con su agente. La primera pregunta que hizo fue:

Vale, no te preocupes, ¿estás usando un plan gratuito o de pago?

Y otra:

Hola, gracias por contactar con IBM Cloud. Para la asistencia técnica, le recomendamos que consulte todos los documentos disponibles, ya que se trata principalmente de una plataforma de autoservicio.

Pero, dio enlaces donde se puede hablar más sobre el tema de interés:https://www.ibm.com/watson en la parte inferior hay un icono de chat ¡Hablemos!

Además, otro enlace que me dio abrió esta página:


Maxim Kuznetsov:

leer (!!!) que tipo de datos da http...algo sobre chunked :-)

en el contenido, la primera línea son los datos del servicio (longitud si la memoria no me falla), y sólo después los datos del archivo binario

Gracias.

Leí un poco de información, encontré un error en mi código, lo arreglé, WebRequest dejó de colgarse y obtiene el flujo, pero veo la siguiente información en el archivo de todos modos

Debe haber otro "algo mal" en alguna parte ))

 
Mira la foto. Plan gratuito hasta 10.000 caracteres al mes.
 
Maxim Kuznetsov:

leer (!!!) como http da datos...algo sobre chunked :-)

la primera línea de contenido contiene los datos de servicio (longitud, si la memoria no me falla), y sólo entonces los datos del archivo binario

es decir, ahora entiendo que en el flujo recuperable


00000089 son datos de servicio, pero no entiendo cómo hacer que ignore

 
Реter Konow:
Mira la foto. El plan gratuito es de hasta 10.000 caracteres al mes.

Sí, sí, tienes razón. También he escrito sobre ello aquí antes

и снова dll и маркет
и снова dll и маркет
  • 2020.05.31
  • www.mql5.com
День добрый! Правило №1 dll на Маркете запрещен...
 
Реter Konow:
Mira la foto. Plan gratuito hasta 10.000 caracteres al mes.

cuando te registras en su página web y sigues las indicaciones, aparece una página en la que aparecela apikey