1. TOP
  2. Webサービス
  3. Twitter
  4. Twitterのつぶやきにある@(スクリーンネーム)と#(ハッシュタグ)にリンクをつけたいときはpreg_replace関数と正規表現を使いましょう

Twitterのつぶやきにある@(スクリーンネーム)と#(ハッシュタグ)にリンクをつけたいときはpreg_replace関数と正規表現を使いましょう

|

Twitter_logo_blue

前回、Twitter RESTAPI1.1のGET search/tweetsからつぶやきを引っ張ってきたときに、以下の文字列について、どのようにリンクをつけるのかが、分かりませんでした。

  • 「@~~~~」(スクリーンネーム)
  • #ハッシュタグ
  • https://t.co/○○○○○○○

今回は、そのリンクをつける方法が分かったので、そのコードを紹介しましょう。

preg_replace関数と正規表現

GET search/tweetsから引用したテキストの中にある、スクリーンネームやハッシュタグを正規表現にして、preg_replace関数を用いて、Twitterの検索画面に遷移させます。

#(ハッシュタグ)への自動リンク

$tweet['text']=preg_replace("/\s#(w*[一-龠_ぁ-ん_ァ-ヴーa-zA-Za-zA-Z0-9]+|[a-zA-Z0-9_]+|[a-zA-Z0-9_]w*)/u", " <a href=\"https://twitter.com/search/%23\\1\" target=\"twitter\">#\\1</a>", $tweet['text']);

https://twitter.com/search/%23\\1\で、#(ハッシュタグ)を用いたTwitterの検索画面に移動します。

@(スクリーンネーム)への自動リンク

$tweet['text']=preg_replace("/(@[A-Za-z0-9_]{1,15})/", " <a href=\"https://twitter.com/search/\\1\" target=\"twitter\">\\1</a>", $tweet['text']);

“https://twitter.com/search/\\1\のところは、”https://twitter.com/search/%40\\1\の方が良いような気がしますが、後者のアドレスだと、なぜか@@を
検索することになってしまいます。

URLのリンクはまだ分かりません

ここまで来ると「URLへのリンクは?」ということになりますが、そのコードは、この記事を書いた段階では分かりません。ただ惜しいところまで来ていますので、そのコードは以下の通りです。

$tweet['text']=preg_replace("/(http:\/\/t.co\/[a-zA-Z0-9]{10})/", " <a href=\"<?php echo $tweet\['user']['url']; ?>\\1\" target=\"twitter\">\\1</a>", $tweet['text']);

残念ながら、上記のコードでリンクをクリックしてみると、なぜか、

“http://○○○.com/%3C?php%20echo%20Array\[%27user%27][%27url%27];%20?%3Ehttp://t.co/ABCDE12345”

に遷移します。当然このアドレスでは、”404 Not Found”です。ただhttp://t.co/は表されているので、あとちょっとのところだと思います。

〔前の記事〕

【2014.10.22追記】

この記事で使った#に関するリンクに不十分な点があることが分かりました。関心のある方はこちらのページを参考にしてください。

〔参考サイト〕