如何通过单击 web 视图中的 youtube 搜索页面链接获取视频 ID
Posted
技术标签:
【中文标题】如何通过单击 web 视图中的 youtube 搜索页面链接获取视频 ID【英文标题】:how to get video id from clicking youtube search page link in a webview 【发布时间】:2017-09-29 14:55:55 【问题描述】:我有一个 web 视图,我在其中展示了 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 - 方法总是返回 type 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()+"\nextras:"+
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。
【问题讨论】:
【参考方案1】:经过多次反复试验: 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;
【讨论】:
【参考方案2】:试试这个来提取 Youtude Id
String pattern = "(?<=watch\\?v=|/videos/|embed\\/|youtu.be\\/|\\/v\\/|\\/e\\/|watch\\?v%3D|watch\\?feature=player_embedded&v=|%2Fvideos%2F|embed%\u200C\u200B2F|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();
在网络视图中
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%\u200C\u200B2F|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;
【讨论】:
问题是根本没有调用该方法 - 这意味着您提到的代码不会被访问(我没有看到 Log.d("TAG","称为覆盖url"); 点击剪辑后按摩),我认为这与用于加载页面的 javascript 有关以上是关于如何通过单击 web 视图中的 youtube 搜索页面链接获取视频 ID的主要内容,如果未能解决你的问题,请参考以下文章
如何知道 youtube 视频何时开始播放以及何时在 ios 的 web 视图中按下 mpmovieplayer 的完成按钮