1. TOPTOP
  2. Webサービス
  3. Twitter

Twitterの検索APIで取得した名前(フルネーム)にリンクをつけて個人アカウントに飛ばす方法が分からない件

|

Twitter_logo_blue

Twitter 検索APIのGET search/tweetsから名前(フルネーム)(新しいタブで開く)を引っ張ってリンクをつけ、個人のページに飛ばす方法が分からず悩んでおります。

先日、その件に関する記事(新しいタブで開く)を書いた後、丸一日考えてみましたが、いい書き方が思い浮かびません。

“このページは存在しません”

悩んでいるところを具体的に挙げると、preg_replace関数の記述のうち、第2引数の書き方です。

$tweet['user']['name'] = preg_replace("/(.*)/u", " <a href=\"https://twitter.com/\\1\" target=\"twitter\">\\1</a>", $tweet['user']['name']);

しかしこのコードでは、”このページは存在しません”というページに飛んでしまいます。

preg_replace_username

自分が書いたコードでは”https://twitter.com/名前”に飛んでしまいますが、最終的には、”https://twitter.com/スクリーンネーム“に飛ばしたいと考えています。

preg_replace関数の引数について

PHPのドキュメンテーション(新しいタブで開く)で、preg_replace関数の引数について調べて見ると、こうなっています。

  • 第1引数 → 検索を行う文字列もしくは配列のパターン
  • 第2引数 → 置換を行う文字列もしくは文字列の配列
  • 第3引数 → 検索・置換対象となる文字列もしくは文字列の配列

GET search/tweetsの中にある名前(フルネーム)を第3引数で特定、第1引数でパターンの確認、第2引数でURLに置換するという流れです。

従って、”このページは存在しません”というページに飛んでしまうのは、第2引数の値に原因があると考えられます。

“https://twitter.com/(バックスラッシュ)1″とは?

また上記のコードでは、aタグの中に、”\1“という文字列が2か所出てきます。

1か所目のhref属性を見ると、”https://twitter.com/\1″に飛べという意図なのでしょう。ただ、”\1(バックスラッシュいち)”の意味するところが分かりません。

GitHub上にコードを公開

とりあえず、今回の問題に関するコードをGitHub上にUPして公開しておきます。

GitHub echizenyayota/searchapi
https://github.com/echizenyayota/searchapi(新しいタブで開く)

ZIPをフォルダをダウンロードして、サーバーにUPするとこんな感じの画面が出ます。検索するキーワードは、”中央線”にしています。

preg_replace2

今回の問題に関する、コードは48行目にあります。

〔参考サイト〕