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...
//+------------------------------------------------------------------+//| 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);
}
}
//+------------------------------------------------------------------+
Синтез в реальном времени
Отправив текст для синтеза, ваш сервис или приложение сразу же получит в ответ аудиозапись: задержка настолько мала, что позволяет создавать программное обеспечение с потоковым воспроизведением.
我想我在授权方面已经有了一些进展。
因此,请问Roman如何用WebRequest 在IBM服务器上进行授权,这是一个关键问题!
罗曼,谢谢你的评论!我想我们也会用授权来管理。
现在说说几个参数。在WebRequest的帮助中指出
[in] "key: value "类型的查询标题,用断行符"\r\n "分隔。
变量头本身的类型是字符串
你的意思是,该字符串包含一个换行符,即字符串的结束?
你一定是对的,从postman的截图来看,输出对写在http请求头里的解释是不同的 )
我怀疑我们仍在谈论同一件事,但用词不同 )
我不知道postman写得有多糟糕,它是什么,它与你的问题有什么关系...
但90%是通过阅读解决的,要看解决问题的人是否阅读。
这是很典型的事情--有Rest-API服务的文档(顺便说一下,你读过吗?),你很幸运,他们给了一个用curl的例子,不需要解析其他语言......而你必须使用WebRequest MT。
curl启动后,协议显示在屏幕上--产生和发送哪些参数的头信息,接收到的是什么,如何理解,放在哪里。
而且可以直接看到向WebRequest发送的内容
---
我不知道邮差写得有多糟糕,也不知道它是什么,或者它与你的问题有什么关系...
但90%是通过阅读解决的,要看解决问题的人是否阅读。
这是很典型的事情--有Rest-API服务的文档(顺便说一下,你读过吗?),你很幸运,他们给了一个用curl的例子,不需要解析其他语言......而你必须使用WebRequest MT。
curl启动后,协议显示在屏幕上--产生和发送哪些参数的头信息,接收到的是什么,如何理解,放在哪里。
而且可以直接看到向WebRequest发送的内容
---
读取,读取 )正在摸索,正在取得进展。
我想我快成功了。
罗曼,谢谢你的评论!我想我们也会处理好授权的问题。
现在说说几个参数。在WebRequest的帮助中,它说
[in] "key: value "类型的查询标题,用断行符"\r\n "分隔。
变量头本身的类型是字符串
你的意思是,该字符串包含一个换行符,即换行符?
头部可能包含一个以上的键/值字符串,所以要使用换行符。
双连字符"\r\n\r\n" 必须放在标题的最后。
这是服务器如何理解头的结束,这是一个http标准。
在双连字符之后是请求或响应的主体。
为 方便起见,WebRequest函数 将这些块分开。
对于标题来说是自己的参数,对于正文来说是自己的参数。
但是写请求的语法,需要遵守标准的http。
从这个网站https://example-files.online-convert.com/audio/wav/example.wav
下载这个"example.wav " 文件
并在下载后,播放PlaySound("\\Files\\example.wav")。
-------------------------------------------------
但这个功能的意义是什么呢?我不这么认为!
好了,先生们,让我们继续前进,好吗?
首先,让我们尽可能地简化请求本身的代码。我们只留下一个标头--授权本身,它仍然可以工作!在这种情况下,没有任何额外的标头,IBM服务器将给我们一个.ogg音频格式的流。让它见鬼去吧,我们想,让我们先做一些工作。让我们放弃徒劳的尝试,用额外的头文件将流媒体格式化为wav,并处理.ogg(顺便说一下,WebRequest语法的类似错误https://www.mql5.com/en/forum/310891#comment_16643324)。
脚本被登录到服务器并挂起。好吧,让我们以调试模式或其他方式运行它...
看,不是吗?)
我们把脚本从图中删除,但由于某些原因,它并没有完全停止执行,它只是中断了同步WebRequest并继续执行,这通常对我们有利。
让我们继续前进。在char result[]中,我们现在有一个.ogg流,我们把它写到一个文件。
文件也得到了6Kb(同时,因为使用相同参数的curl或postman查询返回6Kb的.ogg文件,可以正常播放!)。很高兴听到测试这个词 ))))
现在我们把所有的char数组写到文件里。特别说明的是,我们不应该测量数组的大小,而是采取WHOLE_ARRAY。
这就是它现在的样子。
唯一的问题是,curl文件可以正常播放,但我们的文件,由于某些原因,不能播放。
让我们看看这两个文件的内容
文件在底部由curl下载,在顶部由WebRequest流填充成二进制文件
看到顶部文件testmql5.ogg中的这些blobs 00000089, 00000004吗?)))这是个奖金计划还是什么?)))这一切从何而来 ))))))))
归纳总结
1.语法对我来说仍然是个谜。只设法对服务器进行了认证,到目前为止,试图添加其他头信息的尝试都失败了。
2.我想知道WebRequest收到的流是否有洒落,或者我把它写到了一个文件中,但使用WebRequest方法从char数组结果得到的.ogg文件格式是不正确的。
烂番茄的欢迎!
从这个网站https://example-files.online-convert.com/audio/wav/example.wav
下载这个"example.wav " 文件
并在下载后,播放PlaySound("\\Files\\example.wav")。
-------------------------------------------------
但这个功能的意义是什么呢?我不认为这有什么意义!
阿列克山大。
这很好,谢谢!但是wav文件应该是由TTS引擎(TextToSpeech)生成的。
阿列克山大。
都很好,谢谢!但是wav文件应该是由TTS引擎(TextToSpeech)生成的。
我知道了--它应该可以工作。
这里有类似的东西https://cloud.yandex.ru/docs/speechkit/tts/request
...
总结
1.语法对我来说仍然是个谜。只设法对服务器进行了认证,到目前为止,尝试添加其他头信息都不成功。
2.我想知道WebRequest收到的流是否有洒落,或者我把它写到了一个文件中,但使用WebRequest方法从char数组结果得到的.ogg文件格式是不正确的。
烂番茄的欢迎!