自動絶起謝罪ツイート

##自動で絶起の謝罪がしたい
##はじめに
僕はよく絶起します。「絶起」とは「絶望の起床」の略で、例えば今日の9時から面接なのに起床した時刻が9時、などの場合に用いられます。
友達の待ち合わせなどで絶起して待たせてしまうと申し訳ない。
そこで自動で絶起の謝罪をしてくれるプログラムを組みました。

##コード
```zekki_syazai.py
#!/usr/bin/env
# coding: utf-8 
from twython import Twython,TwythonError 
import time
from datetime import datetime, timedelta
import sys
import sched

#twitterの認証情報を入力 
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_KEY = ""
ACCESS_SECRET = ""
api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET) 
print('Auth Done!')

user_name ='nya3_neko2'#自分のアカウントを設定（アカウントは@をぬいたもの、僕のアカウントは@nya3_neko2なのでnya3_neko2になります）
now_tweet = ''

def get_time():
    global now
    now = datetime.now()
    now = datetime(now.year, now.month, now.day, now.hour, now.minute, 0)
get_time()


def get_text():# 最新ツイートのtextを取得
    global now_tweet
    global user_timeline
    try:
        user_timeline = api.get_user_timeline(screen_name = user_name,count=1)
        for tweet in user_timeline:
            now_tweet = tweet['text']
            print(now_tweet)
    except TwythonError as e:
        print('error')
        print (e)

def def1(word):
    print(word)

def tweet(naiyou):
    api.update_status(status = naiyou)

global answer
def input_time(which_time):
    answer = ''
    answer=input(which_time+':')
    if str.isdecimal(answer):
        wake_time[which_time] = int(answer)
    print (wake_time[which_time]) 
    print(type(wake_time[which_time]))

wake_time = {'year':now.year,'month':now.month,'day':now.day,'hour':now.hour,'minute':now.minute}

print(wake_time)

input_time('year')
input_time('month')
input_time('day')
input_time('hour')
input_time('minute')

get_time()
comp = datetime(wake_time['year'], wake_time['month'], wake_time['day'], wake_time['hour'], wake_time['minute'])
print(comp)
diff = comp - now
print('睡眠可能時間:'+str(diff))
if int(diff.days) >= 0:
    naiyou ='起床宣言'+str(comp)+'\n睡眠可能時間:'+str(diff)
    tweet(naiyou)
    print('waiting...')
    scheduler = sched.scheduler(time.time, time.sleep)
    scheduler.enter(diff.seconds, 1, def1, ("起きる時間になりました", ))
    scheduler.run()
    print('起床時間'+str(comp))
    i=1
    while True:
        get_text()
        if now_tweet!=naiyou:#新しいツイートか確認
            print('naiyou'+naiyou)
            print('now_tweet:'+now_tweet)
            get_time()
            diff = now-comp
            print(diff)
            if i >= 10:tweet('絶起しました。ごめんなさい\n'+str(diff))
            else:tweet('起床を確認\n予定起床時間との差'+str(diff))
            print('起床を確認')
            sys.exit()
        else:
            if i == 10:
                naiyou="絶起が確定しました"+'%\n'+str(now)
            else:
                naiyou="絶起可能性" + str(i*10)+'%\n'+str(now)
            tweet(naiyou)
            print("絶起可能性" + str(i*10)+'%\n'+str(now))
        i+=1
        time.sleep(60*6)
else:
    print ("時間過ぎてるよ")
    exit
```

##使い方
このプログラムの空欄にTwitterAPIを入力
パソコンでこのプログラムを実行
起きる日にちを聞かれるので入力（入力した日と同様の項目であればエンターで次の項目へ）
入力した日にちから起床時間の宣言が自動でツイートされます
そして起床時間に最新のTLがチェックされ、最後のツイートと異なった場合は起きてないものとして判定します
起床したらすぐにツイートしましょう（RTでもOK）
6分ごとにTLがチェックされ、絶起可能性として10%ずつカウントが上がっていき、絶起可能性もツイートされます
100%になると自動で謝罪します
新しいツイートが確認されて起床が確認されると、本来の起床時間からの差もツイートされます
これでみなさんも安心して絶起ができますね！
##おわりに
え？こんなん書く前に早く起きる努力をしろって？
全くその通り。早く寝ろよ。これ書いてるの深夜の3時だぞ。
みなさん絶起しないように早く寝ましょう

