利用android解析抖音鏈接

抖音已經(jīng)占據(jù)了一部分人大多的休息時間,純粹是技術(shù)探索關(guān)于抖音的連接中提取原始視頻內(nèi)容。一開始發(fā)現(xiàn)如果從網(wǎng)頁中去深挖后可以得到去掉水印的視頻,抖音在架構(gòu)上的失誤。當(dāng)時就在想他們什么時候能修復(fù),果然幾個月后,在網(wǎng)頁上不斷去解析后得到的永遠就是加了水印的視頻。難道就沒有辦法了么。為什么網(wǎng)頁很多小工具還是可以下載,就這樣我就去第三方的解析網(wǎng)站上去找答應(yīng),結(jié)果是解析的過程都寫到了服務(wù)器端。
總覺得抖音這個視頻加的水印是一層視圖,不會將視頻運算壓力都交給抖音服務(wù)器。最后網(wǎng)上看到利用偽裝手機瀏覽器請求頭能獲取原始視頻連接,就這樣子摸索出了結(jié)果。關(guān)鍵代碼如下。
1,獲取剪切板內(nèi)容

 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,獲取網(wǎng)頁html全部內(nèi)容

 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"));// 讀取網(wǎng)頁全部內(nèi)容
            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,將鏈接封裝成流。由于抖音對請求頭有限制,只能設(shè)置一個偽裝手機瀏覽器請求頭才可實現(xiàn)去水印下載

        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轉(zhuǎn)成HttpStatusException就能獲取到原始視頻的連接。

(HttpStatusException) e).getUrl()

大功告成了就,這個是我寫的客戶端demo
下載地址
源碼私信我,我會單獨發(fā)哦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,626評論 1 32
  • FASDFAFSDAFDSFA發(fā)大水發(fā)送到發(fā)送到發(fā)呆噶三等功發(fā)送到發(fā)送到發(fā)送到發(fā)呆薩法 發(fā)呆薩法薩發(fā)呆薩法時
    Gyoung廣閱讀 121評論 0 0
  • 娃又一次凌晨醒了,好在,沒有哭。雖然玩到五點多才睡,我覺得還好。 睡一覺,救回半條命。 哭一場,找回半個精氣神。 ...
    阿又讀書閱讀 211評論 0 0

友情鏈接更多精彩內(nèi)容