我曾经通过我在数据库中的链接嵌入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)
我在这里看到了一些正则表达式的东西。我想知道我的方式是否非常低效,相对而言。我也不是一个正则表达式的功夫向导,所以我不确定如果YouTube更改了URL结构,我看到的解决方案是否可扩展(在这种情况下,它的硬编码要求v =以及& feature )。
我的解决方案对我来说似乎仍然非常苛刻。有没有更有效的方法呢?
加
这个应用程序包含在 silverlight 解决方案中,所以我应该在这里提一下。
一个已发布的解决方案是使用HttpUtility.ParseQueryString。看起来这就是答案,直到我发现Silverlight的HttpUtility实现不包括ParseQueryString方法。
答案 0 :(得分:3)
为什么要这么复杂?
只需使用已存在的内容即可。它是一个网址。它在这里待了30年,试试这个
http://www.stev.org/post/2011/06/27/C-HowTo-Parse-a-URL.aspx
答案 1 :(得分:3)
那么您应该只更新数据库否?
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缺少两件事,即对ParseQueryString
的{{1}}部分和System.Web.HttpUtility
那么,为什么不自己添加这个功能呢?
由于System.Collections.Specialized.NameValueCollection
已经是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;
}
}
答案 2 :(得分:1)
尝试使用String.split()方法:
String[] splitedUrl=preURL.split("v=",StringSplitOptions.None);
String[] splitedUrl2=splitedUrl[1].split('&');
String vidID=splitedUrl2[0];
然后你将拥有该视频ID。