diff --git a/lib/Noembed/Provider/Twitter.pm b/lib/Noembed/Provider/Twitter.pm index 2dfbb88..babdc42 100644 --- a/lib/Noembed/Provider/Twitter.pm +++ b/lib/Noembed/Provider/Twitter.pm @@ -2,16 +2,18 @@ package Noembed::Provider::Twitter; use parent 'Noembed::oEmbedProvider'; -sub patterns { 'https?://(?:www|mobile\.)?twitter\.com/(?:#!/)?([^/]+)/status(?:es)?/(\d+)' } +# Matches both twitter.com and x.com post URLs (including mobile and hash-bang variants) +sub patterns { 'https?://(?:www|mobile\.)?(?:twitter|x)\.com/(?:#!/)?([^/]+)/status(?:es)?/(\d+)' } sub build_url { my ($self, $req) = @_; my $captures = $req->captures; + # Normalize to twitter.com — publish.x.com/oembed does not reliably resolve x.com-domain URLs $req->url(sprintf "https://twitter.com/%s/status/%s", @$captures); $self->SUPER::build_url($req); } -sub provider_name { "Twitter" } -sub oembed_url { "https://publish.twitter.com/oembed" } +sub provider_name { "X (formerly Twitter)" } +sub oembed_url { "https://publish.x.com/oembed" } 1;