読者です 読者をやめる 読者になる 読者になる

LOUPE Engineer Blog

Technology, Design, Education

Twitter Gem を使って、気になるあの人の生活リズムを覗き見たい...! #loupestudy

LOUPE Study 勉強会

あけましておめでとうございます!インターンの原田です。

年末のLOUPE STUDY で Ruby による Twitter のデータ・マイニング を紹介して実際にやってみよう...と思ったのですがgemのバージョンが上がっててそのままでは実行できず、間に合いませんでした。 RubyでTwitterのAPIを利用するのに便利なtwitter gem(sferik/twitter · GitHub)ですが、使い方をググっても日本語ではv5以前の記事が多く、詰まる所も多いので今回はtwitter gem v5の使い方を紹介しました。

バージョン

ruby 2.1.4 と twitter gem 5.13.0 を使用しています。

準備

TwitterのAPIを利用するには CONSUMER KEY, CONSUMER SECRET, ACCESS TOKEN, ACCESS TOKEN SECRET の4つが必要なので、ここでTwitterアプリを登録して取得します。

参考:

TwitterのAPIを使用するために必要なキーを取得する手順 - Hello API

#02 ツイッターアプリを登録する | ツイッターボットを作る - プログラミングならドットインストール

ツイートしてみる

gem install twitterしてから以下を実行。

require "twitter"

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

client.update("Hello Hello Hello")

v5以前と認証の書き方が変わっているようなので注意してください。

サンプル

ユーザーの情報を表示

client.user("senseinote").screen_name  #=>"senseinote"
client.user("senseinote").name         #=>"SENSEI NOTE(センセイノート)"
client.user("senseinote").description  # プロフィール
client.user("senseinote").tweets_count # ツイート数
#自分の情報を見たいときは単に client.user.name などと書くだけでよい

自分のタイムラインを表示

client.home_timeline.each do |tweet|
  puts tweet.full_text
  puts "FAVORITE: #{tweet.favorite_count}"
  puts "RETWEET : #{tweet.retweet_count}"
end

ユーザー「@senseinote」のツイートを最新5つ取得

client.user_timeline("senseinote", { count: 5 } ).each do |timeline|
  tweet = client.status(timeline.id)
  puts tweet.created_at
  puts tweet.text
end

「札幌」を含むツイートを検索、最新15ツイートをお気に入りして、そのユーザーをフォローする。

client.search("札幌").take(15).each do |tweet|
   client.favorite(tweet.id)
   client.follow(tweet.user.id)
end

ドキュメントを読みましょう!File: README — Documentation for twitter (5.13.0)

気になるあの人のツイート時間帯をチェック

ツイート回数を1時間ごとに区切ってカウントしてからグラフ化してみます。

require 'Twitter'

user_id = ARGV[0]

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

tweet_counts = []
(0..23).each { |i| tweet_counts[i] = 0 }

client.user_timeline(user_id, { count: 200 } ).each do |tweet|
  tweet_counts[tweet.created_at.hour] += 1
end

(0..23).each do |i|
  bar = "#" * tweet_counts[i]
  print "%02d  #{bar}\n" % i
end

北海道遠隔インターンチームの2人で結果を比べてみました。

f:id:hdddt:20150107015920p:plain

左()は不規則な生活をしていることが一目でわかりますね...。

右(mktakuya)は大体の起床時間や就寝時間が分かってしまいます!

皆さんも、気になるヒトの生活リズムをのぞいてみてはいかがでしょうか??