在Js之后使用C#从网站获取信息

时间:2018-10-01 20:41:19

标签: c# html

所以我正在做一个有趣的项目,请记住我是一个初学者,我想获取从该广播频道https://www.ilikeradio.se/powerhitradio/latlista/播放的歌曲的信息(很抱歉,该网站是瑞典语)

,只需将其放入文本框即可。

我尝试过

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

但这只是给了我源代码,而没有提供艺术家歌曲等列表项的代码。

感谢您的帮助,请记住我是初学者

1 个答案:

答案 0 :(得分:0)

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

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

如果您访问该网站并在Chrome中打开调试工具,然后单击Network标签。接下来,按Method对所有请求进行排序,并且GET请求应位于顶部。在这些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返回JSON,Web服务器最终将其加载并呈现为供您查看的“歌曲列表”。

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

Newtonsoft JSONConvert是解析JSON的最佳库。

如果要查看带有歌曲列表的JSON,请复制上面的URL并将其粘贴到浏览器地址栏中(然后按Enter键)。接下来,复制JSON结果,然后打开this。将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,以获取最新的播放列表(现在显示在网站上)。