はい。今日は帰りに〜〜〜を買い物するのを忘れないように・・・などといった使用を想定しております。
自分のアカウントと受けて返す用のbotアカウントがあることを想定しております。
現在はまだ朝に一件だけ吸い上げて、夜にそれを返す程度のことしか出来ません。。。
毎日動作させるのに耐えられるとこまで書けておりませんが、出来たとこまでアウトプットしております。
データベース用意
python -c "import sqlite3; db=sqlite3.connect('plan.db'); db.execute('create table plan(id, flag, name, plan)'); db.execute('''insert into plan values (0, 0, 'hoge', '実験成功!')'''); db.commit(); db.close()"
コマンドラインからこれからの動作用のDBファイルを用意。保存しているのは 発言id/フラグ判定用数値/スクリーンネーム/本文 です。フラグは0ですと未処理なのでtweet対象で終わると1になり過去ログになります。
plan.py
# !/usr/bin/env python
# -*- coding: utf-8 -*-
from urllib import urlencode
import twitter
import tweepy
import sqlite3
import datetime
import oat
## ↑私的にOAuthトークンを保管しているものです。
t = datetime.datetime.now()
### table (id, flag, name, plan)
conn = sqlite3.connect('/plan.db')
c = conn.cursor()
def hakidashi():
# flagの値が0であるお知らせしていないものを探して処理
c.execute('select * from plan where flag == 0')
for row in c:
tei = "@"+row[2]+" " + row[3]
oat.client.request('https://api.twitter.com/1.1/statuses/update.json', 'POST', urlencode({'status': tei.encode('utf-8')}))
c.execute('update plan set flag = 1 where plan = ?', (row[3],))
conn.commit()
c.close()
def suiage():
yotei = oat.api.mentions_timeline()[0].text
men = oat.api.mentions_timeline()[0].author.screen_name
twid = oat.api.mentions_timeline()[0].id_str
c.execute("insert into plan values(?, ?, ?, ?)",(twid, 0, men, yotei))
conn.commit()
c.close()
# cronで回すのに生活時間に合わせて調整をします。
if t.hour == 8:
suiage()
else:
hakidashi()
flagが0のものが一つもない場合の処理が出来ていないので定時で回すのはそれを先に。。
sqlite3の処理が書き方が悪いようで処理がすごく重いので機能を増やしたりなどはsql部分の効率を上げてから進めます。
最低限動かすために現在で捨てているもの。
予定日付や時間なども定型文で投げるようにして保存させれば、お昼や夕方のことだったりその日だけで完結ではなく未来日のことにも対応。
idをとってるので予定はリプライで返す。
過去ログに同じ用事が複数あったならば日付間隔によってはbotから提案をさせる。