그리고 다시 dll과 시장 - 페이지 28

 
TheXpert :

문제는 종료 null 문자입니다.

webrequest 에서 오류가 발생하면 결과 매개변수에 많은 추가 정보가 있습니다.

예를 들어:

따라서 파일을 로드합니다. 형식만 다를 뿐 손실되지 않습니다.

스냅샷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] 키 배열이란 무엇입니까?

설명서에는 그렇게 되어야 한다고 나와 있습니다. 그것은 무엇을 포함하고 그 의미는 무엇입니까?


 
Nikolai Karetnikov :

설명서에는 그렇게 되어야 한다고 나와 있습니다. 그것은 무엇을 포함하고 그 의미는 무엇입니까?

크기를 0으로 만들거나 0으로 채우십시오. base64에는 필요하지 않습니다.

 
TheXpert :

크기를 0으로 만들거나 0으로 채우십시오. base64에는 필요하지 않습니다.

결국 코드에는 0 크기가 있지만 [1]을 추가하고 0으로 점수를 매겼습니다.


Base64를 포함하는 배열이 CryptDecode에 들어가고 결과 바이너리가 비어 있습니다.

 
TC는 포기하지 않는다))) 좋다! 존경.
 
Nikolai Karetnikov :
StringToCharArray (lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
 

그럼에도 불구하고 이 방법은 안전하지 않으며 사용하려는 사람이 거의 없습니다.

이런 식으로 파일을 로드할 수 있고 실행하려는 명령의 도움으로 무엇이든 ....

하나의 스크립트 - 다운로드, 폴더 생성 및 이 폴더에 복사

스냅 사진

 

약속한 대로 IBM 상담원과 통화했습니다. 다음은 간단하고 짧은 대화입니다.

당신은 지금 Lorenzo와 채팅하고 있습니다.

오늘

6월 2일 오후 3시 31분의 나

안녕하세요, Text To Speech 서비스에 대해 질문이 있습니다. 무료 요금제 한도는 월 10,000기호이지만 Google 무료 요금제는 최대 4,000,000기호를 제공합니다. 이 엄청난 차이를 설명할 수 있습니까? 아니면 제가 잘못 알고 있는 것입니까?

안녕!

당신을 도울 수 있는 더 적합한 그룹이 있습니다. 질문에 답할 수 있도록 이 그룹으로 연결해 드릴까요?

확인!

내가 바로 당신과 함께 할거야.

좋아요

잡아주셔서 감사합니다!

예, 사실 저는 이 제품 을 지원하지 않습니다. 이메일 Juan.Jose.Montero1@ibm.com을 통해 동료에게 연락하십시오.

그는 기꺼이 당신을 돕거나 전화를 예약할 것입니다!

괜찮습니까?

글쎄, 나는 그를 쓸 것이다, 대단히 감사합니다!

고마워!

오늘 제가 더 도와드릴 일이 있습니까?

글쎄,별로. 좋은 하루 되세요!

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

질문이 관세 및 서비스 제한과 관련되어 있음에도 불구하고 판매 대리점은 나를 제거했습니다. 그는 일부 José Juan에게 편지를 쓸 것을 제안했습니다.

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