試してみたブログ

AI関連・iPhone/Pixelなどのガジェット・音声入力・サーマルプリンタなど興味をある事をどんどん試してみた際の記録

買い物リストGoogle Keepの「My shopping list」をiPhoneからワンタップでサーマルプリンタから印刷する

背景

tameshitemita.hatenablog.jp

  • 前回、前準備として買い物リストをGoogle KeepのMy shopping listに集約をした
  • またブラックフライデーでサーマルプリンタを購入し、現在サーマルプリンタの活用を実施している

tameshitemita.hatenablog.jp

やりたいこと

  • Google KeepのMy shopping listをiPhoneからワンタップでサーマルプリンタから印刷したい

そのためには

  • raspberrypi上のpythonからGoogle Keepからデータを取ってくる
  • 取ってきたデータをサーマルプリンタで印刷する
  • iPhoneからショートカットを使ってraspberrypiに接続してpythonを実行する

試してみた

  • Pythonから直接扱うなら非公式のライブラリのgkeepapiを使うのが良さそう
  • 認証情報周りが思ったよりも複雑
  • master tokenを取得する必要がある

qiita.com

  • 上記を参考にmaster tokenを取得
  • 詰まったポイントとしては、下記の3点

    • OAuth Tokenの取得方法の際に画面が遷移しないが、そのままdeveloper toolでOAuthを取得する
    • Android IDはIMEIの番号を使えば良い(Pixelの設定画面から取得が出来た)
    • 実行して取得出来たtokenがめちゃ長いが、よくよくparseするとtokenは200文字程度なので注意深く見ること。他にもいろいろと情報があるのでそこは捨てる
  • 作成したコードは下記。指定したIDのノートを取得して出力する

import gkeepapi

EMAIL = "XXXXXXX@gmail.com"
MASTER_TOKEN = "aas_et/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
NOTE_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

keep = gkeepapi.Keep()

# 認証
keep.authenticate(EMAIL, MASTER_TOKEN)
keep.sync()  # ノート同期[web:5]

# IDからノート取得
note = keep.get(NOTE_ID)
if note is None:
    print("指定したIDのメモが見つかりませんでした。")
    exit(1)

# 未チェックの項目だけを抽出
unchecked_items = []
for item in note.items:  # チェックリストの各行にアクセス[web:32][web:96]
    if not item.checked:
        unchecked_items.append(item.text)

print(note.title)
for t in unchecked_items:
    print("[ ]", t)
  • 上記を前回作成したfree.py(引数に出力したいテキストを受け取ってサーマル側で印刷)に渡してあげる
  • 下記を参照

tameshitemita.hatenablog.jp

  • python3 gkeep.py | python3 free.py で問題無くサーマルプリンタから印刷が出来た!!
  • あとはiPhoneのショートカットで設定。これもssh+コマンドの組み合わせだけにした

今後の課題

  • 買い物リストにちゃんと集約を徹底する(メモやtodoistなどにメモしない)
  • 印刷した物をスマホの裏に貼り付けるなど、買い物行く前に印刷して持っていく様な導線を作る
  • 非公式のライブラリなので、不意に動かなくなるリスクがあるので、そこで運用を辞めてしまわない様にする