视频网站API的需求讨论---扬风科技
在我们实施项目的过程中,一客户提了个需求。就是能不能实现将他们上传到youtube上的视频,实现自动抓取下来,然后自动传到优酷上。
我们仔细研究了下。
youtube和优酷本身都提供了开发API,但这些API申请后都是对视频本身元数据的访问。也就是可以把他们的视频信息加到我们自己的应用程序里面,包括播放。
但这两个网站本身不支持下载和上传的API.
两个网站的数据格式都是json数据。
但两个API都没有提供下载和上传功能。
所以我们找到一些变通的可以下载youtube网站视频的解决方法
public class YouTubeDownloader
{
public static List<YouTubeVideoQuality> GetYouTubeVideoUrls(params string[] VideoUrls)
{
List<YouTubeVideoQuality> urls = new List<YouTubeVideoQuality>();
foreach (var VideoUrl in VideoUrls)
{
string html = Helper.DownloadWebPage(VideoUrl);
string title = GetTitle(html);
foreach (var videoLink in ExtractUrls(html))
{
YouTubeVideoQuality q = new YouTubeVideoQuality();
q.VideoUrl = VideoUrl;
q.VideoTitle = title;
q.DownloadUrl = videoLink + "&title=" + title;
if (getQuality(q))
urls.Add(q);
}
}
return urls;
}
private static string GetTitle(string RssDoc)
{
string str14 = Helper.GetTxtBtwn(RssDoc, "'VIDEO_TITLE': '", "'", 0);
if (str14 == "") str14 = Helper.GetTxtBtwn(RssDoc, "\"title\" content=\"", "\"", 0);
if (str14 == "") str14 = Helper.GetTxtBtwn(RssDoc, "&title=", "&", 0);
str14 = str14.Replace(@"\", "").Replace("'", "'").Replace(
"\"", """).Replace("<", "<").Replace(
">", ">").Replace("+", " ");
return str14;
}
private static List<string> ExtractUrls(string html)
{
html = Uri.UnescapeDataString(Regex.Match(html, "url_encoded_fmt_stream_map=(.+?)&",
RegexOptions.Singleline).Groups[1].ToString());
MatchCollection matchs = Regex.Matches(html,
"url=(.+?)&quality=(.+?)&fallback_host=(.+?)&type=(.+?)&itag=(.+?),",
RegexOptions.Singleline);
bool firstTry = matchs.Count > 0;
if (!firstTry)
matchs = Regex.Matches(html,
"itag=(.+?)&url=(.+?)&type=(.+?)&fallback_host=(.+?)&sig=(.+?)&quality=(.+?),{0,1}",
RegexOptions.Singleline);
List<string> urls = new List<string>();
foreach (Match match in matchs)
{
if (firstTry)
urls.Add(Uri.UnescapeDataString(match.Groups[1] + ""));
else urls.Add(Uri.UnescapeDataString(match.Groups[2] + "") + "&signature=" + match.Groups[5]);
}
return urls;
}
private static bool getQuality(YouTubeVideoQuality q)
{
if (q.DownloadUrl.Contains("itag=5"))
q.SetQuality("flv", new Size(320, 240));
else if (q.DownloadUrl.Contains("itag=34"))
q.SetQuality("flv", new Size(400, 226));
else if (q.DownloadUrl.Contains("itag=6"))
q.SetQuality("flv", new Size(480, 360));
else if (q.DownloadUrl.Contains("itag=35"))
q.SetQuality("flv", new Size(640, 380));
else if (q.DownloadUrl.Contains("itag=18"))
q.SetQuality("mp4", new Size(480, 360));
else if (q.DownloadUrl.Contains("itag=22"))
q.SetQuality("mp4", new Size(1280, 720));
else if (q.DownloadUrl.Contains("itag=37"))
q.SetQuality("mp4", new Size(1920, 1280));
else if (q.DownloadUrl.Contains("itag=38"))
q.SetQuality("mp4", new Size(4096, 72304));
else return false;
return true;
}
}
但是
往优酷上上传视频的方法还没找到解决方案,继续探索中。
扬风科技 http://www.yofotech.com
转载于:https://www.cnblogs.com/yofotech/archive/2013/05/02/3055044.html