mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2025-05-23 11:16:59 -04:00
Parse YouTube video IDs natively
This commit is contained in:
parent
6d787c4071
commit
3d047321cf
2 changed files with 4 additions and 36 deletions
|
@ -1,6 +1,4 @@
|
||||||
using System.Text.RegularExpressions;
|
namespace DiscordChatExporter.Core.Discord.Data.Embeds;
|
||||||
|
|
||||||
namespace DiscordChatExporter.Core.Discord.Data.Embeds;
|
|
||||||
|
|
||||||
public partial record YouTubeVideoEmbedProjection(string VideoId)
|
public partial record YouTubeVideoEmbedProjection(string VideoId)
|
||||||
{
|
{
|
||||||
|
@ -9,37 +7,6 @@ public partial record YouTubeVideoEmbedProjection(string VideoId)
|
||||||
|
|
||||||
public partial record YouTubeVideoEmbedProjection
|
public partial record YouTubeVideoEmbedProjection
|
||||||
{
|
{
|
||||||
// Adapted from YoutubeExplode
|
|
||||||
// https://github.com/Tyrrrz/YoutubeExplode/blob/bc700b631bd105d0be208a88116347034bdca88b/YoutubeExplode/Videos/VideoId.cs#L40-L62
|
|
||||||
private static string? TryParseVideoId(string embedUrl)
|
|
||||||
{
|
|
||||||
// Regular URL
|
|
||||||
// https://www.youtube.com/watch?v=yIVRs6YSbOM
|
|
||||||
var regularMatch = Regex.Match(embedUrl, @"youtube\..+?/watch.*?v=(.*?)(?:&|/|$)").Groups[1].Value;
|
|
||||||
if (!string.IsNullOrWhiteSpace(regularMatch))
|
|
||||||
return regularMatch;
|
|
||||||
|
|
||||||
// Short URL
|
|
||||||
// https://youtu.be/yIVRs6YSbOM
|
|
||||||
var shortMatch = Regex.Match(embedUrl, @"youtu\.be/(.*?)(?:\?|&|/|$)").Groups[1].Value;
|
|
||||||
if (!string.IsNullOrWhiteSpace(shortMatch))
|
|
||||||
return shortMatch;
|
|
||||||
|
|
||||||
// Embed URL
|
|
||||||
// https://www.youtube.com/embed/yIVRs6YSbOM
|
|
||||||
var embedMatch = Regex.Match(embedUrl, @"youtube\..+?/embed/(.*?)(?:\?|&|/|$)").Groups[1].Value;
|
|
||||||
if (!string.IsNullOrWhiteSpace(embedMatch))
|
|
||||||
return embedMatch;
|
|
||||||
|
|
||||||
// Shorts URL
|
|
||||||
// https://www.youtube.com/shorts/sKL1vjP0tIo
|
|
||||||
var shortsMatch = Regex.Match(embedUrl, @"youtube\..+?/shorts/(.*?)(?:\?|&|/|$)").Groups[1].Value;
|
|
||||||
if (!string.IsNullOrWhiteSpace(shortsMatch))
|
|
||||||
return shortsMatch;
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static YouTubeVideoEmbedProjection? TryResolve(Embed embed)
|
public static YouTubeVideoEmbedProjection? TryResolve(Embed embed)
|
||||||
{
|
{
|
||||||
if (embed.Kind != EmbedKind.Video)
|
if (embed.Kind != EmbedKind.Video)
|
||||||
|
@ -48,8 +15,8 @@ public partial record YouTubeVideoEmbedProjection
|
||||||
if (string.IsNullOrWhiteSpace(embed.Url))
|
if (string.IsNullOrWhiteSpace(embed.Url))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var videoId = TryParseVideoId(embed.Url);
|
var videoId = YoutubeExplode.Videos.VideoId.TryParse(embed.Url);
|
||||||
if (string.IsNullOrWhiteSpace(videoId))
|
if (videoId is null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return new YouTubeVideoEmbedProjection(videoId);
|
return new YouTubeVideoEmbedProjection(videoId);
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<PackageReference Include="RazorBlade" Version="0.4.3" />
|
<PackageReference Include="RazorBlade" Version="0.4.3" />
|
||||||
<PackageReference Include="Superpower" Version="3.0.0" />
|
<PackageReference Include="Superpower" Version="3.0.0" />
|
||||||
<PackageReference Include="WebMarkupMin.Core" Version="2.14.0" />
|
<PackageReference Include="WebMarkupMin.Core" Version="2.14.0" />
|
||||||
|
<PackageReference Include="YoutubeExplode" Version="6.2.15" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
Loading…
Add table
Add a link
Reference in a new issue