首先,英语是我的外语。
在C#下,我试图将POST http请求发送到forvo.com(带有单词发音的库)以获取带有某个单词发音的音频文件(流)。例如,我想单击button1并收听从forvo.com网站获得的单词“ stack”的发音。为此,我有一个代码:
using (var wb = new WebClient())
{
var data = new NameValueCollection();
data["LANGUAGE_ID"] = "39";
data["WORD"] = "someword"; //this tag doesnt make effect to request
//var response = wb.UploadValues("http://www.forvo.com/search/", "POST", data);
byte[] responseArray = wb.UploadValues("http://www.forvo.com/search/data", "POST", data);
File.WriteAllBytes(Path.GetDirectoryName(Application.ExecutablePath) + "\\fi2le.html", responseArray);
}
通过这些操作,我试图获得指向音频文件的链接。在查看file.html之后,我看到了这些字符串
<a href="/word/data/#en" title="Listen data pronunciation" onclick="Play(38630,'ODk3NTU5NS8zOS84OTc1NTk1XzM5XzE3MjNfMjI4MjAubXAz','ODk3NTU5NS8zOS84OTc1NTk1XzM5XzE3MjNfMjI4MjAub2dn');return false;" rel="nofollow"><img src="/_presentation/img/ico_play.gif" alt="data pronunciation" id="play_38630" width="23" height="23" /></a><a href="/word/data/#en" title="data pronunciations">data</a> and others looking similiar.
我可以使用这些js函数做什么?
我是网络编程的新手,对js一无所知。
而且我知道forvo.com对于诸如我的任务有自己的API,但是我正在尝试不使用API。
参考方案
查看此处发生的情况,单击图标会触发Javascript Play()
函数。
此函数会解码传递给它的那些基础64编码值,并使用它们查找要播放的相关文件,以及您是否正在使用能够理解要在其中播放audio
元素(HTML5)的浏览器,或者如果没有,它将创建一个Flash Player进行播放。
如前所述,Play()
函数的第二个和第三个参数是要播放的文件的base-64编码的URI。可以很简单地将它们解码如下(例如,对于控制台应用程序):
static void Main()
{
string base64a = "ODk3NTU5NS8zOS84OTc1NTk1XzM5XzE3MjNfMjI4MjAubXAz";
string base64b = "ODk3NTU5NS8zOS84OTc1NTk1XzM5XzE3MjNfMjI4MjAub2dn";
Console.WriteLine(Encoding.Default.GetString(Convert.FromBase64String(base64a)));
Console.WriteLine(Encoding.Default.GetString(Convert.FromBase64String(base64b)));
Console.ReadKey();
}
如果运行此命令,您会发现它们会转换为:
8975595/39/8975595_39_1723_22820.mp3
8975595/39/8975595_39_1723_22820.ogg
Play
函数中有一些逻辑可以确定要使用哪个,但是最终,我最终播放了以下文件:
http://audio.forvo.com/mp3/8975595/39/8975595_39_1723_22820.mp3
如上所述,这项工作需要用Java语言完成,这在很大程度上取决于发出请求的浏览器或设备(例如HTML5功能)
不过,我必须补充一点,尽管这有望说明正在发生的事情,但我怀疑它是否可以用作解决方案;由于有500个请求存在一个付费专区,我以为他们会在一段时间内寻找来自同一IP地址的多个请求,并且会阻止任何此类避免付款的地址。
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
改造正在返回一个空的响应主体 - java我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…
Mongo汇总 - javascript我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …
如何在Wiremock中为JUNIT匹配精确的json - java我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares…
Ajax表单未获得结果 - javascript我有一个带有搜索功能的主页。从主页搜索可以正常工作,但是当我尝试使用ajax表单(在url.com/search?id=biology上)再次搜索时,我被重定向到404页面,提示未找到/Search。主页上的表格:@using (Html.BeginForm("Index", "Search", new { Retur…