そしてまた、DellとMarket - ページ 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] キー配列。

ヘルプは、あるべき姿というだけで、それだけです。何が入っていて、どんな意味があるのか。


 
Nikolai Karetnikov:

リファレンスには、それがなければいけないと書いてある、それだけです。何が入っていて、何がポイントなのか?

nullにするか、ゼロで埋めてください。

 
TheXpert:

ゼロサイズまたはヌルサイズにする、base64では必要ない

ということで、コードではサイズが0になっていますが、[1]を追加して0にしたところ


Base64を含む配列がCryptDecodeに入り、結果のバイナリが空である。

 
TCはあきらめない))))それはいい!リスペクトです。
 
Nikolai Karetnikov:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
 

しかし、この方法は安全ではないので、使いたいと思う人は少ないでしょう。

こうすることで、ファイルをアップロードし、何らかのコマンドで......のようなことを実行することができます。

アップロード、フォルダー作成、フォルダーへのコピーという1つのスクリプトです。

撮影者

 

さて、約束通り、IBMのエージェントに話を聞いてみた。ここでは、私たちのシンプルで短い対話を紹介します。

あなたは今、Lorenzoとチャットしています。

今日

私 6月2日 15時31分

こんにちは、Text To Speechサービスについて質問です。無料プランの上限は月10 000 000シンボルですが、Googleフリープランでは最大4 000 000シンボルまで利用できます。では、この大きな違い、あるいは私の勘違いを説明していただけますか?

こんにちは。

あなたを助けることができる、より適切なグループがあります。このグループに転送して、質問にお答えしましょうか?

OK!

すぐ行くから。

大丈夫

開催ありがとうございました

そう、実は私はこの製品を サポートしていないのです。担当者までメール(Juan.Jose.Montero1@ibm.com)でご連絡ください。

彼は、あなたの手助けをしたり、電話の予定を立てたりしてくれるでしょう

それでいいのでしょうか?

さて、彼に手紙を書きます、どうもありがとうございます

ありがとうございました。

他に何かお手伝いできることはありますか?

まあ、そうでもないんですけどね。良い一日をお過ごしください。

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

私は販売代理店に横取りされ、質問はそのサービスの料金や限度額に関するものだった。ホセ・ファンという人に手紙を書くことを提案されました。

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