Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Source/Demo/Common/Samples/06.Embeded video.htm
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ <h3>
<h2>
Example
</h2>
<iframe height="360" width="480" src="https://www.youtube.com/embed/2l_PmSOreGc" />
<iframe height="360" width="480" src="https://www.youtube.com/embed/2l_PmSOreGc" /><br /><br />
<iframe height="270" width="480" src="https://player.vimeo.com/video/170338499" />
</blockquote>
</body>
</html>
152 changes: 83 additions & 69 deletions Source/HtmlRenderer/Core/Dom/CssBoxFrame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ private void LoadYoutubeDataAsync(Uri uri)
{
try
{
var apiUri = new Uri(string.Format("https://gdata.youtube.com/feeds/api/videos/{0}?v=2&alt=json", uri.Segments[2]));
var apiUri = new Uri(string.Format("https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v={0}&format=json", uri.Segments[2]));

var client = new WebClient();
client.Encoding = Encoding.UTF8;
Expand All @@ -172,89 +172,93 @@ private void OnDownloadYoutubeApiCompleted(object sender, DownloadStringComplete
{
if (e.Error == null)
{
var idx = e.Result.IndexOf("\"media$title\"", StringComparison.Ordinal);
var idx = e.Result.IndexOf("\"title\"", StringComparison.Ordinal);
if (idx > -1)
{
idx = e.Result.IndexOf("\"$t\"", idx);
idx = e.Result.IndexOf('"', idx + 7);
if (idx > -1)
{
idx = e.Result.IndexOf('"', idx + 4);
if (idx > -1)
var endIdx = e.Result.IndexOf('"', idx + 1);
while (endIdx > 0 && e.Result[endIdx - 1] == '\\')
endIdx = e.Result.IndexOf('"', endIdx + 1);
if (endIdx > -1)
{
var endIdx = e.Result.IndexOf('"', idx + 1);
while (e.Result[endIdx - 1] == '\\')
endIdx = e.Result.IndexOf('"', endIdx + 1);
if (endIdx > -1)
{
_videoTitle = e.Result.Substring(idx + 1, endIdx - idx - 1).Replace("\\\"", "\"");
}
_videoTitle = e.Result.Substring(idx + 1, endIdx - idx - 1).Replace("\\\"", "\"");
}
}
}

idx = e.Result.IndexOf("\"media$thumbnail\"", StringComparison.Ordinal);
idx = e.Result.IndexOf("\"thumbnail_url\"", StringComparison.Ordinal);
if (idx > -1)
{
var iidx = e.Result.IndexOf("sddefault", idx);
if (iidx > -1)
{
if (string.IsNullOrEmpty(Width))
Width = "640px";
if (string.IsNullOrEmpty(Height))
Height = "480px";
}
else
idx = e.Result.IndexOf('"', idx + 15);
if (idx > -1)
{
iidx = e.Result.IndexOf("hqdefault", idx);
if (iidx > -1)
var endIdx = e.Result.IndexOf('"', idx + 1);
while (endIdx > 0 && e.Result[endIdx - 1] == '\\')
endIdx = e.Result.IndexOf('"', endIdx + 1);
if (endIdx > -1)
{
if (string.IsNullOrEmpty(Width))
Width = "480px";
if (string.IsNullOrEmpty(Height))
Height = "360px";
_videoImageUrl = e.Result.Substring(idx + 1, endIdx - idx - 1).Replace("\\\"", "\"");
}
else
}

idx = e.Result.IndexOf("\"thumbnail_width\"", StringComparison.Ordinal);
if (idx > -1)
{
idx = e.Result.IndexOf(':', idx);
if (idx > -1)
{
iidx = e.Result.IndexOf("mqdefault", idx);
if (iidx > -1)
{
if (string.IsNullOrEmpty(Width))
Width = "320px";
if (string.IsNullOrEmpty(Height))
Height = "180px";
}
else
var endIdx = e.Result.IndexOf(',', idx);
if (endIdx > -1)
{
iidx = e.Result.IndexOf("default", idx);
if (string.IsNullOrEmpty(Width))
Width = "120px";
if (string.IsNullOrEmpty(Height))
Height = "90px";
var widthStr = e.Result.Substring(idx + 1, endIdx - idx - 1).Trim();
if (int.TryParse(widthStr, out int width))
{
if (string.IsNullOrEmpty(Width))
Width = width + "px";
}
}
}
}

iidx = e.Result.LastIndexOf("http:", iidx, StringComparison.Ordinal);
if (iidx > -1)
idx = e.Result.IndexOf("\"thumbnail_height\"", StringComparison.Ordinal);
if (idx > -1)
{
var endIdx = e.Result.IndexOf('"', iidx);
if (endIdx > -1)
idx = e.Result.IndexOf(':', idx);
if (idx > -1)
{
_videoImageUrl = e.Result.Substring(iidx, endIdx - iidx).Replace("\\\"", "\"").Replace("\\", "");
var endIdx = e.Result.IndexOf(',', idx);
if (endIdx == -1)
endIdx = e.Result.IndexOf('}', idx);
if (endIdx > -1)
{
var heightStr = e.Result.Substring(idx + 1, endIdx - idx - 1).Trim();
if (int.TryParse(heightStr, out int height))
{
if (string.IsNullOrEmpty(Height))
Height = height + "px";
}
}
}
}
}

idx = e.Result.IndexOf("\"link\"", StringComparison.Ordinal);
idx = e.Result.IndexOf("\"html\"", StringComparison.Ordinal);
if (idx > -1)
{
idx = e.Result.IndexOf("http:", idx);
idx = e.Result.IndexOf("src=", idx);
if (idx > -1)
{
var endIdx = e.Result.IndexOf('"', idx);
if (endIdx > -1)
idx = e.Result.IndexOf("embed/", idx);
if (idx > -1)
{
_videoLinkUrl = e.Result.Substring(idx, endIdx - idx).Replace("\\\"", "\"").Replace("\\", "");
var endIdx = e.Result.IndexOf('?', idx);
if (endIdx > -1)
{
var videoId = e.Result.Substring(idx + 6, endIdx - idx - 6);
_videoLinkUrl = "https://www.youtube.com/watch?v=" + videoId;
}
}
}
}
Expand Down Expand Up @@ -317,7 +321,7 @@ private void OnDownloadVimeoApiCompleted(object sender, DownloadStringCompletedE
if (idx > -1)
{
var endIdx = e.Result.IndexOf('"', idx + 1);
while (e.Result[endIdx - 1] == '\\')
while (endIdx > 0 && e.Result[endIdx - 1] == '\\')
endIdx = e.Result.IndexOf('"', endIdx + 1);
if (endIdx > -1)
{
Expand All @@ -333,49 +337,59 @@ private void OnDownloadVimeoApiCompleted(object sender, DownloadStringCompletedE
Width = "640";
if (string.IsNullOrEmpty(Height))
Height = "360";
var urlIdx = e.Result.IndexOf("\"https:\\/\\/", idx);
if (urlIdx != -1)
idx = urlIdx;
}
else
{
idx = e.Result.IndexOf("thumbnail_medium", idx);
idx = e.Result.IndexOf("\"thumbnail_medium\"", StringComparison.Ordinal);
if (idx > -1)
{
if (string.IsNullOrEmpty(Width))
Width = "200";
if (string.IsNullOrEmpty(Height))
Height = "150";
var urlIdx = e.Result.IndexOf("\"https:\\/\\/", idx);
if (urlIdx != -1)
idx = urlIdx;
}
else
{
idx = e.Result.IndexOf("thumbnail_small", idx);
if (string.IsNullOrEmpty(Width))
Width = "100";
if (string.IsNullOrEmpty(Height))
Height = "75";
idx = e.Result.IndexOf("\"thumbnail_small\"", StringComparison.Ordinal);
if (idx > -1)
{
if (string.IsNullOrEmpty(Width))
Width = "100";
if (string.IsNullOrEmpty(Height))
Height = "75";
var urlIdx = e.Result.IndexOf("\"https:\\/\\/", idx);
if (urlIdx != -1)
idx = urlIdx;
}
}
}
if (idx > -1)
{
idx = e.Result.IndexOf("http:", idx);
if (idx > -1)
idx = idx + 1;
var endIdx = e.Result.IndexOf('"', idx);
if (endIdx > -1)
{
var endIdx = e.Result.IndexOf('"', idx);
if (endIdx > -1)
{
_videoImageUrl = e.Result.Substring(idx, endIdx - idx).Replace("\\\"", "\"").Replace("\\", "");
}
_videoImageUrl = e.Result.Substring(idx, endIdx - idx).Replace("\\/", "/");
}
}

idx = e.Result.IndexOf("\"url\"", StringComparison.Ordinal);
if (idx > -1)
{
idx = e.Result.IndexOf("http:", idx);
idx = e.Result.IndexOf("\"https:\\/\\/", idx);
if (idx > -1)
{
idx = idx + 1;
var endIdx = e.Result.IndexOf('"', idx);
if (endIdx > -1)
{
_videoLinkUrl = e.Result.Substring(idx, endIdx - idx).Replace("\\\"", "\"").Replace("\\", "");
_videoLinkUrl = e.Result.Substring(idx, endIdx - idx).Replace("\\/", "/");
}
}
}
Expand Down
Loading