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

 
TheXpert:

проблема в завершающем нулевом символе.

и если вы от webrequest получаете ошибку, в параметре result очень возможна дополнительная информация.

например:

так загружает файл - только формат наверное не тот, не проигрывает.

Снимок3

 
Alexsandr San:

так загружает файл - только формат наверное не тот, не проигрывает.


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

вот так проиграло 

Снимок4

 

опять непонятка

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <JAson.mqh>
void OnStart()
  {

   char    post[],result[];
   string  url="https://texttospeech.googleapis.com/v1/text:synthesize?key=AIzaSyCaLxPh84wXpLkT-zOE04MlvHj3JhLXU0w";
   string  headers;
   string  result_headers;
   int     status;
   
   
   string jsonbody;
   headers = "Content-Type: application/json";
//---

// original json file
//{"input":{"text":"M"},"voice":{"languageCode":"en-gb"},"audioConfig":{"audioEncoding":"LINEAR16"}}
////

  jsonbody = "{\"input\":{\"text\":\"M\"},\"voice\":{\"languageCode\":\"en-gb\"},\"audioConfig\":{\"audioEncoding\":\"LINEAR16\"}}";
  StringToCharArray(jsonbody,post);
  ArrayResize(post, StringToCharArray(jsonbody,post) - 1);
  status=WebRequest("POST",url,headers,100000,post,result,result_headers);

   
   if(status==-1)
     {
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //---
      StringSetLength(url,StringFind(url,"/",8));
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(status==200)
        {
        CJAVal  CJasonResult;
        string lBase64String;
        char lBase64ResultArray[];
        char lBinaryDataArray[];
        char lkey[];


        CJasonResult.Deserialize(result);
        lBase64String = CJasonResult["audioContent"].ToStr();
        StringToCharArray(lBase64String,lBase64ResultArray,0,WHOLE_ARRAY,CP_ACP);
        
        CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);
        
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         PrintFormat("Заголовки сервера: %s",result_headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("result.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
           
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,lBinaryDataArray,0,ArraySize(result));

            //--- закрываем файл
            FileClose(filehandle);
            PlaySound("\\Files\\result.wav");
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         PrintFormat("Ошибка загрузки '%s', код %d",url,status);
     }
  }


получаю Json поток, забираю только нужную строку, кидаю в массив, массив декодирую. 

Вот с декодированием и непонятно

CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);

что за массив [in]  Key array.

В справке написано, что он должен быть и все. Что в нем содержится и какой в нем смысл?


 
Nikolai Karetnikov:

В справке написано, что он должен быть и все. Что в нем содержится и какой в нем смысл?

сделайте нулевого размера или забейте нулями, для base64 он не нужен

 
TheXpert:

сделайте нулевого размера или забейте нулями, для base64 он не нужен

так ведь в коде и есть нулевой размер, но добавил [1] и забил нулем


массив, содержащий Base64 попадает в CryptDecode, а результирующий бинарный пустой

 
ТС не сдается))) Это хорошо! Респект.
 
Nikolai Karetnikov:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
 

Все же , такой способ не безопасен и мало кто захочет этим пользоваться.

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

одним скриптом - загрузил, создал папку и скопировал в эту папку

Снимок 

 

Ну, как и обещал, я поговорил с агентом IBM. Вот наш простой и короткий диалог:

You are now chatting with Lorenzo.

Today

Me on Jun 2, 3:31 PM

Hi, I have a question about Text To Speech servise. Your free plan limit is 10 000 symbols per month, but Google free plan offers up to 4 000 000 symbols. So, can you explain to me this huge difference, or that i'm mistaken?

Hi!

There is a more suitable group who can help you. May I transfer you to this group so they can answer your question?

Ok!

I'll be right with you.

ok

Thanks for holding!

Yes, actually I am not supporting this product. Please contact to my colleague via email at Juan.Jose.Montero1@ibm.com

He will be happy to help you out or schedule a call!

Is that ok for you?

Well, I will write him, thanks a lot!

Thanks to you!

Is there anything else I can help you with today ?

Well, not really. Have a nice day!

//------------------------------------------------------------

Отделался от меня агент по продажам, при том, что вопрос имел отношение к тарифам и лимитам их сервисов. Предложил писать письмо какому то Хосе Хуану. 

Productivity - США - Справка по MetaTrader 5
Productivity - США - Справка по MetaTrader 5
  • www.metatrader5.com
Индекс производительности труда показывает изменение объема выпущенной продукции, приходящегося на одного работника. Этот показатель полезен для предсказания инфляции и прироста объема производства. Если стоимость труда увеличивается соответственно увеличению производительности, и, кроме того, маловероятно увеличение производственных издержек...
 
TheXpert:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));

Последняя, так сказать, капля.

Спасибо!

Это пять! )

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <JAson.mqh>
void OnStart()
  {

   char    post[],result[];
   string  url="https://texttospeech.googleapis.com/v1/text:synthesize?key=AIzaSyCaLxPh84wXpLkT-zOE04MlvHj3JhLXU0w";
   string  headers;
   string  result_headers;
   int     status;
   
   
   string jsonbody;
   headers = "Content-Type: application/json";
//---

// original json file
//{"input":{"text":"M"},"voice":{"languageCode":"en-gb"},"audioConfig":{"audioEncoding":"LINEAR16"}}
////

  jsonbody = "{\"input\":{\"text\":\"MetaTrader 5 is a free application for traders allowing to perform technical analysis and trading operations in the Forex and exchange markets.\"},\"voice\":{\"languageCode\":\"en-gb\"},\"audioConfig\":{\"audioEncoding\":\"LINEAR16\"}}";
  StringToCharArray(jsonbody,post);
  ArrayResize(post, StringToCharArray(jsonbody,post) - 1);
  status=WebRequest("POST",url,headers,100000,post,result,result_headers);

   
   if(status==-1)
     {
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //---
      StringSetLength(url,StringFind(url,"/",8));
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(status==200)
        {
        CJAVal  CJasonResult;
        string lBase64String;
        char lBase64ResultArray[];
        char lBinaryDataArray[];
        char lkey[1];


        CJasonResult.Deserialize(result);
        lkey[0]=0;
        lBase64String = CJasonResult["audioContent"].ToStr();
        StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
        CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         PrintFormat("Заголовки сервера: %s",result_headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("result.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
           
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,lBinaryDataArray,0,ArraySize(result));

            //--- закрываем файл
            FileClose(filehandle);
            PlaySound("\\Files\\result.wav");
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         PrintFormat("Ошибка загрузки '%s', код %d",url,status);
     }
  }
Причина обращения: