feat: twitter OG tags

This commit is contained in:
2024-01-15 11:59:54 +00:00
parent 52b308967f
commit ccd1f7f2a7

View File

@ -86,7 +86,11 @@ public class OpenGraphController : Controller
new("og:title", meta?.Title ?? ""), new("og:title", meta?.Title ?? ""),
new("og:description", meta?.Description ?? ""), new("og:description", meta?.Description ?? ""),
new("og:image", meta?.Image ?? $"https://robohash.v0l.io/{nid.Special}.png"), new("og:image", meta?.Image ?? $"https://robohash.v0l.io/{nid.Special}.png"),
new("og:profile:username", meta?.Profile?.Name ?? "") new("og:profile:username", meta?.Profile?.Name ?? ""),
new("twitter:card", "summary"),
new("twitter:title", meta?.Title ?? ""),
new("twitter:description", meta?.Description ?? ""),
new("twitter:image", meta?.Image ?? $"https://robohash.v0l.io/{nid.Special}.png"),
]); ]);
AddCanonical(tags, profile?.ToIdentifier() ?? new NostrProfileIdentifier(nid.Special, null)); AddCanonical(tags, profile?.ToIdentifier() ?? new NostrProfileIdentifier(nid.Special, null));
@ -118,16 +122,23 @@ public class OpenGraphController : Controller
var hostProfile = await _redisStore.GetProfile(host); var hostProfile = await _redisStore.GetProfile(host);
var hostName = hostProfile?.Name ?? profile?.Name ?? "Nostrich"; var hostName = hostProfile?.Name ?? profile?.Name ?? "Nostrich";
var stream = ev.GetFirstTagValue("streaming") ?? ev.GetFirstTagValue("recording") ?? ""; var stream = ev.GetFirstTagValue("streaming") ?? ev.GetFirstTagValue("recording") ?? "";
var image = ev.GetFirstTagValue("image") ?? hostProfile?.Picture ?? $"https://robohash.v0l.io/{ev.PubKey.ToHex()}.png";
ret.AddRange(new KeyValuePair<string, string>[] ret.AddRange(new KeyValuePair<string, string>[]
{ {
new("og:type", "video.other"), new("og:type", "video.other"),
new("og:title", $"{hostName} is streaming"), new("og:title", $"{hostName} is streaming"),
new("og:description", ev.GetFirstTagValue("title") ?? ""), new("og:description", ev.GetFirstTagValue("title") ?? ""),
new("og:image", new("og:image", image),
ev.GetFirstTagValue("image") ?? hostProfile?.Picture ?? $"https://robohash.v0l.io/{ev.PubKey.ToHex()}.png"),
new("og:video", stream), new("og:video", stream),
new("og:video:secure_url", stream), new("og:video:secure_url", stream),
new("og:video:type", "application/vnd.apple.mpegurl"), new("og:video:type", "application/vnd.apple.mpegurl"),
new("twitter:card", "player"),
new("twitter:title", $"{hostName} is streaming"),
new("twitter:description", ev.GetFirstTagValue("title") ?? ""),
new("twitter:image", image),
new("twitter:site", "zap_stream"),
new("twitter:player", $"https://zap.stream/embed/{ev.ToIdentifier().ToBech32()}"),
new("twitter:player:width", "1280")
}); });
break; break;
@ -135,16 +146,20 @@ public class OpenGraphController : Controller
case 1_313: // stream clip case 1_313: // stream clip
{ {
var stream = ev.GetFirstTagValue("r")!; var stream = ev.GetFirstTagValue("r")!;
var image = ev.GetFirstTagValue("image") ?? profile?.Picture ?? $"https://robohash.v0l.io/{ev.PubKey.ToHex()}.png";
ret.AddRange(new KeyValuePair<string, string>[] ret.AddRange(new KeyValuePair<string, string>[]
{ {
new("og:type", "video.other"), new("og:type", "video.other"),
new("og:title", $"{name} created a clip"), new("og:title", $"{name} created a clip"),
new("og:description", ev.GetFirstTagValue("title") ?? ""), new("og:description", ev.GetFirstTagValue("title") ?? ""),
new("og:image", new("og:image", image),
ev.GetFirstTagValue("image") ?? profile?.Picture ?? $"https://robohash.v0l.io/{ev.PubKey.ToHex()}.png"),
new("og:video", stream), new("og:video", stream),
new("og:video:secure_url", stream), new("og:video:secure_url", stream),
new("og:video:type", "video/mp4"), new("og:video:type", "video/mp4"),
new("twitter:card", "summary_large_image"),
new("twitter:title", $"{name} created a clip"),
new("twitter:description", ev.GetFirstTagValue("title") ?? ""),
new("twitter:image", image),
}); });
break; break;
@ -154,14 +169,19 @@ public class OpenGraphController : Controller
const int maxLen = 160; const int maxLen = 160;
var trimmedContent = ev.Content.Length > maxLen ? ev.Content[..maxLen] : ev.Content; var trimmedContent = ev.Content.Length > maxLen ? ev.Content[..maxLen] : ev.Content;
var titleContent = $"{profile}: {trimmedContent}"; var titleContent = $"{profile}: {trimmedContent}";
var image = profile?.Picture ?? $"https://robohash.v0l.io/{ev.PubKey.ToHex()}.png";
ret.AddRange(new KeyValuePair<string, string>[] ret.AddRange(new KeyValuePair<string, string>[]
{ {
new("og:type", "article"), new("og:type", "article"),
new("og:title", titleContent), new("og:title", titleContent),
new("og:description", ""), new("og:description", ""),
new("og:image", profile?.Picture ?? $"https://robohash.v0l.io/{ev.PubKey.ToHex()}.png"), new("og:image", image),
new("og:article:published_time", ev.Created.ToString("o")), new("og:article:published_time", ev.Created.ToString("o")),
new("og:article:author:username", profile?.Name ?? ""), new("og:article:author:username", profile?.Name ?? ""),
new("twitter:card", "summary"),
new("twitter:title", titleContent),
new("twitter:description", ""),
new("twitter:image", image),
}); });
break; break;