LoginSignup
0
0

More than 3 years have passed since last update.

Twitter APIでユーザーのタイムラインから、特定のワードが含まれたツイートを取得

Last updated at Posted at 2020-06-09

概要

Twitter APIでアプリを作成中、ユーザーのタイムラインから特定のワードを取り出す際になかなか苦労したので、その辺を記録として残しておきます。他にもやり方はあると思いますので、一つの手段として参考にしていただけると幸いです。

Twitter Developerへの登録やタイムライン取得の流れは、他にわかりやすい記事がありますので、そちらを参考にしてください。

Twitterのタイムライン取得

Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ

ユーザーのタイムラインを取得

//100件のツイートを取得
$params = array('count' => 100');

// ユーザーのタイムライン取得
$tweets_obj = $twitter->get('statuses/user_timeline', $params);

タイムラインから100件のツイートを取得。

dd($tweets_obj);

ddで中身を確認します。

array:94 [▼
  0 => {#1050 ▼
    +"created_at": "Mon Jun 08 15:37:53 +0000 2020"
    +"id": 00000000000000000
    +"id_str": "000000000000000"
    +"text": "おはよございます!!今日もいい天気です!!!"
    +"truncated": false
    +"entities": {#1268 ▶}
    +"source": "<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>"
    +"in_reply_to_status_id": null
    +"in_reply_to_status_id_str": null
    +"in_reply_to_user_id": null
    +"in_reply_to_user_id_str": null
    +"in_reply_to_screen_name": null
    +"user": {#1269 ▶}
    +"geo": null
    +"coordinates": null
    +"place": null
    +"contributors": null
    +"is_quote_status": false
    +"retweet_count": 0
    +"favorite_count": 3
    +"favorited": false
    +"retweeted": false
    +"lang": "ja"
  }
1 => {#1272 ▼
    +"created_at": "Mon Jun 08 10:35:05 +0000 2020"
    +"id": 11111111111111111
    +"id_str": "111111111111111111"
    +"text": " #今日の積み上げ 
      ✅筋トレ
      ✅ランニング
      ✅読書

   今日も1日頑張った!!"
    +"truncated": false
    +"entities": {#1273 ▶}
    +"source": "<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>"
    +"in_reply_to_status_id": null
    +"in_reply_to_status_id_str": null
    +"in_reply_to_user_id": null
    +"in_reply_to_user_id_str": null
    +"in_reply_to_screen_name": null
    +"user": {#1274 ▶}
    +"geo": null
    +"coordinates": null
    +"place": null
    +"contributors": null
    +"is_quote_status": false
    +"retweet_count": 0
    +"favorite_count": 0
    +"favorited": false
    +"retweeted": false
    +"lang": "ja"
  }
 2 => {#1277 ▼
    +"created_at": "Mon Jun 08 08:34:05 +0000 2020"
    +"id": 2222222222222
    +"id_str": "2222222222222"
    +"text": "僕は犬が好きです。猫も好きです。"
    +"truncated": false
    +"entities": {#1278 ▶}
    +"source": "<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>"
    +"in_reply_to_status_id": null
    +"in_reply_to_status_id_str": null
    +"in_reply_to_user_id": null
    +"in_reply_to_user_id_str": null
    +"in_reply_to_screen_name": null
    +"user": {#1280 ▶}
    +"geo": null
    +"coordinates": null
    +"place": null
    +"contributors": null
    +"is_quote_status": true
    +"quoted_status_id": 
    +"quoted_status_id_str": "222222222222222"
    +"quoted_status": {#1283 ▶}
    +"retweet_count": 0
    +"favorite_count": 0
    +"favorited": false
    +"retweeted": false
    +"possibly_sensitive": false
    +"lang": "ja"
  }

仮のツイート3件です。

正規化表現でワード抽出

ここから特定のワードを指定し、ツイートを取得します。

抽出するワードは、#今日の積み上げにします。

(ちなみに条件として、直近100件以内で#今日の積み上げを呟いている場合のみとします。)

//100件のツイートを取得
$params = array('count' => 100');

// ユーザーのタイムライン取得
$tweets_obj = $twitter->get('statuses/user_timeline', $params);

// 配列からtextカラムを抽出
$columns = array_column($tweets_obj, 'text');

// カラムから「#今日の積み上げ」を抽出
$result = preg_grep('/#今日の積み上げ+/', $columns);

array_columnで配列のtextを抽出。、preg_grepでパターンにマッチする配列の要素を返します。第一引数で検索するパターンを表す文字列を、第二引数で配列を入れます。

/#今日の積み上げ+/

ここで検索する文字列を指定しています。「+(+プラス)」は、一回以上の繰り返しを意味します。

   1 => """
     #今日の積み上げ 
      ✅筋トレ
      ✅ランニング
      ✅読書

   今日も1日頑張った!!
    """

これで#今日の積み上げが含まれたツイートを取得できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0