Bluehornet blog

RaspberryPi, Arduinoを日常生活に活用してみたいブログ

乱数の神にランチを決めてもらう

1. 課題
週末の昼食は外食にすることが多いのですが、毎週お店選びに時間がかかります。
かといって子供に聞くと「ハンバーガー!」「ピザ!」となってしまうのでそれもちょっと嫌。

2. 解決策
お店は乱数の神に決めてもらいます。

3. 手順
・週末になるとメニューをTwitterにつぶやくプログラムをRapberry Piで運用
・Twythonを使ってつぶやく
・お店のリストは子供と一緒に行っても大丈夫だったお店を手動でcsvファイルにまとめる
・第3候補まで提案してみる

4. プログラム
とりあえず動かすこと、ということでpythonで下のように書きました。
重複も許容(それくらい神がおすすめしている!と)

#レストラン候補のツイート
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np
import time
from twython import Twython

if __name__ == '__main__':
        menu = pd.read_csv('/home/pi/Documents/python/menu/restaurant.csv')

        weekly = np.zeros((7,2), dtype = int)
        menu_num = len(menu.index)

        for i in range(3):
                weekly[i,0] = np.random.randint(menu_num)
                weekly[i,1] = np.random.randint(menu_num)

        first = '\n 1⃣  ' + menu.iat[weekly[0,0],0]
        second = '\n 2⃣  ' + menu.iat[weekly[1,0],0] 
        third = '\n 3⃣  ' + menu.iat[weekly[2,0],0] 
        fourth = '\n 1⃣  ' + menu.iat[weekly[0,1],1]
        fifth = '\n 2⃣  ' + menu.iat[weekly[1,1],1]
        sixth = '\n 3⃣  ' + menu.iat[weekly[2,1],1]

        week = 'レストラン候補' + first + second + third +'\n'+'\n' + 'メニュー候補' + fourth + fifth + sixth
        APP_KEY = '****'
        APP_SECRET = '****'
        TOKEN_KEY = '****'
        TOKEN_SECRET = '****'

        twitter = Twython(APP_KEY, APP_SECRET, TOKEN_KEY, TOKEN_SECRET)
        twitter.update_status(status=str(week))

pythonが読みにいっているCSVファイルは下記のような感じにしてあります。
(ローカルのお店はモザイク入れてますが・・・)
選択肢のお店がそもそも少ないですが、新しくチャレンジしたりして、気に入った店が
できたときは適宜CSVファイルに追記します。

f:id:bluehornet96:20190222054329p:plain:w250
csv

これをcronで毎週土曜日と日曜日の午前10時ころにつぶやく設定にします。
すると下のような感じ投稿されますので、候補のうちのどこかに食べに出かけます。

f:id:bluehornet96:20190208052723p:plain:w250
投稿画面

5. 運用してみた感想、今後の展開
「あーでもない」「こーでもない」と不毛な議論をする時間が減りました(少し)。
もちろん食べたいものがあるときはツイートを気にせずそっちに行きます。
「新しいお店の開拓」も大きな課題なので、ぐるなびあたりからたまに
新しいお店の情報を引っ張ってきたりしてみたいです。
車輪の再発明」も恐れることなくトライしていきたいと思います。

Raspberry piPythonも使い始めてみたばかりですので
いろいろ指摘していただけると嬉しいです。
そもそも自分でもちゃんとした書き方や効率的な方法を学んでいきたいと思いますが…