##ちょっと変えた
寝る前にプログラム起動するのめんどくさいかなーって思ってことで書き換えました
寝る前に起床宣言のワードとともに何月何日何時何分をツイートすると自動で認識して勝手に謝罪します
cronとかで定期的に自分が確実に寝てそうな時間に実行するのがよろしいかと思う

```python
#!/usr/bin/env python 
# coding: utf-8 
import sched
import sys
import time
from datetime import datetime, timedelta

from twython import Twython, TwythonError

#twitterの認証情報を入力 
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_KEY = ""
ACCESS_SECRET = ""
api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET) 
print('Auth Done!')

user_name ='nya3_neko2'#監視するアカウントを設定
now_tweet = ''

def get_time():
    global now
    now = datetime.now()
    now = datetime(now.year, now.month, now.day, now.hour, now.minute, 0)
get_time()


def get_text():# 最新ツイートのtextを取得
    global now_tweet
    global user_timeline
    try:
        user_timeline = api.get_user_timeline(screen_name = user_name,count=1)
        for tweet in user_timeline:
            now_tweet = tweet['text']
            print(now_tweet)
    except TwythonError as e:
        print('error')
        print (e)

def def1(tweet):
    print(tweet)

def tweet(naiyou):
    api.update_status(status = naiyou)

global answer
def input_time(which_time):
    answer = ''
    answer=input(which_time+':')############例外処理がまだ
    if str.isdecimal(answer):
        wake_time[which_time] = int(answer)
    print (wake_time[which_time]) 
    print(type(wake_time[which_time]))

wake_time = {'year':now.year,'month':now.month,'day':now.day,'hour':now.hour,'minute':now.minute}

get_text()

while now_tweet.find('起床宣言')  == -1:
    print(now_tweet.find('起床宣言'))
    get_text()
    time.sleep(60)

for i in range(1,13,1):
    if now_tweet.find(str(i)+'月') != -1:
        wake_time['month'] = i
    else:
        pass

for i in range(1,32,1):
    if now_tweet.find(str(i)+'日') != -1:
        wake_time['day'] = i
    else:
        pass

for i in range(1,13,1):
    if now_tweet.find(str(i)+'時') != -1:
        wake_time['hour'] = i
    else:
        pass

for i in range(1,61,1):
    if now_tweet.find(str(i)+'分') != -1:
        wake_time['minute'] = i
    else:
        pass

get_time()
comp = datetime(wake_time['year'], wake_time['month'], wake_time['day'], wake_time['hour'], wake_time['minute'])
print(comp)
diff = comp - now
print('睡眠可能時間:'+str(diff))
if int(diff.days) >= 0:
    naiyou ='起床宣言'+str(comp)+'\n睡眠可能時間:'+str(diff)
    tweet(naiyou)
    print('waiting...')
    scheduler = sched.scheduler(time.time, time.sleep)
    scheduler.enter(diff.seconds, 1, def1, ("起きる時間になりました", ))
    scheduler.run()
    print('起床時間'+str(comp))
    i=0
    while True:
        get_text()
        if now_tweet!=naiyou: #新しいツイートか確認
            print('naiyou'+naiyou)
            print('now_tweet:'+now_tweet)
            get_time()
            diff = now-comp
            print(diff)
            if i >= 10:tweet('絶起しました。ごめんなさい\n'+str(diff))
            else:tweet('起床を確認\n予定起床時間との差'+str(diff))
            print('起床を確認')
            sys.exit()
        else:
            if i == 10:
                naiyou="絶起が確定しました"+'%\n'+str(now)
            else:
                naiyou="絶起可能性" + str(i*10)+'%\n'+str(now)
            tweet(naiyou)
            print("絶起可能性" + str(i*10)+'%\n'+str(now))
        i+=2
        time.sleep(60*6*2)
else:
    print ("時間過ぎてるよ")
    exit

```