首页 > 解决方案 > Js后用C#从网站获取信息

问题描述

所以我正在做一个有趣的项目,并记住我是一个初学者,我想获取从这个广播频道播放的歌曲的信息:

ilikeradio(对不起,该网站是瑞典语)。

我只想简单地把它放在一个textBox.

我努力了:

WebClient web = new WebClient();
string htmlContent = new System.Net.WebClient().DownloadString(URL);

但这只是给了我源代码,而不是包含艺术家歌曲等列表项的代码。

感谢任何帮助请记住我是初学者。

标签: c#html

解决方案


您提供的 URL 似乎返回 HTML,但是如果您将获得的 HTML 与在浏览器中呈现的 HTML 进行比较(通过右键单击网页并检查 HTML),您会发现您获得的实际上不同于最终渲染了什么。原因是该网站正在使用 Ajax 加载歌曲列表。换句话说,当您调用 时,您会在 javascript 运行和更新之前DownloadString()从 web 服务中获取结果。

获得最终的 HTML 渲染结果并不容易。但你很幸运!

如果您访问该网站并在 Chrome 中打开调试工具并单击Network选项卡。接下来,对所有请求进行排序MethodGET请求应该在顶部。在这些 GET 请求中,您正在寻找一个:

https://unison.mtgradio.se/api/v2/timeline?channel_id=6&client_id=6690709&to=2018-10-02T08%3A00%3A50&from=2018-10-02T07%3A00%3A50&limit=40

此 URL 返回 Web 服务器最终加载并呈现给您的 JSON,以便您将其视为“歌曲列表”。

返回的 JSON 是包含一些元数据的歌曲列表。您将需要解析此 JSON 以在您自己的网页中提取和显示歌曲列表。我怀疑您可以查看该网站的源代码并找到 Javascript 来执行此操作;)

Newtonsoft JSONConvert是解析 JSON 的最佳库。

如果要查看带有歌曲列表的 JSON,请复制上面的 URL 并将其粘贴到浏览器地址栏中(然后按 Enter)。接下来,复制 JSON 结果,然后打开这个. 将 JSON 粘贴到Text选项卡中,然后单击Viewer选项卡。您会注意到第一个元素是Current Song,而其他元素在歌曲列表中。另请注意,每个元素都有一个名为 的子元素song,其中包含标题。

为了让你继续,试试这个:

using System;
using System.Net;
using Newtonsoft.Json.Linq;

public class Program
{
    public static void Main()
    {
         WebClient web = new WebClient();
         using (WebClient wc = new WebClient())
         {
            var json = wc.DownloadString("https://unison.mtgradio.se/api/v2/timeline?channel_id=6&client_id=6690709&to=2018-10-02T08%3A00%3A50&from=2018-10-02T07%3A00%3A50&limit=40");
            dynamic stuff = JArray.Parse(json);
            string name = stuff[1].song.title;
            Console.WriteLine(name);
         }
    }
}

笔记

当您尝试此操作时,您会注意到打印到控制台的歌曲名称在网页列表中不存在。这是因为如果您查看我在上面发布的 JSON URL,就会发现查询参数...其中之一是日期和时间。您需要相应地修改 URL 以获得最新的(现在显示在网站上)播放列表。


推荐阅读