【Twitter API V2・PHP】ハッシュタグ・メンションをリンクに変換(置換)する方法
doudonn 更新日:
ハッシュタグ・メンションをリンクに変換
TwitterAPIで地味に難しかったところです。
ググれば解説サイトがたくさん見つかりますが、
完璧なものが見つからなかったので自分で何とかした。
※参考にしながらいろいろ合体した
1、ハッシュタグ変換
$text = preg_replace("/(?<![0-9a-zA-Z'\"#@=:;\/])[##]([\w\x{05be}\x{05f3}\x{05f4}]*[\p{L}_\x{30FB}]+[\w\x{05be}\x{05f3}\x{05f4}]*)/u","<span class=\"hashtag\"><a href=\"https://twitter.com/hashtag/\\1\" target=\"_blank\" rel=\"nofollow noopener\">#\\1</a></span>", $text);
これで2022年12月現在は100%対応できているはず。
Twitterはいつからか大文字の「#」や「・」も対応したので、
ググって見つかる解説は未対応なことが多かった。
ということもあり、日々改善する必要があるものでもあります。
2、メンション変換
$text = preg_replace("/(?<![0-9a-zA-Z'\"#@=:;\/])@([0-9a-zA-Z_]{1,15})/u","<span class=\"mentions\"><a href=\"https://twitter.com/\\1\" target=\"_blank\" rel=\"nofollow noopener\">@\\1</a></span><br />", $text);
メンションは特に難しくない。
ググって見つかるサンプルは「URLにある@」に対応していないことがあるので注意。
YouTubeやTikTokは@を含んでいるのでおかしくなってしまう。
これもまた新たなパターンが生まれるかもしれないので要注意ではある
サンプルはこちら
「ついったらトレンド」を見てみてください。
ちゃんとハッシュタグ・メンションが変換できているはずです。
またTwitterが新仕様にすればダメになるので、
自分が作ったサイトは日々見ることが何よりも大事。