Help us understand the problem. What is going on with this article?

SplunkにTwitterのデータをぶちこむ(自分のタイムライン)。

More than 5 years have passed since last update.

はじめに

前回はSplunkの新規インストールとAppを利用したTwitterデータのサンプル投入をやりました。

でもやっぱり自分のタイムラインを取得したいよね!

ってことと、

汎用APIのときどうしたらいいの?

ってのを思うので今回は2通りの方法でTwitterのStream APIから自分のタイムラインデータを取得します。

App for Twitter Data

ではまずは前回も使ったApp for Twitter Dataを利用して自分のタイムラインをSplunkに取り込みます。

そもそも前回取得していたあのサンプルデータって何だったのでしょうか。

WS000011.JPG

これは実はTwitterが提供している「 全ツイートの一部をランダムに取得するAPI 」から取ってきたデータでした。

GET statuses/sample

Returns a small random sample of all public statuses. The Tweets returned by the default access level are the same, so if two different clients connect to this endpoint, they will see the same Tweets.

GET https://stream.twitter.com/1.1/statuses/sample.json

で、それを指定しているのが/opt/splunk/etc/apps/twitter2/bin/stream_tweets.pyのスクリプトです。
詳しい部分は省きますが、このスクリプトが60秒に1回動き、その都度上記APIからツイートデータを取得しています。

さて、ではstream_tweets.pyのスクリプトを少しいじって自分のタイムラインを取得できるようにしましょう。
まずApp for Twitter Dataのセットアップ画面からEnable Twitter Input:のチェックを外してください。これでスクリプトの定期実行が停止します。
あるいはデータ入力の管理画面からスクリプトを直接無効にしてもOKです。

では次にスクリプト内の3箇所を下記のように修正してください。

vi /opt/splunk/etc/apps/twitter2/bin/stream_tweets.py
  • 【137行】def read_sample_tweet_stream(def read_user_tweet_stream(

  • 【172行】streamer.statuses.sample()streamer.user()

  • 【200行】read_user_tweet_stream(read_user_tweet_stream(

上記のように設定したら、先ほどの逆の手順でスクリプトの定期実行を有効化してください。
設定がそのままであれば60秒毎に実行されるので、下記のログを確認してpythonのエラーが出ていなければ成功です。

tail -f /opt/splunk/var/log/splunk/splunkd.log

改めてAppのDashboardを確認したら自分のタイムラインデータが取り込まれているはずです。
(ただ、ダッシュボードのパネルはsampleデータの分析に適したものなので自分のTLにはイマイチです)

REST API Modular Input

汎用的なAPIも扱えるようにREST API Modular Inputを用いてタイムラインデータを取り込みます。

REST APIのセッティング

ではRESTの入力設定をしていきましょう。

設定データ入力REST新規

下記のように設定してください。書いてないところはとりあえず空白でOKです。

項目名 設定値
Endpoint URL https://userstream.twitter.com/2/user.json
HTTP Method GET
Authentication Type oauth1
OAUTH 1 Client Key <API key>
OAUTH 1 Client Secret <API secret>
OAUTH 1 Access Token <Access token>
OAUTH 1 Access Token Secret <Access token secret>
Response Type json
Streaming Request ?
ソースタイプの設定 manual
ソースタイプ Twitter
その他の設定
インデックス main
  • 多分下の4つくらいは特に関係ないと思います。(詳しくは試してない)

さて、上記の設定を終えたら適当に名前を付けて保存、有効化しましょう。
TLにツイートが流れてくるのを待ってもいいし、自分で何かつぶやいてみてもいいでしょう。

そうしたらサーチ画面から

sourcetype = Twitter user.screen_name = <アカウント名>

あたりで検索をかけてみましょう。
多分指定したアカウントのつぶやきがヒットします。

WS000016.JPG

先ほど入力設定でResponse Type -> jsonを選択したためデータがjsonで取り込まれます。
また、Splunkはjsonの構造をkey-valueなノリで解釈してくれて、自動的にkeyをフィールドと認識してくれます。
なので面倒なフィールド調整などもいらず、非常に楽チンです。

では少しTwitterのjsonデータを見てみましょう。

Key Value
create_at つぶやいた時刻
source つぶやいたクライアント
text つぶやき本文
user.screen_name アカウント名
user.description プロフィール

というような感じになっています。この辺りの値でしぼっていくと膨大なツイートの中からでも効率的に目的のツイート(群)を見つけることができます。

TwitterのAPI

今回はStream APIということでひたすらデータの流れてくるTwitter APIを使っています。なので、最初に触れたhttps://stream.twitter.com/1.1/statuses/sample.jsonなんかを受け続けると、あっという間にフリーライセンス制限(参照)に引っかかってしまいます。ごく一部とはいえ、全世界でつぶやかれるツイートですからね。
(実際ひっかかったのでSplunk建て直しました)

他にどんなAPIがあるのか少し調べてみました。

API名 種別 説明 Endpoint URL
User timeline REST 指定ユーザのつぶやきを取得 https://api.twitter.com/1.1/statuses/user_timeline.json
Home timeline REST 指定ユーザのTL取得 https://api.twitter.com/1.1/statuses/home_timeline.json
Show tweet REST 指定IDのつぶやきを取得 https://api.twitter.com/1.1/statuses/show.json?id=xxx
Search tweet REST 指定条件の検索結果を取得 https://api.twitter.com/1.1/search/tweets.json
User stream STREAM 指定ユーザのストリームを取得 https://userstream.twitter.com/1.1/user.json
Site stream STREAM 複数ユーザのストリームを取得 https://userstream.twitter.com/1.1/site.json
Filter stream STREAM 指定条件のストリームを取得 https://stream.twitter.com/1.1/statuses/filter.json
Sample stream STREAM サンプルストリームを取得 https://stream.twitter.com/1.1/statuses/sample.json

確かにこうやって公開されているAPIが分かればTwitterクライアントの裏側がどうなっているか非常によくわかりますね。
AndroidにSample stream実装したらすぐ死にそう。

次回

とりあえずあとはしばらく放置しておけば勝手にデータが溜まってくるので、データがある程度溜まり次第 サーチの書き方 を勉強していきたいと思います。多分ドキュメントを淡々と読むことになりそう。 → 次回 できました。

参考

今回あれこれするにあたり下記を参考にさせていただきました。

t_nakayama0714
基盤系SEとして気になった技術についてあれこれやっています。たまに基盤に関係ないことも趣味100%としてやったりします。 共著ですがDevOps導入指南を書いています。https://www.amazon.co.jp/dp/4798147605
nssol
お堅いと評判のユーザ系SIerです。※各記事の内容は個人の見解であり、所属する組織の公式見解ではありません。
https://www.nssol.nipponsteel.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした