Rubyによるアメブロ『いいね』自動化スクリプト(3) 「いいね」のターゲット設定(その1)
前回までで、「いいね」をつけるスクリプトが出来たので、今回はそのターゲットの抽出方法。
依頼者の要望は、
「自分のブログ記事についた「いいね」をお返しする」
と言うこと。
なので、自分のブログ記事についた「いいね」を取得する方法を考える。
「いいね」のデータを取得するには大きく3つの方法がある。
(1)記事のいいねのリンクから、その記事についた「いいね」を新しい順に見ることができる。
(2)ログインした状態の「いいね」履歴で
(2)-1 記事毎についた「いいね」の履歴を見ることができる。記事は記事の日付時刻順ではなく、「いいね」がついた時刻の新しい順に整列される。だから大昔の記事でも「いいね」が新しくつけば、データの先頭になる。
(2)-2 「いいね」をつけてくれたユーザ毎のデータを取得できる。この時もユーザの並びは「いいね」をつけた時刻の降順。新しく「いいね」をつけてくれたユーザほど新しく表示される。
これらのいずれの場合でも、データはhtmlではなくjsonの形式で送られて来る。一回のリクエストではデータ10件のみが送られ、全件のデータを得ることは出来ない。
この一度に全件データが得られないとこら辺が、自動処理が面倒になる所なのだが、自動処理はサービス供給側の意図から外れているし、全件データ送信はトラフィックとサーバーの負荷がやたらに増えて仕方ないので妥当な処理方法という所か。(そもそも今回のシステム変更の目的が、トラフィックとサーバー負荷の低減だったのではないかという気もする)
依頼者の要求仕様のお返しとしての「いいね」をつける相手に合致するのは、単純に「いいね」時刻順でデータを得られる(3)の方法。
この(3)の場合に送られてくるデータの内容を、もう少し詳しく見る。
データを得るためのリンクを押すと以下のリクエストが送られる。
GET /api/iine_history_user.json ?ts=1389608323904&callback=iineHistoryUserCallback&_=1389608323908 HTTP/1.1 Host iine.blog.ameba.jp User-Agent Mozilla/5.0 (Windows NT 6.0; Win64; x64; rv:29.0) Gecko/20100101 Firefox/29.0 Referer http://blog.ameba.jp/ucs/iine/list.html
ここで"ts"、および"_"というデータは、リクエストが発生した日時をGMTの1970年1月1日午前0時からの経過秒数でシリアライズされたモノ。
(どちらか片方だけで良い様な気がするのだが…)
リクエストの中には、自分のブログを表わす情報が全く入っていない。おそらく、そこら辺はクッキーで処理されているのではないかと想像しているのだが、良く分らない。
以下が送られてくるjsonのデータ例。
iineHistoryUserCallback({ "successFlg": true, "lastUpdMillis": 1389364094206, "lastFlg": false, "userList": [{//1件目のデータ "validFlg": true, "amebaId": "*****", "blogTitle": "************", "iineCount": 1, "profile": { "nickname": "***", "profileImage": { "url": "http://stat.profile.ameba.jp/profile_images/******/**.jpg", "height": 2048, "width": 1536 } } }, // ...途中省略... {//10件目のデータ "validFlg": true, "amebaId": "****", "blogTitle": "*******", "iineCount": 4, "profile": { "nickname": "****", "profileImage": { "url": "http://stat.profile.ameba.jp/profile_images/**************/**/****.jpg", "height": 236, "width": 243 } } }] });
送られてくるデータは、整形されていないベタのテキストデータだが、http://jsbeautifier.org/で整形。
内容を見ると
"lastUpdMillis"という項目に 1389364094206という数値が入っている。(この項目については後述)
"lastFlg"という項目に falseが入っていて、リストがまだ続く事がわかる。
"userList"の項目は、「いいね」をつけてくれた相手のid、相手のブログタイトル、「いいね」をつけてくれた回数、相手のプロファイルデータが10件分入っている。
"lastUpdMillis"という項目は、どうもこの10件の次、つまり11件目以降の「いいね」をつけてくれたユーザーのデータをリクエストする時に必要なデータで、10件目がついた日時データの様な気がする。(もしかしたらサーバー側が11件目の日時データを返して来ているのかも知れないが…)
でこの次のデータをリクエストする場合には、
GET /api/iine_history_user.json?updMillis=1389364094206 &ts=1389614304062&callback=iineHistoryUserCallback&_=1389614304064 HTTP/1.1
と、"lastUpdMillis"のデータを追加して送る。
このリクエストを"lastUpdMillis"の値が自分が望む日時になるまで、或いは"lastFlg"がTRUEになるまで繰り返して、データを得れば良い。。