利用android解析抖音链接

作者: ldoublem | 来源:发表于2019-05-17 10:32 被阅读17次

    抖音已经占据了一部分人大多的休息时间,纯粹是技术探索关于抖音的连接中提取原始视频内容。一开始发现如果从网页中去深挖后可以得到去掉水印的视频,抖音在架构上的失误。当时就在想他们什么时候能修复,果然几个月后,在网页上不断去解析后得到的永远就是加了水印的视频。难道就没有办法了么。为什么网页很多小工具还是可以下载,就这样我就去第三方的解析网站上去找答应,结果是解析的过程都写到了服务器端。
    总觉得抖音这个视频加的水印是一层视图,不会将视频运算压力都交给抖音服务器。最后网上看到利用伪装手机浏览器请求头能获取原始视频连接,就这样子摸索出了结果。关键代码如下。
    1,获取剪切板内容

     private String getCoypUrl() {
            ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            ClipData data = cm.getPrimaryClip();
            ClipData.Item item = data.getItemAt(0);
            String content = item.getText().toString();
            return content;
        }
    

    2,获取网页html全部内容

     public String getHtmlSource(String htmlUrl) {
            URL url;
            StringBuffer sb = new StringBuffer();
            try {
                url = new URL(htmlUrl);
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        url.openStream(), "UTF-8"));// 读取网页全部内容
                String temp;
                while ((temp = in.readLine()) != null) {
                    sb.append(temp);
                }
                in.close();
            } catch (MalformedURLException e) {
    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return sb.toString();
        }
    

    3,截取video_id

      protected String parseTag(String html, String tag) {//tag=video_id
            Pattern pattern = Pattern.compile("\\?" + tag + "(.*?)(&|\")", Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(html);
            if (matcher.find()) {
                return matcher.group(1);
            } else {
                return "";
            }
        }
    

    4,将链接封装成流。由于抖音对请求头有限制,只能设置一个伪装手机浏览器请求头才可实现去水印下载

            Map<String, String> headers = new HashMap<>();
            headers.put("Connection", "keep-alive");
            headers.put("Host", "aweme.snssdk.com");
            headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1");
            BufferedInputStream in = Jsoup.
                    connect(matchUrl).headers(headers).timeout(10000).
                    ignoreContentType(true).execute().bodyStream();
    

    这个时候会抛出403异常的异常,无法利用Joup获取视频对象,并作封装成一个输入流对象。但是这个时候你将Exception转成HttpStatusException就能获取到原始视频的连接。

    (HttpStatusException) e).getUrl()
    

    大功告成了就,这个是我写的客户端demo
    下载地址
    源码私信我,我会单独发哦。

    相关文章

      网友评论

        本文标题:利用android解析抖音链接

        本文链接:https://www.haomeiwen.com/subject/bnqnaqtx.html