【问题标题】:How to get URL of mp3 when it is playing如何在播放时获取 mp3 的 URL
【发布时间】:2019-10-14 18:11:57
【问题描述】:

我们可以从浏览器、社交网络、应用程序播放 mp3 文件...我想在播放时获取 mp3 的 URL。这里的一种方法是在浏览器中创建扩展。但在其他应用程序中,我们不能。这是一个例子: 我去某个网站打开了一些 mp3:

如果您可以看到正在播放的音乐并且它有一个 URL。我想在音乐开始播放时获取此 URL。我怎样才能做到这一点?以及如何获取某些应用程序中正在播放的音乐的 URL?有可能吗?

【问题讨论】:

  • 你尝试过播放你的 mp3 什么?我的意思是,如果你正在播放 mp3,你的存储空间中应该已经有它的 url 或文件路径,否则你将无法播放任何 mp3。
  • @JaswantSingh 我们可以播放来自网站、应用程序(例如 VK、Facebook ...)的 mp3,而不仅仅是来自存储空间
  • 如果您使用 Facebook 或 YouTube 作为来源,则无法获取 mp3 的 url,因为这些网站不透露来源,而且下载这些是不合法的mp3。阿法克
  • @JaswantSingh,知道了,浏览器呢?
  • 如果您注意到,有些网站由于隐私和其他原因而不会透露 url(源),而有些网站会这样做,并且要从这些网站获取 url,您需要解析完整的 HTML (DOM) 页面来查找音频源,通过使用某种正则表达式来查找模式。

标签: java android download mp3


【解决方案1】:

如果您可以看到正在播放的音乐并且它有一个 URL。我想得到 音乐开始播放时的此 URL。我该怎么做?

如果您将网站加载到WebView,最简单的方法是通过拦截WebViewClient 的请求并检查URL 是否包含“.mp3”来获取URL。看下面的例子,

public class YourWebViewClient extends WebViewClient {
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            String url = request.getUrl().toString();
            if (url.contains(".mp3")) {
                Log.d(TAG, "MP3 url = [" + url + "]");
            }
            return super.shouldInterceptRequest(view, request);
        }
}

我怎样才能获得在某些应用程序中播放的音乐的 URL?是吗 可能吗?

可以,但不太容易,特别是如果您要从 SSL 流量中获取它。要嗅探其他应用程序的网络流量,您需要执行MITM。 Play 商店中有几个应用程序在做完全相同的事情。您可以查看HttpCanary 应用程序以供参考。基本上你需要执行以下步骤-

  1. 设置代理服务器
  2. 配置您的设备以将其网络流量传递到该代理服务器
  3. 请代理服务器给你网络数据
  4. 分析网络数据,看是否包含“mp3”网址

如果需要拦截https流量,需要生成并安装SSL证书。

【讨论】:

    【解决方案2】:

    首先从maven导入JSOUP库

    compile 'org.jsoup:jsoup:1.12.1'
    

    之后使用此代码

                Document doc = Jsoup.connect(url).get();
                System.out.println(doc.title());
                Elements h1s = doc.select(".jp-type-single"); 
                System.out.println("Number of results: " + h1s.size());
                for (Element element : h1s) { 
                String mp3Url = element.attr("data-xc-filepath"); 
                System.out.println("mp3 url: " + mp3Url);
                file_num++;
                URLConnection conn = new URL(mp3Url).openConnection();
                InputStream is = conn.getInputStream();
                OutputStream outstream = new FileOutputStream(new 
                File("/users/pelican/downloads/"+file_num+"file.mp3"));
                byte[] buffer = new byte[4096];
                int len;
                while ((len = is.read(buffer)) > 0) {
                    outstream.write(buffer, 0, len);
                }
    

    现在让我解释一下 JSOUP 使用您的 HTML URL 获取网页

    之后,它转换为文档

    然后,它使用 select 方法选择元素,这里我们得到了我们想要搜索的第一个音频标签。

    【讨论】:

      猜你喜欢
      • 2016-11-05
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多