【问题标题】:How do I get direct URL of the .mp4 video using C#?如何使用 C# 获取 .mp4 视频的直接 URL?
【发布时间】:2016-01-12 16:49:11
【问题描述】:

我需要某种可以从 mp4engine 中提取链接的算法。

Here is the example of a page I want to scrap.

在这种情况下,所需的输出是:http://mp4engine.com:182/d/a2chmyndcqqgkpskitclvbgu5pgwxve2vmlrdsctpwbte2flb4i4hrz6/.hack_Roots (Dub) Episode 001-360p.mp4

我尝试使用HtmlAgilityPack 获取播放器代码,但它是p,a,c,k,e,d,我无法在我的C# Windows Phone 8.1 项目中执行它。想过用Jurassic包来执行JS,但是WinPhone8.1好像不行

这是我使用 HAP 获得的脚本:

<script type='text/javascript'>eval(function(p,a,c,k,e,d){while(c--    )if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p} ('15("14").13({f:"0://2.1:e/d/c/.b (a) 9 8- 7.6",12:"0://2.1/4/h.g",11:"0://2.1/i/10/z.y",x:"w",v:u,t:s,5:"0",r:"0://2.1/4/q /p",o:[{3:"n",m:"0://2.1/4/h.g"},{3:"l",k:{f:\'0://2.1:e/d/c/.b (a) 9 8- 7.6\',\'5\':\'0\'}},{3:"j"}],});',36,42,'http|com|mp4engine|type|player|provider|mp4|360p|001|Episode|Dub|hack_Roots|a2chmyndcqqgkpskitclvbgu5pgwxve2vmlrdsctpwbte2flb4i4hrz6||182|file|swf|jw6||download|config|html5|src|flash|modes|six|skins|skin|420|height|722|width|1484|duration|jpg|hahgl235zwv2|00000|image|flashplayer|setup|flvplayer|jwplayer'.split('|')))

我也尝试过使用内置的 WebView 控件:

WebView wv = new WebView();
//... navigation to string and all that
var res = await wv.InvokeScriptAsync("eval", null);

不幸的是,该函数返回空字符串(res = ""

我还搜索了可以解码的base64 字符串,但页面似乎没有。

如何获取视频网址?

【问题讨论】:

    标签: c# video web-scraping windows-phone html-agility-pack


    【解决方案1】:

    HtmlAgilityPack 只取静态 HTML 代码,需要执行动态内容(javascript)取数据。

    你有三种方式:

    1 - 在你的 c# 中为 javascript 实现一个美化代码(在这里你可以看到一个例子:http://jsbeautifier.org/)。在这种情况下并且仅针对您的情况,您可以提取视频网址,因为它在上面,但这并不常见。

    2 - 使用 .net 网络浏览器连接到页面并执行 javascript 代码来抓取数据,在这种情况下,您的应用程序必须是 Windows 窗体应用程序。

    3 - 使用无头浏览器连接到页面并执行 javascript 代码来抓取数据。你可以使用著名的 phatomjs。此处示例:C# example of using PhantomJS webdriver ExecutePhantomJS to filter out images

    【讨论】:

      【解决方案2】:

      &lt;div id="player_code" ... 内,最后一个&lt;script&gt; 标记包含视频网址所在的混淆javascript 代码。这个site 可以取消混淆这段代码,结果将如下所示:

      jwplayer("flvplayer").setup({
          file: "http://mp4engine.com:182/d/a2chmyndcqqgkpskitclvbgu5pgwxve2vmlrdsctpwbsg7asjwghgk4p/.hack_Roots (Dub) Episode 001-360p.mp4",
          flashplayer: "http://mp4engine.com/player/jw6.swf",
          image: "http://mp4engine.com/i/00000/hahgl235zwv2.jpg",
          duration: "1484",
          width: 722,
          height: 420,
          provider: "http",
          skin: "http://mp4engine.com/player/skins/six",
          modes: [{
              type: "flash",
              src: "http://mp4engine.com/player/jw6.swf"
          }, {
              type: "html5",
              config: {
                  file: 'http://mp4engine.com:182/d/a2chmyndcqqgkpskitclvbgu5pgwxve2vmlrdsctpwbsg7asjwghgk4p/.hack_Roots (Dub) Episode 001-360p.mp4',
                  'provider': 'http'
              }
          }, {
              type: "download"
          }],
      });
      

      如您所见,file: 包含视频 URL。因此,在您的 C# 代码中,您可以下载页面的 HTML 代码,在 &lt;div id="player_code" ... 中查找最后一个 &lt;script&gt; 标记,并使用同一站点上列出的 C# port 对其进行解混淆。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-12
        • 2011-08-26
        • 2014-05-27
        • 2018-01-21
        • 2016-04-30
        • 2019-03-17
        • 2020-12-17
        • 1970-01-01
        相关资源
        最近更新 更多