Java でビデオを処理するための最も便利で簡単な透かしソリューションは、Java ソース コードに添付されています。

この記事はプログラミング学習の研究のみを目的としており、他の目的には使用できません。   

何が起こっているのかわかりませんが、
まず、入力された短縮リンクを URL デコードし、デコードされた文字列を「decodeUrl」変数に格納します。
次に、Bilibiliサイトから取得した動画情報を格納するHashMap型データ「data」を作成します。
HttpUtil クラスの「getGetLocationtoutiao」メソッドを呼び出してショートリンクに対応するリダイレクトリンクを取得し、「location」変数に格納します。
"location" 変数にキー名 "location" のキーと値のペアが含まれているかどうかを確認します。存在する場合は、リダイレクト リンクが正常に取得されたことを意味し、リダイレクト リンクは "redirctUrl" 変数に格納されます。
HashMap タイプのデータ「ヘッダー」を作成して、HTTP リクエストのヘッダー情報を保存し、User-Agent、Accept などのいくつかの共通ヘッダー情報を設定します。
HttpUtilクラスの「doGetAndHead」メソッドを呼び出し、GETリクエストを送信して応答内容を取得し、応答内容を「body」変数に格納します。
応答コンテンツを処理し、「;(function())」を「@」に置き換えて、その後の正規表現一致の使用を容易にします。
正規表現を使用して、応答内容の「window.INITIAL_STATE=」と「;(function())」の間の内容を照合し、「initialStr」変数に格納します。
 

public Map bilibili(String shortUrl) throws Exception { 
    byte[] decode = URLDecoder.decode(shortUrl.getBytes()); 
    String decodeUrl = 新しい String(decode); 
    HashMap<String, String> データ = new HashMap<>(); 
    Map<String, String> location = HttpUtil.getGetLocationtoutiao(decodeUrl); 
    if (location.containsKey("location")) { 
        String redirctUrl = location.get("location"); 
        HashMap<String, String> ヘッダー = new HashMap<>(); 
        //headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.46");
        headers.put("user-agent", "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/90.0.4430.91 Mobile Safari/537.36");
        headers.put("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v =b3;q=0.7"); 
        headers.put("accept-encoding", "gzip, deflate, br"); 
        文字列本体 = HttpUtil.doGetAndHead(redirctUrl, ヘッダー); 
        String s = body.replaceAll(";\\(function\\(\\)", "@"); 
        StringInitialReg = "window.__INITIAL_STATE__=([^@]+)";
        パターンInitialP = Pattern.compile(初期Reg);
        マッチャーinitialM = initialP。
        if (initialM.find()) {
            文字列initialStr = initialM.group(1);  
            JSONObject jo = JSONObject.parseObject(initialStr); 
            if (jo.
                jo = jo.getJSONObject("ビデオ"); 
                if(jo.containsKey("viewInfo")){ 
                    jo = jo.getJSONObject("viewInfo"); 
                    if (jo.containsKey("title")) { 
                        String title = jo.getString("title"); 
                        data.put("desc", title); 
                    if (jo.containsKey("pic")) { 
                        String pic = jo.getString("pic") 
                    ; 
                        文字列カバー = URLDecoder.decodeForPath(pic, Charset.defaultCharset()); 
                        data.put("カバー", toHttps(カバー)); 
                    }
            String 
                ; 
        マッチャー m = p。 
        }

        String playInfoReg = "var options = ([^;]+)"; 
        パターン p = Pattern.compile(playInfoReg); 
        マッチャー m = p.matcher(s); 
        if(m.find()){
            文字列グループ = m.group(1); 
            JSONObject jo = JSONObject.parseObject(group); 
            if(jo.containsKey("readyVideoUrl")){ 
                String videoUrl = jo.getString("readyVideoUrl"); 
                data.put("videoUrl",toHttps(videoUrl)); 
        String playInfoReg = "window.__playinfo__=([ 
            ^ 
        <]+); 
        パターン p = Pattern.compile(playInfoReg); 
        if (m.find()) { 
            String videoInfo = m.group(1);



            JSONObject jo = JSONObject.parseObject(videoInfo); 
            if (jo.containsKey("データ")) { 
                jo = jo.getJSONObject("データ"); 
                if (jo.containsKey("dash")) { 
                    jo = jo.getJSONObject("dash"); 
                    if (jo.containsKey("video")) { 
                        JSONArray ビデオ = jo.getJSONArray("video"); 
                        if (videos.size() > 0) { 
                            JSONObject videoJo = videos.getJSONObject(0); 
                            StringbaseUrl = videoJo.getString("baseUrl"); 
                            data.put("ビデオURL", ベースURL); 
                            data.put("リファラー", redirctUrl);
                        if ( 
                StringUtils.isNotBlank (data.get 
            ( "videoUrl 
                    " 
    ))) {
    データ
        を返します
    null を返し
    ます。
}

 その他のプラットフォーム ソース コードのネットワーク ディスク アドレス:

リンク: https://pan.baidu.com/s/1S-I6Pvv31iwNgzVTZVSLwA 
抽出コード: rwtk 皆さんのコミュニケーションを歓迎します

https://minivideo.chaoniuck.com/erweima.jpg

おすすめ

転載: blog.csdn.net/javayxc/article/details/129825170