前回の記事では、Twitter APIで取得したツイートの追加と削除について、考え方を書きました。
その内容を概念図で表すとこんな感じです。数字はすべて例。
- データベースの件数は常に100件とする
- データベースの追加と削除の件数は20件とする
- 追加と削除は常に1時間ごとに行う
以下でツイートの追加について、具体的に考えていきます。
ツイートの追加
ツィートの取得で最も気をつけなければならないことは、ツイートの重複です。重複が発生すると、MySQLのレコードをPHPで読み込んだときに、同じツィートが表示されてしまいます。そのタイムラインを見たユーザーは、一気に白けてしまうでしょう。
ステータスIDの活用
そこで登場するのが、ステータスID(俗称でTwitter ID)の活用です。2枚目の画像は、ステータスIDとその引数を活用したツィートの取得を表した概念図です。
ステータスIDとは546980877272502274のことを指し、ツイートの1つに付けられている認識番号のようなものです。下記のつぶやきは、https://twitter.com/echizenya_yota/と、546980877272502274を組み合わせて出来上がっています。
ステータスIDとは?
— Hiroshi Fukui@DMM英会話は休会予定 (@echizenya_yota) December 22, 2014
概念図の箇条書き
概念図の注意点を箇条書きにしておきます。
- a.アクセス時にステータスIDを取得する
- b.2回目以降は、REST APIのページ処理関連パラメータの引数(since_id)を指定する
- c.since_idとは、指定したステータスIDより大きい(より最近の)オブジェクトを返すための引数
- d.1回目の取得は、since_idを指定しないため、条件文(if文)で処理を分ける
概念図では説明の便宜上、id番号を連番にしています。ですが、実際にはGET statuses/user_timelineで取得しても連番にはなりません。
クエリ文と条件分岐(if文)の作成について
aからdの注意点で、頭をひねらなければならないのが、bとdです。
bでは、データベース内から、最も大きなステータスIDを持つレコードを見つけるクエリ文を作成する必要があります。
dでは、TwitterAPIを呼び出した回数(誰かがページにアクセスした回数)が、1回目であるかそうでないか、条件判定をしなければなりません。
次回は、その2点を踏まえたプログラムを作成します。
〔参考サイト〕