Dozens of new automated trading applications appear in the MQL5 Market every day. Choose the right app among 10,000 products and forget about unnecessary routine operations of manual trading. Sell your algorithmic trading programs through the largest store of trading applications! Kiss on billions on EURUSD The provided robot (KOB) is a result...
vous devez avoir raison, et la capture d'écran de postman, où la paire de sortie est écrite dans l'en-tête de requête http est expliquée différemment ;)
je pense que nous parlons toujours de la même chose, mais avec des mots différents ;)
Je ne sais pas à quel point le facteur est mal écrit, ce qu'il est, et ce qu'il a à voir avec votre problème...
mais 90 % des problèmes sont résolus par la lecture, et c'est à la personne qui résout le problème de le lire.
C'est assez typique - il y a une documentation sur le service Rest-API (l'avez-vous lu d'ailleurs ??), vous avez la chance qu'ils aient donné un exemple avec curl et qu'il ne soit pas nécessaire d'analyser d'autres langages... et vous devez utiliser WebRequest MT.
Le curl démarre, le protocole est affiché à l'écran - quels en-têtes de paramètres sont générés et envoyés, ce qui est reçu en retour, comment il est compris et où il est placé.
Et il est directement visible ce qu'il faut envoyer à WebRequest
Je ne sais pas à quel point le facteur est écrit, ce qu'il est, ou ce qu'il a à voir avec votre problème...
mais 90% sont résolus par la lecture, et c'est à la personne qui résout le problème de le lire.
C'est assez typique - il y a une documentation sur le service Rest-API (l'avez-vous lu d'ailleurs ??), vous avez la chance qu'ils aient donné un exemple avec curl et qu'il ne soit pas nécessaire d'analyser d'autres langages... et vous devez utiliser WebRequest MT.
Le curl démarre, le protocole est affiché à l'écran - quels en-têtes de paramètres sont générés et envoyés, ce qui est reçu en retour, comment il est compris et où il est placé.
Et il est directement visible ce qu'il faut envoyer à WebRequest
Je pense que j'arrive à quelque chose avec l'autorisation.
Roman, merci pour le commentaire! Je pense que nous allons nous débrouiller avec l'autorisation également.
Maintenant, à propos de quelques paramètres. Dans l'aide sur WebRequest, il est dit
[in] En-têtes de requête de type "clé : valeur", séparés par un saut de ligne "\r\n".
La variable headers elle-même est de type string
Que voulez-vous dire, la chaîne de caractères contient un caractère de retour à la ligne, c'est-à-dire un caractère de retour à la ligne ?
L'en-tête peut contenir plus d'une chaîne clé/valeur, un saut de ligne est donc utilisé. Le double trait d'union"\r\n\r\n" doit être placé à la fin de l'en-tête. C'est ainsi que le serveur comprend la fin de l'en-tête, qui est une norme http. Après le double trait d'union, vient le corps de la demande ou de la réponse. La fonctionWebRequest sépare ces blocs pour des raisons de commodité. Pour les en-têtes son propre paramètre, pour le corps le sien. Mais la syntaxe de l'écriture de la demande, exige le respect de la norme http.
//+------------------------------------------------------------------+//| 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 |//+------------------------------------------------------------------+voidOnStart()
{
string cookie=NULL,headers;
char post[],result[];
string url="https://example-files.online-convert.com/audio/wav/example.wav";//--- для работы с сервером необходимо добавить URL "https://finance.yahoo.com"//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники")://--- обнуляем код последней ошибкиResetLastError();
//--- загрузка html-страницы с Yahoo Financeint res=WebRequest("GET",url,cookie,NULL,5000,post,0,result,headers);
if(res==-1)
{
Print("Ошибка в WebRequest. Код ошибки =",GetLastError());
//--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавленияMessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
}
else
{
if(res==200)
{
//--- успешная загрузкаPrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
//PrintFormat("Заголовки сервера: %s",headers);//--- сохраняем данные в файлint filehandle=FileOpen("example.wav",FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
//--- сохраняем содержимое массива result[] в файлFileWriteArray(filehandle,result,0,ArraySize(result));
//--- закрываем файлFileClose(filehandle);
Sleep(1*1000);
PlaySound("\\Files\\example.wav");
}
elsePrint("Ошибка в FileOpen. Код ошибки =",GetLastError());
}
elsePrintFormat("Ошибка загрузки '%s', код %d",url,res);
}
}
//+------------------------------------------------------------------+
de ce site webhttps://example-files.online-convert.com/audio/wav/example.wav
télécharge le fichier "example.wav".
et après l'avoir téléchargé, il jouePlaySound("\\Files\\\\Nexemple.wav");
-------------------------------------------------
Mais la signification de cette fonction ? ?? Je ne pense pas !
Eh bien, messieurs, passons à autre chose, d'accord ?
//+------------------------------------------------------------------+//| 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 |//+------------------------------------------------------------------+voidOnStart()
{
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 + "Accept: 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");
}
elseprintf("Ошибка в FileOpen. Код ошибки =",GetLastError());
}
elseprintf("Ошибка загрузки '%s', код %d",url,res);
}
}
//+------------------------------------------------------------------+
Tout d'abord, simplifions autant que possible le code de la requête elle-même. Ne laissons qu'un seul en-tête - l'autorisation elle-même, qui fonctionne toujours ! Dans ce cas, sans en-tête supplémentaire, le serveur IBM nous donnera un flux au format audio .ogg. Au diable tout ça, pensons-nous, faisons d'abord quelque chose qui fonctionne. Abandonnons les tentatives futiles de formater le flux en wav avec des en-têtes supplémentaires et occupons-nous du .ogg (à propos, une erreur similaire a été commise avec la syntaxe WebRequesthttps://www.mql5.com/en/forum/310891#comment_16643324 ).
Le script se connecte au serveur et se bloque. Ok, exécutons-le en mode débogage ou autre...
voir, non ? )
Nous supprimons le script du graphique, mais pour une raison quelconque, il n'arrête pas complètement son exécution, il interrompt simplement la requête Web synchrone et continue, ce qui est généralement à notre avantage.
Allons de l'avant. Dans char result[] nous avons maintenant un flux .ogg et nous l'écrivons dans un fichier.
Le fichier obtient 6Kb aussi (aussi, parce que la requête curl ou postman avec les mêmes paramètres retourne un fichier .ogg de 6Kb, qui est lu correctement ! C'est bon d'entendre le mot Test ))))
Maintenant nous écrivons tous les tableaux de chars dans le fichier. Précisez que nous ne devons pas mesurer la taille du tableau, mais prendreWHOLE_ARRAY.
C'est comme ça que ça se présente maintenant :
Le seul problème est que le fichier curl fonctionne bien, mais notre fichier, pour une raison quelconque, ne fonctionne pas.
Regardons à l'intérieur des deux fichiers
Fichier téléchargé par curl en bas, rempli à partir du flux WebRequest en binaire en haut.
Vous voyez ces taches 00000089, 00000004 dans le fichier testmql5.ogg ? ))) C'est un programme de bonus ou quoi ? ))) D'où vient tout cela ))))))))
Résumant
1. La syntaxe est toujours un mystère pour moi. J'ai seulement réussi à m'authentifier auprès du serveur, les tentatives d'ajouter d'autres en-têtes ont échoué jusqu'à présent.
2. Je me demande si WebRequest reçoit un flux avec des pépites, ou si je l'écris dans un fichier de manière incorrecte, mais le format du fichier .ogg obtenu à partir du résultat du tableau de caractères en utilisant la méthode WebRequest n'est pas correct.
Tout est génial, merci ! Mais le fichier wav doit être généré par un moteur TTS (TextToSpeech).
J'ai compris - ça devrait marcher...
Синтез в реальном времени
Отправив текст для синтеза, ваш сервис или приложение сразу же получит в ответ аудиозапись: задержка настолько мала, что позволяет создавать программное обеспечение с потоковым воспроизведением.
1. La syntaxe est toujours un mystère pour moi. J'ai seulement réussi à m'authentifier auprès du serveur, les tentatives d'ajouter d'autres en-têtes ont échoué jusqu'à présent.
2. Je me demande si WebRequest reçoit un flux avec des pépites, ou si je l'écris dans un fichier de manière incorrecte, mais le format du fichier .ogg obtenu à partir du résultat du tableau de caractères en utilisant la méthode WebRequest est incorrect.
Les tomates pourries sont les bienvenues !
Réfléchissons logiquement. Alexander a montré que le script télécharge et lit le fichier depuis l'autre serveur normalement. Ainsi, webrequest est configuré correctement. Le seul problème réside dans les spécificités du serveur d'IBM. Les particularités de leurs réponses aux demandes.
Je pense que j'arrive à quelque chose avec l'autorisation.
Demandez donc à Roman comment faire l'autorisation sur le serveur IBM avecWebRequest, c'est la question clé !
Roman, merci pour le commentaire! Je pense que nous allons nous débrouiller avec l'autorisation également.
Maintenant, quelques paramètres. Dans l'aide sur WebRequest il est indiqué
[in] En-têtes de requête de type "clé : valeur", séparés par un saut de ligne "\r\n".
La variable headers elle-même est de type string
Que voulez-vous dire, la chaîne contient un caractère de saut de ligne, c'est-à-dire la fin de la chaîne ?
vous devez avoir raison, et la capture d'écran de postman, où la paire de sortie est écrite dans l'en-tête de requête http est expliquée différemment ;)
je pense que nous parlons toujours de la même chose, mais avec des mots différents ;)
Je ne sais pas à quel point le facteur est mal écrit, ce qu'il est, et ce qu'il a à voir avec votre problème...
mais 90 % des problèmes sont résolus par la lecture, et c'est à la personne qui résout le problème de le lire.
C'est assez typique - il y a une documentation sur le service Rest-API (l'avez-vous lu d'ailleurs ??), vous avez la chance qu'ils aient donné un exemple avec curl et qu'il ne soit pas nécessaire d'analyser d'autres langages... et vous devez utiliser WebRequest MT.
Le curl démarre, le protocole est affiché à l'écran - quels en-têtes de paramètres sont générés et envoyés, ce qui est reçu en retour, comment il est compris et où il est placé.
Et il est directement visible ce qu'il faut envoyer à WebRequest
---
Je ne sais pas à quel point le facteur est écrit, ce qu'il est, ou ce qu'il a à voir avec votre problème...
mais 90% sont résolus par la lecture, et c'est à la personne qui résout le problème de le lire.
C'est assez typique - il y a une documentation sur le service Rest-API (l'avez-vous lu d'ailleurs ??), vous avez la chance qu'ils aient donné un exemple avec curl et qu'il ne soit pas nécessaire d'analyser d'autres langages... et vous devez utiliser WebRequest MT.
Le curl démarre, le protocole est affiché à l'écran - quels en-têtes de paramètres sont générés et envoyés, ce qui est reçu en retour, comment il est compris et où il est placé.
Et il est directement visible ce qu'il faut envoyer à WebRequest
---
lire, lire ) On y arrive et on progresse.
Je pense que j'arrive à quelque chose avec l'autorisation.
Roman, merci pour le commentaire! Je pense que nous allons nous débrouiller avec l'autorisation également.
Maintenant, à propos de quelques paramètres. Dans l'aide sur WebRequest, il est dit
[in] En-têtes de requête de type "clé : valeur", séparés par un saut de ligne "\r\n".
La variable headers elle-même est de type string
Que voulez-vous dire, la chaîne de caractères contient un caractère de retour à la ligne, c'est-à-dire un caractère de retour à la ligne ?
L'en-tête peut contenir plus d'une chaîne clé/valeur, un saut de ligne est donc utilisé.
Le double trait d'union"\r\n\r\n" doit être placé à la fin de l'en-tête.
C'est ainsi que le serveur comprend la fin de l'en-tête, qui est une norme http.
Après le double trait d'union, vient le corps de la demande ou de la réponse.
La fonctionWebRequest sépare ces blocs pour des raisons de commodité.
Pour les en-têtes son propre paramètre, pour le corps le sien.
Mais la syntaxe de l'écriture de la demande, exige le respect de la norme http.
de ce site webhttps://example-files.online-convert.com/audio/wav/example.wav
télécharge le fichier "example.wav".
et après l'avoir téléchargé, il jouePlaySound("\\Files\\\\Nexemple.wav");
-------------------------------------------------
Mais la signification de cette fonction ? ?? Je ne pense pas !
Eh bien, messieurs, passons à autre chose, d'accord ?
Tout d'abord, simplifions autant que possible le code de la requête elle-même. Ne laissons qu'un seul en-tête - l'autorisation elle-même, qui fonctionne toujours ! Dans ce cas, sans en-tête supplémentaire, le serveur IBM nous donnera un flux au format audio .ogg. Au diable tout ça, pensons-nous, faisons d'abord quelque chose qui fonctionne. Abandonnons les tentatives futiles de formater le flux en wav avec des en-têtes supplémentaires et occupons-nous du .ogg (à propos, une erreur similaire a été commise avec la syntaxe WebRequesthttps://www.mql5.com/en/forum/310891#comment_16643324 ).
Le script se connecte au serveur et se bloque. Ok, exécutons-le en mode débogage ou autre...
voir, non ? )
Nous supprimons le script du graphique, mais pour une raison quelconque, il n'arrête pas complètement son exécution, il interrompt simplement la requête Web synchrone et continue, ce qui est généralement à notre avantage.
Allons de l'avant. Dans char result[] nous avons maintenant un flux .ogg et nous l'écrivons dans un fichier.
Le fichier obtient 6Kb aussi (aussi, parce que la requête curl ou postman avec les mêmes paramètres retourne un fichier .ogg de 6Kb, qui est lu correctement ! C'est bon d'entendre le mot Test ))))
Maintenant nous écrivons tous les tableaux de chars dans le fichier. Précisez que nous ne devons pas mesurer la taille du tableau, mais prendreWHOLE_ARRAY.
C'est comme ça que ça se présente maintenant :
Le seul problème est que le fichier curl fonctionne bien, mais notre fichier, pour une raison quelconque, ne fonctionne pas.
Regardons à l'intérieur des deux fichiers
Fichier téléchargé par curl en bas, rempli à partir du flux WebRequest en binaire en haut.
Vous voyez ces taches 00000089, 00000004 dans le fichier testmql5.ogg ? ))) C'est un programme de bonus ou quoi ? ))) D'où vient tout cela ))))))))
Résumant
1. La syntaxe est toujours un mystère pour moi. J'ai seulement réussi à m'authentifier auprès du serveur, les tentatives d'ajouter d'autres en-têtes ont échoué jusqu'à présent.
2. Je me demande si WebRequest reçoit un flux avec des pépites, ou si je l'écris dans un fichier de manière incorrecte, mais le format du fichier .ogg obtenu à partir du résultat du tableau de caractères en utilisant la méthode WebRequest n'est pas correct.
Les tomates pourries sont les bienvenues !
de ce site webhttps://example-files.online-convert.com/audio/wav/example.wav
télécharge le fichier "example.wav".
et après l'avoir téléchargé, il jouePlaySound("\\Files\\\\Nexemple.wav");
-------------------------------------------------
Mais la signification de cette fonction ? ?? Je pense que ça n'a aucun sens !
Alexsandr,
C'est génial, merci ! Mais le fichier wav doit être généré par le moteur TTS (TextToSpeech).
Alexsandr,
Tout est génial, merci ! Mais le fichier wav doit être généré par un moteur TTS (TextToSpeech).
J'ai compris - ça devrait marcher...
Voici quelque chose de similairehttps://cloud.yandex.ru/docs/speechkit/tts/request
...
Résumer
1. La syntaxe est toujours un mystère pour moi. J'ai seulement réussi à m'authentifier auprès du serveur, les tentatives d'ajouter d'autres en-têtes ont échoué jusqu'à présent.
2. Je me demande si WebRequest reçoit un flux avec des pépites, ou si je l'écris dans un fichier de manière incorrecte, mais le format du fichier .ogg obtenu à partir du résultat du tableau de caractères en utilisant la méthode WebRequest est incorrect.
Les tomates pourries sont les bienvenues !