mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Twitter - 全ツイート履歴データとの相違!

[ sns ] [ Ruby, Twitter ]

こんばんは。

現在では、ツイッターで自アカウントの「全ツイート履歴」が取得可能になっています。(データは JSON 形式。CSV データも有り)

当方は、「全ツイート履歴」が取得可能になる前から、Ruby + Twitter API で1時間単位、サーバ cron 起動で全ツイートを取得・データベース保存して管理しています。

今回は、自分が日々管理しているそれらのツイートデータが正当性を検証してみました。

検証は Ruby で簡単なスクリプトを作成して行いましたが、詳細な紹介はしません。(簡単なスクリプトの紹介のみ)

以下、検証した結果がどうだったのかを紹介します。

0. 前提条件

  • 検証した期間は、1回目のツイートから「全ツイート履歴」データをツイッター公式から取得した時まで。
  • ここでの「ツイート」とは、通常のツイートのほか、公式・非公式リツイート、リプライも含む。

1. ツイート件数検証

  • 日々 Ruby + Twitter API で管理しているツイートの件数 ・・・ 6,601 件
  • 「全ツイート履歴」データのツイート件数 ・・・ 6,594 件

「全ツイート履歴」のデータが7件少ない。

2. 「全ツイート履歴」データに存在しないツイート

日々 Ruby + Twitter API で管理しているツイート一覧には存在して、取得した「全ツイート履歴」データに存在しないツイートは、7件あった。
以下の3種類に分類できる。

  1. ツイートして Ruby + Twitter API でツイートデータを取得したが、その後ツイッター公式からそのツイートを削除してしまった。(1件) このツイート自体を無かったことにしたかったから、Twitter API で取得したツイートも削除しておくべきだった。
  2. 他のアカウントのツイートを公式リツイートして Ruby + Twitter API でツイートデータを取得たが、その後元のツイートがツイッター公式から削除されてしまった。(3件
    今改めて Twitter API で取得し直すと取得できないでしょう。
  3. 原因不明である。(3件
    ツイートして Ruby + Twitter API でツイートデータを取得し、それぞれのツイートIDで確認すると確かにそのツイートはツイッター公式に存在する(https://twitter.com/<アカウント名>/statuses/<ツイートID> で確認できる)が、タイムライン上で確認すると表示されない。
    個別にはツイートが存在していても、タイムライン上に表示されないツイートは、「全ツイート履歴」データにも存在しないようだ。(ツイッター公式側で、何かの不具合により不整合が発生している?)

3. Twitter API で取得できていないツイート

逆に、「全ツイート履歴」データには存在して、日々 Ruby + Twitter API で取得しているツイート一覧には存在しないツイートは、0件だった。

Twitter API は正常に機能していると考えてよいようだ。

4. その他

件数についての整合性は上記のとおりだが、他に気がついた注意点等を以下に掲載する。

  • 「全ツイート履歴」データ内のツイート時間(タイムスタンプ)は協定世界時(UTC)表示になっているので、日本時間(JST)に変換するには +0900 する。
  • ツイート時にツイッター公式以外のURL短縮サービスでURLを記述した場合、その後 Twitter API で取得するとツイッター公式のURL短縮 t.co に変換される。
    しかし、「全ツイート履歴」データでは、ツイート時のURL短縮がそのまま保存されている。
  • 「全ツイート履歴」データは、年月インデックス・年月別ツイートデータの他にダウンロード時の情報やアカウント情報もある。"tweets/data/js" ディレクトリ配下にある JavaScript 用データ(JSON形式のデータ)を少し眺めてみるだけで分かる。
  • 「全ツイート履歴」のCSVデータもある。"tweets" ディレクトリ配下の “tweets.csv” がそれである。

5. 所感

検証してみた結果、Twitter API を使用して取得しているデータに間違いはないようだ。(URL 短縮が t.co になる以外は)

「全ツイート履歴」では削除されてしまったツイートも、Twitter API で取得してしまっているので、ツイートの実体を管理するという観点ではこれで良いのではないかと考える。

6. ツイートデータ表示スクリプトの例

参考までに、Ruby で「全ツイート履歴」の JSON 形式データを全て読み込んで表示するだけのスクリプトを紹介する。(ツイートID、作成日、ツイート文のみを表示)

当然、今回の検証で使用したスクリプトとは異なる。あくまでも参考までに、ということで。
ちなみに、JSON データの先頭には、付属の JavaScript で処理するために必要な変数名が付与されているので、除去する処理も含めている。

read_tweet_hist.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
require 'json'

# CSV ファイル
TWEET_INDEX = "tweets/data/js/tweet_index.js"

class ReadTweetHist
  # ツイートリスト取得
  def get_tweet_list
    begin
      # インデックスデータ読み込み
      file = open(TWEET_INDEX, 'r').read
      file = file.sub("var tweet_index =  ", "")  # 不要文字列除去
      file = JSON.parse(file)

      # 各月のツイートデータ読み込み
      file.each do |json_index|
        json = open("tweets/#{json_index["file_name"]}", 'r').read
        json = json.sub("Grailbird.data.tweets_#{json_index["file_name"][-10,7]} =", "")  # 不要文字列除去
        json = JSON.parse(json)

        # ツイート表示
        json.each do |j|
          puts "[ #{j["id_str"]}, #{j["created_at"]} ]\n#{j["text"]}"
        end
      end

      return ary_data
    rescue => e
      str_msg = "[ERROR][#{self.class.name}.get_tweet_list] #{e}"
      puts str_msg
      exit 1
    end
  end
end

begin
  # ツイートリスト表示
  obj_main = ReadTweetHist.new
  obj_main.get_tweet_list
rescue => e
  str_msg = "[EXCEPTION] #{e}"
  STDERR.puts str_msg
  exit 1
end

この Ruby スクリプトをダウンロード・展開した「全ツイート履歴」データのディレクトリと同じ階層に置いて実行すれば、ツイートID・作成日・ツイート文を表示する。


日々 Twitter API を使用してれば「全ツイート履歴」データは必要ありませんが、そんな人でも時にはこうして検証してみるのもよいでしょう。

そうでない人でも、自分の過去の全ツイートを管理したくなった場合に、「全ツイート履歴」データは扱いやすくてよいでしょう。

以上。

Comments