解析URL获取视频ID
本文关键字:ID 视频 获取 URL 解析 | 更新日期: 2023-09-27 18:08:06
我曾经通过我在数据库中的链接嵌入YouTube视频。
YouTube不再允许我以这种方式嵌入。相反,我需要从我存储的URL中提取视频ID。
下面是一个链接的例子:
http://www.youtube.com/watch?v=72xSxQIRelc&feature=youtube_gdata
我需要提取的ID为72xSxQIRelc
。我知道我可以这样做:
string vidID =
preURL.Substring(preURL.LastIndexOf("v=") + 2,
preURL.Substring(preURL.LastIndexOf("v=") + 2).Length -
preURL.Substring(preURL.LastIndexOf("&feature")).Length)
我在这里看到一些Regex的东西是这样做的。我在想,相对而言,我的方式是不是效率太低了。我也不是一个regex功夫向导,所以我不确定我看到的解决方案是否可扩展,如果YouTube改变URL结构(在这种情况下,它是硬编码要求v=以及&功能)。
我的解决方案对我来说仍然很粗糙。有没有更有效的方法?
添加
这个应用程序被包裹在silverlight解决方案中,所以我应该在这里提到它。
一个张贴的解决方案是使用httutility . parsequerystring。这看起来像是答案,直到我发现Silverlight的HttpUtility实现不包括ParseQueryString方法。那么你应该只是更新你的数据库没有?
UPDATE
[VideosTable]
SET
video_url =
SUBSTRING(
video_url,
CHARINDEX('v=', video_url) + 2,
CHARINDEX('&', video_url, CHARINDEX('v=', video_url)) -
(CHARINDEX('v=', video_url) + 2)
)
WHERE
video_url LIKE '%youtube.com%';
然后你可以简单地使用来自数据库的视频ID…
如果您是从孔链接上传视频ID,则使用URI
对象代替
Uri youtube = new Uri("http://www.youtube.com/watch?v=72xSxQIRelc&feature=youtube_gdata");
string videoId = HttpUtility.ParseQueryString(youtube.Query)["v"];
Silverlight更新
Silveright缺少两个东西,System.Web.HttpUtility
和System.Collections.Specialized.NameValueCollection
部分的ParseQueryString
支持
那么,为什么不自己添加这个功能呢?
因为HttpUtility
已经是一个static
对象,所以你不能扩展它,但是你可以很容易地创建一个新的对象:
public static class MyHttpUtilities
{
public static System.Collections.Generic.Dictionary<string, string>
ParseQueryString(this string queryString)
{
System.Collections.Generic.Dictionary<string, string> r =
new Dictionary<string, string>();
// remove extra noise
queryString = queryString.TrimStart('?').Replace("amp;", "");
// split up and fill up Dictionary
foreach (string s in queryString.Split('&'))
{
if (s.Contains('='))
{
string[] par = s.Split('=');
r.Add(par[0], par[1]);
}
}
return r;
}
}
,然后使用:
string videoId = MyHttpUtilities.ParseQueryString(youtube.Query)["v"],
feature = MyHttpUtilities.ParseQueryString(youtube.Query)["feature"];
为什么把它弄得这么复杂?
只使用已经存在的。它是一个url。它已经在这里30年了,试试这个
http://www.stev.org/post/2011/06/27/C-HowTo-Parse-a-URL.aspx尝试使用String.split()方法:
String[] splitedUrl=preURL.split("v=",StringSplitOptions.None);
String[] splitedUrl2=splitedUrl[1].split('&');
String vidID=splitedUrl2[0];
然后是vidID