「あいつまだ寝てるのか...」ができるプログラムを作ってる話
ラズパイの環境構築がいい感じにできてきて、日常も暇ができてきたので前々から構想していたプログラムを形にし始めています。
具体的にどういうのなの
というTwitterBotを製作中。要は「あいつ最後に呟いてからもうn分経ってんじゃん、寝てんな」ができるということ。
普段から必要としてる相手が暇なのかを確認するのにいちいちユーザーページまで見に行くことが多かったので、結構需要がある機能だと思ってる。無くてもいいんです、私が使うから。
進捗
@akkisino02 7shage's last post is 「モジャが最後にiTunes使ったの何十年前なんだ...」 2015-08-26 00:54:19 +0900
— おるか?w bot (@got_up_bot) 2015, 8月 25
*1
現在実装済みの機能
- 指定したユーザーの最終Tweetを取得
- 取得した瞬間のタイムスタンプを付加(連投規制回避のためのUUID)
- サーバー側へのログの保存
- ピリオドによる連投回避で問い合わせが可能。ピリオドは全て消去して処理される。
今後実装が必要な機能
- 取得したTweetの投稿された時間と現在時間との相対時間。要はn分前か。
- 鍵垢、存在しないIDを弾く。エラメ返信。(現時点では鍵垢、存在しないアカウントを指定されると無条件で落ちる。)
- 最終Tweetがこのbotへの問い合わせだった場合の処理をどうするか。(現時点では最終Tweetがこのbotへの問い合わせだった場合返信後無条件で落ちる。)
- 最終Tweetが誰かへのリプライだった場合の処理をどうするか。(現時点では最終Tweetにリプライが含まれるとそのまま引用してしまうためその相手にも返信が行ってしまう。迷惑。)
その他思いついたものを実装予定。
元々はメインのアカウントで動かす予定だったが、このbotがフォローしている相手なら取得できてしまうという仕様上、鍵垢晒しが可能になってしまうため専用のアカウントを用意した。このアカウントでは鍵垢をフォローしない事によりプライバシーを守ることができる。つよい。
一応現時点でのコード状態。整理もしてないし、中途半端に実装して悩んでる途中のコメントアウトも外していないのでメモ程度に。
# coding: utf-8 require "./consumer" require "twitter" rest_client = Twitter::REST::Client.new do |config| config.consumer_key = CONSUMER_KEY config.consumer_secret = CONSUMER_SECRET config.access_token = ACCESS_TOKEN config.access_token_secret = ACCESS_SECRET end stream_client = Twitter::Streaming::Client.new do |config| config.consumer_key = CONSUMER_KEY config.consumer_secret = CONSUMER_SECRET config.access_token = ACCESS_TOKEN config.access_token_secret = ACCESS_SECRET end stream_client.user do |status| if status.is_a?(Twitter::Tweet) if status.text.match("@got_up_bot last_post") user = status.text.gsub(/(@got_up_bot|last_post|\s|\.)/, "") time = Time.now puts "(@#{status.user.screen_name}) take #{user}'s Post." rest_client.user_timeline(user, { count: 1 } ).each do |timeline| tweet = rest_client.status(timeline.id) #if user.protected != true { ... } # rest_client.update("@#{status.user.screen_name} IDが存在しないか鍵垢のユーザーです。鍵垢はプライバシー保護のためPostを取得しません。 #{time}") #else #post_time = tweet.created_at post = tweet.text rest_client.update("@#{status.user.screen_name} #{user}'s last post is 「#{post}」 #{time}") #end end end end end
さて、起動したまま寝るけど起きた時まで動いてるか。多分ハゲが見つけておもちゃにして速攻落とされる。