抖音已經(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ā)哦。