我曾经通过我在数据库中的链接嵌入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改变了v=结构,那么我看到的解决方案是否是可扩展的(在本例中,要求v=以及&feature是很难编码的)。
在我看来,我的解决方案仍然很棘手。有没有更有效的方法来做到这一点?
添加了
这个应用程序封装在一个silverlight解决方案中,所以我在这里应该提到这一点。
一种发布的解决方案是使用HttpUtility.ParseQueryString。这似乎是答案,直到我发现Silverlight的HttpUtility实现不包括ParseQueryString方法。
发布于 2011-09-10 20:02:10
那么,您应该只更新数据库,而不是。
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.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;
}
}
然后使用:
string videoId = MyHttpUtilities.ParseQueryString(youtube.Query)["v"],
feature = MyHttpUtilities.ParseQueryString(youtube.Query)["feature"];
发布于 2011-09-10 19:40:29
为什么这么复杂?
就用已经存在的东西。这是个网址。它在这里已经30年了,试试看
http://www.stev.org/post/2011/06/27/C-HowTo-Parse-a-URL.aspx
发布于 2011-09-10 19:44:16
尝试使用String.split()方法:
String[] splitedUrl=preURL.split("v=",StringSplitOptions.None);
String[] splitedUrl2=splitedUrl[1].split('&');
String vidID=splitedUrl2[0];
那你就会得到那个vidID。
https://stackoverflow.com/questions/7374041
复制相似问题