読書メーターからブクログに読了本のデータを移行する

5年位前から読書メーターで読みたい本と読み終わった本と感想の管理をしていたのだが、だんだん非公開にできないのが不満になってきた。これは読書メーターが読書好きが集まるSNS(率直にいってXXXXXだ)を標榜しており5年前の私がそれに気が付かなかったから仕方がないことなのだが、読む本もそこに書く感想も割と赤裸々なものがあり、一切非公開にできないのは、ちょっと。 思想の自由を守れ。

耐えきれなくなったので1年前にブクログに移行した。その際、読みたい本一覧についてはどうしようもないので選別も兼ねて手動でデータを移行した。これは読書メーターがXXXXXなサービスでインポートサービスがあるにも関わらずエクスポートサービスがないから。ちなみにブクログはどちらもある。
150冊くらいデータがある読了本(シリーズは最初の一冊しか登録してなかったり職の本を端折ったりしているから実際は多分5年でもうちょい読んでますよ:読書する人間的自意識主張)に関しては、流石に手作業で移行するのは面倒でそのまま置いておいた。スクレイピングとやらができれば抽出できると知ったけど、Rのその辺りはよくわからなかったので諦めた。1年前の私に解説すると、スクレイピングとはそのパソコンに命令して君の代わりにネット上の情報収集をやらせることでありこれをすると例えば昔書いたスコアアタックモデルのデータ入力パートが省略できるようになったりするよ。
そういう状況だったのだが春に転職してあれがそっち系になったので、pythonの練習をかねてコードを書いた。これでXXXXXサービスとはおさらば。ヨッシャッ!
まず読書メーターのどのページから情報を拾ってくるか決める。一年程前に書かれた記事によると、当時は読んだ本まとめみたいなコードが生成できたらしいのだが、読書メーターの仕様変更で一切できなくなっていた。すごいな。こんなに早く一方的に情報が無価値になることがあるのか。
ログインしたあとの読書管理ページのリストから拾うことにした。これは若干失敗で、読了本とそれ以外(未読本とか)のページの書式が違ったので、読了本にしか使えないコードになっちゃった。まぁいっか……。
#ログイン
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from lxml import html
import time
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
driver.get(“https://bookmeter.com/login”)
# ID/PASSを入力
id = driver.find_element_by_id(“session_email_address”)
id.send_keys(“YYYYY”)
password = driver.find_element_by_id(“session_password”)
password.send_keys(“ZZZZZ”)
time.sleep(1)
# ログインボタンをクリック
login_button = driver.find_element_by_name(“button”)
login_button.click()
できた~。うれし~。
ブクログにインポートする時に必要なデータを調べる。ISBN(13桁)が読書メーター側のリストに入ってなかったので面倒だなと思ったけど、これは必ずしも必要ないことがわかった。最低限必要なのはASIN(カンフージェネレーション)だけみたいだ。あとはレビューと読了日付を引っ張ってきたいな。
#読了日付リスト
date_list = []
for i in range(1,9):
    url = “https://bookmeter.com/users/WWWWW/books/read?display_type=list&page={}”.format(i)
    driver.get(url)
    date = driver.find_elements_by_class_name(“detail__date”)
    for i in date:
        date_list.append(i.text)
    time.sleep(1)
読了日付はユニークなクラス名があるので難しくなかった。
#ASIN関数
import re
def extract_asin(string):
    asin = re.search(pattern=r”(?<=asin\”:\”).+?(?=\”)”, string=string)
    return asin.group()
#review関数
def extract_rev(string):
    review = re.search(pattern=r”(?<=\”review\”:{\”text\”:\”).+?(?=\”)”,
                     string=string)
    if(review is None):
        return “”
    else:
        return review.group()
#ASINとレビューのリスト
asin_list = []
rev_list = []
for i in range(1,9):
    url = “https://bookmeter.com/users/WWWWW/books/read?display_type=list&page={}”.format(i)
    driver.get(url)
    #モーダルウィンドウ
    content = driver.find_element_by_class_name(“detail__edit”)
    content2 = content.find_element_by_xpath(“div”)
    string = content2.get_attribute(“data-modal”)
    content_list = driver.find_elements_by_class_name(“detail__edit”)
    for i in range(len(content_list)):
        content2 = content_list[i].find_element_by_xpath(“div”)
        string = string = content2.get_attribute(“data-modal”)
        asin_list.append(extract_asin(string))
        rev_list.append(extract_rev(string))
    time.sleep(1)
こっちが面倒だった……。モーダルウィンドウとかいうページ上で立ち上がるウィンドウがあるのだが、その要素の指定の仕方がわからなかった。クラスで名指ししようとしてもエラーが出るし……。結局モーダルウィンドウの手前のdivを指定してから、階層を一つ下げてパスで指定した。なんでこれでうまくいくのか一切わからん。詳しい人がいたら教えて下さい。
モーダルウィンドウの中身の取り出し方も最初わからなかった。多分こっちはget_attributeであっていると思う。出てくる文章は200文字くらいのタグ等含む文字列なのであとは正規表現で取り出し。正規表現もよくわからね~。宇宙人の言語か?見た目が記号の乱舞になるので本当に宇宙人の言語みたいに見える。正規表現って100年くらい歴史があるらしいけど、作った人絶対面白がってやったでしょ。
import pandas as pd
import csv
date_list2 = list(map(lambda x: str(pd.to_datetime(x, format=”%Y/%m/%d”)), date_list))
df = pd.DataFrame({“serviceID”: “1”,
                   “itemID”:asin_list, 
                   “ISBN”:””,
                   “category”:”-“,
                   “eval”:””,
                   “statement”:”読み終わった”,
                   “review”:rev_list, 
                   “tag”:”読メ”,
                   “memo”:””,
                   “regist_date”:date_list2,
                   “finish_date”:date_list2})
df.to_csv(“out.txt”, encoding=”cp932″, sep=”,”, index=False,
          header=False, quoting=csv.QUOTE_ALL)
あとはブクログの形式にあわせてデータフレームで加工。encordingはさくっといったけどquotingとダブルクオーテーション挿入の仕様がいまいちわからずしばし苦戦。
できた~!丸一日かかった~!面白かったからまぁいいか~。

ハイ・ライズ読み終わった……。うお~……半分読んだところで心が折れそうだったので安堵……。
読んだ本の記録は基本的にクローズドな場所でやっているけど、そうするとあまり響かなかった本に対して感想文を書くのをさぼるという問題がある。響かなかった本こそ記録しておく意義があるので。
読もうと思ったきっかけは2回あるはずだが(異なる場所で2回出会った本は読むことにしている)、片方は間違いなくバーナード嬢、もう片方は完全に忘れた。バーナード嬢でもどういう文脈で紹介されていたか忘れたので見返したら、ファイト・クラブと共に紹介されていて納得した。何故ならファイト・クラブは去年挫折したので。読書に割く時間が減る一方なので、途中で挫折してしまうとかけた労力が無駄になってしまってなかなか辛い。
ド嬢、巻末に参考文献付けてくれるの本当に助かる。わかってる。痒い所に手が届く。
私は「世界の真理に近付こうとする行い」それこそがサイエンスだと定義している。サイエンス・フィクションもサイエンスを掲げるからには、世界が主役でありそこに登場する人間は従なのだと思っている。だから登場人物がどんなに魅力的でなかろうがそれは減点要素にはならないのだが、それにしてもこう記号的人物が視点の叙述を延々と続けられると単純に頭に負荷がかかるな……。後半になるにつれて会話文を意図的に削って人物への共感を防いでいるのかもしれないが、殺人だのセックスだの集会だのを全部叙述で済ませられるのがなかなか……。何を読んでいるのかわからなくなってしまう……。この前、安部公房の他人の顔を読んだがあれは内省的になるあまり全然会話文のない小説だった。世界に目を向けても一人の人間の中身に目を向けても会話文が減ることになるというのは面白いな。
ファイト・クラブでも思ったが、暴力と荒廃みたいな描写にあまりぐっとこないみたいだ。やたらと長いし……。同様に撤退してしまった小説に時計じかけのオレンジがある。
でも世界の方の描写はロイヤルの高層マンション・カモメ・犬により動物園の比喩がかなり美しくてよかった。一冊を通して美しい風景が一瞬垣間見えたらそれだけで十分なのかもしれないな。ただ、テクノロジー三部作と言われる面は正直よくわからなくて、まぁこれは現代に置いて高層マンションはテクノロジーの象徴にはならないという時代性があるのでしょうがないかなと思う。そう考えるとSFって儚いな。宇宙が舞台のSFもそのうちこんな風に言われるようになっちゃうんだろう。
解説が読んでいて楽しかった。やっぱり文芸批評を勉強したいけどそのためには原典の読破が必要だしどこから入ったものか。


家が1R→1Kに拡張されて(1Kは1+Kなのにワンルームのこと1Rって略記するのおかしくない?)、料理を複数品作り、それをリビングに運ぶというプロセスが生じるようになった。
……お盆、いるな。


ふな屋敷のこと

人類!帰還三話!
烏有だけに、天佑
山風的には大河のこと100%で快諾した訳ではなかったのか……?誰なら満足なんだ……。
落花の大河に向ける愛情、全然信じられなくて笑う。根拠っぽい文章ここまでにありました!?どうせなんか企んでるんじゃないんですかこの人は。落花が向ける愛情で信じられるの、みっちゃんと撫子に向けるそれしかないな。
>獅子丸ならもう少し食い下がるんだけどな……。
何様だ???大体これキングレオとしての強度関係ないだろ!何が痛し痒しだ!馬鹿!
1話で獅子丸がレオが落花を排除していなくて役立たずだって言った所と関連が見られるな……。落花とレオ、なんか因縁がある……?そうだとしたら落花がレオを敵視しているのも納得できるし……。
でも落花とレオが敵対しているから敵の敵は味方で落花と獅子丸が同じ側に立っているように見えるの、少年漫画みたいでよい……。
うわーーーーーー龍樹の弟か妹の存在が確定してしまった……。
いや、大和オンリーという可能性も、あるから……ない……?ないか……。ないよな……。大和と撫子だし……。あったとしたら撫子がもう死んでいるという可能性くらいしか……。龍樹撫子に出会えなかった城坂論語がいるなら城坂論語に出会えなかった龍樹撫子が当然おり、その結果は多分幸福なものではないからあんまり考えたくないな……。いや、幸福ではなくあってくれと私が願っているだけだけど……でも撫子も丸太町の時点では欠点だらけの弱い人間だったから、そりゃ……。
>オレから大河を横取りして満足か?
なんだかんだ言って大河のこと自分のものだと思ってたんだな……知っていたが……。たまに物分りのよさそうなことを言って一人立しようと頑張っていて(結果あまり上手くいってない)るところもかわいかったが……。
再起動云々という話、単純にプログラムに不具合が起こりそうだからという理由かと思ったけど、大河……そんなにレオのことを……?大河……。
ついにシャーロック・ノートへの接続!?読んだのが前過ぎてあんまり覚えてねぇ……でも作者の中ではちゃんと生きてるんだな……。一乗寺の続きも書いて……。
獅子丸、不器用なあしながおじさん役似合うな。五条に全然懐かれてないけど……。
>なんだよセンズオブンキングレオって。
本日のナイスうゆう
獅子丸普段カード払いっぽそうだからわざわざ財布に現金入れてきたのかなと思うとカワイイ
レオと違って天親獅子丸なら大河に何も言わずに放っておくようなことはしないのですが?どう思う?既に一年以上放って置かれたから信用できない?そっか……。
>何せ茶山周辺には家庭教師ができそうな大学生がそれこそ佃煮にするほど住んでいる。
好き
キャッシュレス決済、円居挽TLだ(そこ?)
為書きからの学生証見せる流れミステリで好きだ……うゆうの追撃も実ははったりだし……
現衛庁もAIを作っていてその方法はレオとは違う……ここから導きだされる推理は……!レオは教師なし学習で作られている……!
だから何???
……わからん……
3話まで来てしまって折返しなんだが……帰還進捗どう……?ここまで獅子丸と大河ほとんど喋ってないんですけど……感情小説になる……?ここから巻き返す……?


起床。ラビチャを少し読む。ラビチャの読み返しは単純に自分の中の情報の整理として始めたのだが、コンテンツに触れる機会を増やしている側面もある気がしてきた。イベントを走るだけがアプリに触れる理由ではない……。
午前は片付けの一環として収納器具等を選ぶ。全然わからん。組み合わせてオリジナリティを出すのがトレンドということだと思うのだが無限に組み合わせの可能性があるので困る。とりあえず買ってみて考えよう。
部屋が少し片付いてきたので新居の面積が前の家と比べてかなり広いことがよくわかるようになった。関西では学生が終わっても学生が住むような1Rに住んでいたのでギャップがすごい。特に台所が格段に使いやすくなった。面積の増加は利便性の向上。こういう明瞭さを頼りに生きていきたいな。不動産屋とのバトルとかそういうのじゃなく。
近所からカレーの匂いが漂ってるので発生源を突き止めて食べてみたかったが、ランチの物価が全体的にやや高いことがわかってきた。このままだとブログが「@osmnkihのわくわく・(実在の地名)ランチ」になっちゃうので、大人しくスーパーでチーズ麻婆丼を買って食べる。チーズ麻婆丼って何?スーパーの惣菜として売っていていいものか?
仕事し始めて家から出なくなったら当然のごとく一日が短くなった。毎日少しは外に出るようにしよう……。
関東の別オフィスに出る案もあるにはあるのだが、このご時世にわざわざ人のいる所に出て来るなと言われそうで悩んでいる。
よし。12時までちょっとだけ時間があるので好きな日記を紹介しよう。日記継続日数が一ヶ月に到達したのでメタ日記ネタが解禁されたのだ。私はこういうよくわからん自分のルールの中で生きていきがち。
https://mabatakiwosurukarada.hatenablog.com/
私がここ一年くらい観測している日記流行の中で一番最初に購読を始めたブログ。ブログ主・古賀及子はデイリーポータルZの編集者。古賀さんはねーっ生活のある文章がただただ良いんだ……。どこから来るんだろうな、この魅力は。オノマトペか?感情のストレートさか?謎は尽きない……。
古賀さんの生活から子供が消えた時そこに何が残るのかに興味があるな。
http://blog.goo.ne.jp/ando_dpz
同じくデイリーポータルZの安藤昌教のブログ。やっぱ編集者って文章上手いもんなの!?
あとデイリーポータルZでは林編集長と石川編集委員もfacebook内でそれぞれ日記とギター練習記を書いていて、オモコロ編集部内にも日記ストが少なくとも三人おり、何故か私の観察界隈は日記ブームだ。
私自身はその日あったことというより思考のアウトプットとしてやっていきたい(いきたかった)のだが、まぁ24時間の間に考えてたこと忘れるよな。すごいことですよこれは。写真を取ってメモとするというのはアリな気がする。実際、これに習ってラビチャの感想を書く時にはメモを片手に書くのではなく、一度スクショを取ってから何人か分まとめて感想を書くようにしている。しかし私のipadは歩きながら使うカメラとしてはでかすぎるし、このブログはテキストサイトということでやっている。また謎の縛り。でもデザインって縛りじゃないですか?
あと純粋に文章をもう少し真面目に書こうという目標がある。ここで言っているのは小説的なテクニックではなく、意味をとってもらいやすく誤読されない日本語を書けという話です。ツイッターでその点を疎かにしている自覚は、それはもう明瞭にある。何故だか句点を打ちたがらないから、それが読みづらさの一因であると思う。これも由来不明の縛り。でも日本語に関しては書いて就寝時間に追われずに読んで直さないとどうしようもないので、あまり達成はできていない。今日はこんなこと書いたので時間を取ってちょいちょい直した。
こんなこと書いて明日日記終わったらダサいなと思ったけど、一ヶ月続けたから許してほしい。これが一ヶ月間メタ日記ネタを封印していた理由です。
そういえばいい加減タグか何かがないと過去の記事に飛ぶのが不便なので、そのうち何とかしたい。「一ヶ月日記」とでもしておくか。