LoginSignup
4
4

More than 5 years have passed since last update.

twitter利用時間をを基準にざっくりと推定睡眠時間を計算する

Last updated at Posted at 2013-10-23

はい。たぶん探せばこんな感じのドコかにあるんじゃないかなぁと思うのですがなんとなく自前で行いたかったので。

想定している環境、使い方
主たる自分のtwitterアカウントから雑用のbotアカウントへおはよう/おやすみを@付きで投げて受け取った時間を基準に計算する。

jikan.py

#!/usr/bin/env python
# -*- coding:UTF-8 -*-

from urllib import urlencode
import re
import random
import datetime
import tweepy
import oat #ウチのbot機能用にOAuthトークン収納させてます

jikan = datetime.datetime.now()
#動かしている間隔と適当にバランス取ってこれくらいで
#取りこぼしはないかな、と。
tl = oat.api.mentions_timeline()
for i in range(1,5):
    tll=tl[i].text
    if re.search(u'@xxx おやす', tll):
        jk =  tl[i].created_at
#        jk = jikan.strftime('%Y/%m/%d %H:%M:%S')
        t = open('/kanri.txt', 'w')
        t.write(str(jk))
        t.close()
#        tane = 'お疲れ様でした。おやすみを{0:02d}時{0:02d}分でセットしました。'.format(jikan.hour, jikan.minute)
        tane = 'お疲れ様でした。おやすみを%s時%s分くらいでセットしました。' % (str(jk.hour+9), str(jk.minute))
        i+=5
    elif re.search(u'@xxx おはよ', tll):
        f = open('/kanri.txt', 'r')
        line = f.read()
        jk = tl[i].created_at
        sabun = jk- datetime.datetime.strptime(line, "%Y-%m-%d %H:%M:%S") 
        f.close()
        tane = 'おはようございます。twitter利用差分から推定睡眠時間は%sくらいです。' % str(sabun)
        break
    else: pass

oat.client.request('https://api.twitter.com/1.1/statuses/update.json', 'POST', urlencode({'status': tane}))

はい、変数名も適当で全てが雑です。
推定睡眠時間の差分返すのも整えようと思ったのですが上手く行かなかったので断念しました。daysで日にち差とsecondsで秒の差分はすぐ使えるんですが、hourとminuteは別途計算させるかstrでキャストして整形か正規表現で抜くかしか思いつかなく。。目的は時間計算さすだけなのでとりあえずコレで使いながら修正を重ねる予定です。

同一投稿の防止について
http://qiita.com/clarinet758/items/2a2f2ed176a5b25ae0d2

2013/11/28
同一投稿の防止も含めた修正版

op.py
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import urllib2
import lxml.html
from urllib import urlencode
import re
import random
import oat
import datetime
import tweepy
import json

y = datetime.datetime.now()
tll = oat.api.mentions_timeline()

## word
aut=u'自分のスクリーンネーム'
bot=u'ボットのスクリーンネーム'
oya=re.compile(u'おやすみ')
otu=re.compile(u'お疲れ様でした')
you=re.compile(u'おはよう')
oha=re.compile(u'利用差分')
kanri='/xxx/kanri.txt'
## template
neru = u'@%s @%s お疲れ様でした。ベッドインを%s時%s分くらいでセットしました。'
kisy = u'@%s @%s おはよー!おはよー!そこにいるの?まぶしー!まぶしー!twitter利用差分から推定睡眠時間は%sくらいです。'

def suimin():
    i=0
    while i < 4:
        tex = tll[i].text
        men = tll[i].author.screen_name

# おやすみもーど
# 私がおやすみを言ってたら仮動作。お疲れ様でしたを言うor言ってたで抜ける。
        if oya.search(tex) and men == aut:
#おやすみがhitしたら投稿時間を抜いて管理ファイルへ書き込み
#毎回寝てる間に時間書き直してるから無駄なので次回以降に改善
# 元々はココ
            jk = tll[i].created_at

            jkhour=jk.hour+9
            if jkhour>23: jkhour=jkhour-24
            tane = neru % (aut, bot, str(jkhour), str(jk.minute))
#おやすみがhitしたら新着にお疲れを探しに行く
            m=i
            while m>=0:
                chk=tll[m].text
                if otu.search(chk):
                    break
                else:
                    m,i = m-1,i-1
#おやすみから新着を見に行ってお疲れ様がなかった場合はiは-1になっているはず
            if i<0:
                t = open(kanri, 'w')
                t.write(str(jk))
                t.close()
                jkhour=jk.hour+9
                if jkhour>23: jkhour-=24
### tweetの仕方もOAuthトークンのところへ放り込みました
#                oat.client.request('https://api.twitter.com/1.1/statuses/update.json', 'POST', urlencode({'status': tane.encode('utf-8')}))
                message = tane.encode('utf-8')
                oat.tweet(message)
            else:
                break
#iを加算して強制的に探索を終了させる。
            i=10

# おはようもーど
        elif you.search(tex) and men == aut:
            f = open(kanri, 'r')
            line = f.read()
#おはようは投稿時間を抜いて、おやすみログから差分時間を計算
            jk = tll[i].created_at
            sabun = jk- datetime.datetime.strptime(line, "%Y-%m-%d %H:%M:%S") 
            f.close()
            tane = kisy % (aut, bot, str(sabun))
            m=i
            while m>=0:
# 利用差分がhitしたら抜ける
                chk=tll[m].text
                if oha.search(chk):
                    break
                else:
                    m,i = m-1,i-1
            if i<0:
                message = tane.encode('utf-8')
                oat.tweet(message)
            else:
                break
            i=10
        else:
#            print 'no hit'
#おやすみorおはようが無かったらiを加算して古い投稿を観に行く
            i+=1

過去では一日に繰り返しでおはよーされる不具合に対応しました。
tweetさせる命令はOAuthトークン管理と合わせて同じファイルに放り込みました。これでまたAPI変更とかでtweetするURLが変わってもあちこち書きなおす必要がなくなった。
まだまだ変数名とか汚いです。
27時とか言われるのを3時と言わせるようにしました。

4
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4