狐の嫁入りっていいよね

理系と芸術系になりそなった文系卒、コンピュータグラフィックスを学ぶ

あるアカウントのGoogle Keepを他のアカウントに全てコピーした

TL;DR

Google Keepの中身を他のアカウントに全コピーするPythonスクリプトを書いた。



経緯

今日、デザイナーさん達が隣でこんな話をしていた。

「諸事情でgoogleアカウントが使えなくなってしまうから、Google Keepで書いたメモ、他の自分のアカウントに移さないといけないんだよねえ」

「そうそう、あのコミュニティのGoogleアカウントのGoogle Keepでひたすら二年間メモしまくってきてたくさんあるから移すのめんどくさいなあ」

「これ一々手動でコピーしなきゃいけないよえ、めんどくさいねえ」

...

...

ぼく「...それ自動化できません?」

ここに言い出しっぺの法則が発動した。

「努力は楽をするためにある」が私の信条なので、私はワンパンでコピーができなければ気がすまなかった。

要するに極度のめんどくさがりなのである。

なんの生産性もない悲しい時間なんてなくなってしまえばいい。

あわよくば自動化の見返りとしてセブンイレブンのホットコーヒー(L)をおごってくれれば更に良い。

そんなわけで「極度のめんどくさがり VS ルーティンワーク」が始まった。



調査

公式APIがなかったので非公式のAPIを使うことにした。


最初はGoogle APIをコマンドで叩けばワンパンだろ。。。と思っていたが、調べたらそもそもGoogle Keepには公式のGoogle APIがなかった。

Google APIとはコマンドを叩けばグーグルのサービスをいろいろごにょごにょできるツール。例えば、ダウンロードとかアップロードとかをプログラミングで実行してくれる。何がいいかって、やりようによってはcronなどと併用すればアップロードやダウンなどを自動化できる。

「それ自動化できません?」と言った手前、「できませんでした」と言ったらフルボッコにされそうだったので頑張って代替案を探した。


二種類の代替案が見つかった。

Google TakeoutというGoogle公式バックアップサービス

まず、Google Takeoutという公式のバックアップサービスを見つけた。このサービス、Google Keepもバックアップできるが、HTMLファイルをzip形式なりtar形式なりに固めて出力される。ただ、Google Keepにそもそもインポート機能がない。 インポート機能自体はTake outしないでほしいなあ...。 なのでアカウントを跨いだデータ移行にはGoogle Takeoutは使えない。

②非公式のGoogle Keep API

次に、非公式ではあるものの、GithubGoogle KeepのAPIが転がっていた。なのでありがたく使わせていただくことにした。

kiwiz gkeepapi

gkeepapi's Documentation



実装

環境

Ubuntu 18.04LTS
Python3.6
pip install  gkeepapi

Pythonスクリプトはこんな感じになった。

import gkeepapi

# your google account to EXPORT google keep notes
export_account = gkeepapi.Keep()
e = export_account.login('export_account@gmail.com', 'your_password_xxxx')

# your google account to IMPORT google keep notes
import_account = gkeepapi.Keep()
i = import_account.login('import_account@gmail.com', 'your_password_yyyy')

# Fetch your all notes from export_account
notes = export_account.all()

# Copy all notes for your import account
for note in notes:
    if note.title == None:
        title = ""

    if note.text == None:
        text = ""

    print(note)
    print("---------------------------------")
    title = note.title
    text = note.text

    import_account.createNote(title=title, text=text)

# Save imports 
import_account.sync()

このスクリプトを実行すれば、一発であるGoogleアカウント内のGoogle Keepの全データをほかのGoogleアカウントのGoogle Keepにコピーできる。

自分の日常的に使っているGoogleアカウントからGoogleサブアカウントにコピーできることを確認したので普通に動くはず。 リストも画像も全てコピーされていた。

めでたし。