如何通过点击webview中的YouTube搜索页面链接获取视频ID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过点击webview中的YouTube搜索页面链接获取视频ID相关的知识,希望对你有一定的参考价值。

我有一个webview,其中我提供了youtube搜索页面。 (https://www.youtube.com/results?search_query=)我想收到用户按下的剪辑的视频ID。到目前为止,我已经尝试了以下但没有成功:

1)使用shouldOverrideUrlLoading - 在搜索时按下视频剪辑时不会调用

public WebViewClient getWebViewClient()
{
    return new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.d("TAG","called overide url");
            if (url.startsWith(YOUTUBE_VIDEO_URL)) {
                setVideoIdFromLink(url);

                return true;
            }
            else
            {
                Log.d("GABI","url:"+url);
            }
            return false;
        }
        /*
        public void onLoadResource (WebView view, String url){

            if(url.startsWith(YOUTUBE_VIDEO_URL)){
                setVideoIdFromLink(url);
            }
        }*/
    };
}

2)设置onTouchListener - 方法总是返回类型0 extras null

private OnTouchListener linkClickTouch()
{
    return new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
             switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    startClickTime = Calendar.getInstance().getTimeInMillis();
                    break;
                }
                case MotionEvent.ACTION_UP: {
                    long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                    if(clickDuration < MAX_CLICK_DURATION) {
                        v.performClick();
                    }
                }
            }
            return true;
        }
        };
    }

点击动作:

private OnClickListener linkClick()
    {

        return new OnClickListener()
        {
            public void onClick(View v) {


                final WebView webview = (WebView) v;
                final WebView.HitTestResult result = webview.getHitTestResult();
                Log.d("TAG", "result:"+result.getType()+"
extras:"+
                result.getExtra());


                if (result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) {

                }

                if (result.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {

                }

                if (result.getType() == WebView.HitTestResult.IMAGE_TYPE) {

                }


            }
        };
    }

我知道我可以使用youtube API,但我希望在没有构建搜索活动的情况下实现这一点,只有当一个体面的搜索页面已经存在时才显示结果才能找到id。

答案

试试这个来提取Youtude Id

String pattern = "(?<=watch\?v=|/videos/|embed\/|youtu.be\/|\/v\/|\/e\/|watch\?v%3D|watch\?feature=player_embedded&v=|%2Fvideos%2F|embed%u200Cu200B2F|youtu.be%2F|%2Fv%2F)[^#\&\?\n]*";

Pattern compiledPattern = Pattern.compile(pattern);
Matcher matcher = compiledPattern.matcher(url); //url is youtube url for which you want to extract the id.
if (matcher.find()) {
    return matcher.group();
}

在webview中

       public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.d("TAG","called overide url");
            if (url.startsWith(YOUTUBE_VIDEO_URL)) {
                String pattern = "(?<=watch\v=|/videos/|embed\/|youtu.be\/|\/v\/|\/e\/|watch\?v%3D|watch\?feature=player_embedded&v=|%2Fvideos%2F|embed%u200Cu200B2F|youtu.be%2F|%2Fv%2F)[^#\&\?\n]*";

                Pattern compiledPattern = Pattern.compile(pattern);
                Matcher matcher = compiledPattern.matcher(url);
                if (matcher.find()) {
                    String id = matcher.group();
                }

                return true;
            }
            else
            {
                Log.d("GABI","url:"+url);
            }
            return false;
        }
另一答案

经过多次试验和错误之后:shouldOverrideUrlLoading或onPageStarted永远不会被调用。

你应该使用 -

public void onLoadResource (WebView view, String url)
{
     if(url.startsWith("https://m.youtube.com/watch?"))
     {

         setVideoIdFromLink(url);
         view.stopLoading();
     }
}

public String setVideoIdFromLink(String url)
{
    //get the video id from the link
    String[] args=url.split("v=");
    String videoId=args[args.length-1];

    return videoId;
}

以上是关于如何通过点击webview中的YouTube搜索页面链接获取视频ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从频道的网络视图中删除 YouTube 搜索栏?

如何检测您是不是在android java的webview中点击了youtube播放按钮?

Android:如何在 webview 活动中显示 Youtube 频道?

通过单击 Android Studio 中的按钮在 webview 中获取随机 Youtube 视频

Android webView 播放 YouTube 视频

如何理解,来自 webview 的链接是 YouTube 链接,在 YouTube 应用程序中打开它?