あっきぃ日誌

ラズピッピブログのようなオタクブログのようななにか

はてなハイクのデータをはてな製CSVより充実したJSONで自力エクスポートする

ハイク終了1ヶ月前まで焦らしておいて、ようやく出てきたエクスポート機能。

d.hatena.ne.jp

えっCSV……?必要な項目があったら連絡してね……?何言ってるんだろうと思いながらも、早速ダウンロードしようとしたら、エラー吐いて死んだんですが、これは????

f:id:Akkiesoft:20190214000147p:plain

は?バカにしてくれちゃって〜www。自分で書きました。こんなギリギリまで引っ張ってこんなゴミ機能しかリリースできないとは笑止!(ここにタテジワネズミの画像を貼る)

私のスクリプトではAPIが返すJSONをそのまま保存するので、一見よくわからん情報もあるように見えますが、はてな謹製のエクスポートデータよりも完全なデータが取得できます。ハイクがなくなった後で「このパラメータがほしかった」となっても、もう手に入らないので。

Python: https://gist.github.com/Akkiesoft/afd6a0d2aeaac95780c651d8f759b7b7

UserScript: https://gist.github.com/Akkiesoft/bf94c62e993174e29411475eca456a70

Python分かる人は普通にこれでやったらいいような気がします。わかんない人はUserScript版をChrome + TamperMonkey環境で実行してください。

Tampermonkey - Chrome ウェブストア

UserScriptをインストールすると、ハイクの投稿ボックスの上になんかメッセージが出始めます。「ダウンロード」ボタンを押すとデータをハイクから取得します。取得中はこんなかんじでデータの取得状況が出ます。タブを閉じたり、ページを移動したりしないで待ちます。

f:id:Akkiesoft:20190214210113p:plain

取得が終わったら「ダウンロード」というリンクが増えます。これをクリックしてZIPファイルをダウンロードします。

f:id:Akkiesoft:20190214220127p:plain

というわけで、私の場合は複数のJSONが27MBくらい分降ってきました。12年の重みよ……いっかいエクスポートした後全消しやったので別のところにもうちょっとあるんだけど。

FAQ

スターの情報とかスタコメ(吹き出しマーク内のコメント)は入ってるの

はてなハイクはてなスターはもともと別サービスなので、ハイクAPIで取得ができません。今回終了するのはハイクなので、スターは終了しません。スターの情報はURLに紐付いて管理されているので、URLがわかればスターやスタコメも参照できます。むかし作った謎ページで見られます。なんか適当なハイクのエントリーURLを入れて見てみてください。

https://kokuda.org/service/star.html

ちなみにJSONにはスターをつけたユーザーのユニーク数がfavoritedに格納されています。

写真は

はてなフォトライフにアップロードされているので消えません。はてなが提供しているCSVでどういう書かれ方をしているか知りませんが、記法かURLであればそれをたどって画像を参照できるでしょう。

時刻は入ってるの

UTC+0なので自分で+9時間する必要はありますが、入ってますね。APIから帰ってくるのはunixtimeではないので。

JSON取って何するの

今のところ何もないけど、誰かがデータをインポートしてなにかできるサービスとかを作ったときに、手元にデータが無いと何もできないよ。私が取得したということはなにかしようと思っていないことはないよ。

特定の日付まで云々の入力ボックスについて

初めて取得した時点から、ハイク終了日までのエントリーをエクスポートをするときに使うやつです。

取得したZIPファイルに含まれている「ID-<数字>.json」のファイルのうち<数字>が一番大きいやつをボックスに貼り付けてからダウンロードボタンをクリックすると、途中でダウンロードを終わってくれます。

200エントリー単位で処理するので、データの重複が発生しますが許せ。

技術的なおもしろかったところ

jszip.jsをUserScript内で使ってみたんですが、大量に取得したJSONJavaScriptでZIPにまとめてダウンロードできるようにするとかめっちゃおもしろかった。ローカルに溜め込めるってことなんたよな。そんなこんなでハイクから引っ張ってくるのが130行ちょいでできちゃうと。すごい時代よね。

さいごに

データのエクスポートはいつまで提供されますか?って問い合わせたら、ハイクのサービス終了と同時にエクスポート機能も終了しますと回答を得ました。素敵ですね。終了直前のハイクははてな謹製エクスポートツールではエクスポートできないことが容易に想像できます。最後はスクショで保存しろと?笑

Haiku2Twitみたいに、登録してもらったユーザーのハイクをクロールして、転送ではなく保存しておくようなサービスでも今から書くべきなのかしら。悩ましい。

あと仕事中に書いてしまい、反省している。

CSV

どういう形式で降ってくるのか、ダウンロードできないから相変わらずわからなくて、どういうのか見たいんですけど。

追記

ダウンロードしたJSONを読み込んでそれっぽく表示するHTMLファイルというものも試しに作ってみました。思いつきで随時更新してます。とりあえずそれっぽい整形とスター・スタコメが出る辺りまで。いやほんと、今どきのJavaScript何でもかんたんにできるなまじで。

ハイクから拾ってきたJSONを食わせるとハイクっぽいTLに仕上げるやつ。JavaScriptまじで何でもできてすごいわね。 · GitHub