- 他ブログからの移行、昔の記事です。
- 今はなきpebble watchというスマートウォッチが好きでした。
- 誰でもアプリを自作できる環境があったため、一部のユーザに熱く愛されていましたが2017年にFitbitに買収され消滅。
- だがしかし!有志の皆様がRebbleという形でOS開発を継続していて、一応まだ使えます(自分はもう使ってないですが...)
どうも、しゅーいっちです。
はっきり言って自分の環境でしか使えないやり方なんですが、うまく動いて嬉しかったのでその方法です。
##状況
- 勤怠管理のサイトを開くのに2分位かかる
- 自分は常にギリギリに来るやつ
- 社外ネットワークからクリックするとわかるようになっている
- リモートデスクトップは繋がらないようになっている
##mechanizeでタイムカードをクリックする
まずはクリックする部分です。社外ネットワークだとバレるので、職場の自分の端末にクリックするスクリプトを入れておきます。
ブラウザの挙動を自動化するmechanizeというgemを使いました。
mechanize
所定のURLにアクセスして所定のフォームを選んだりパスワードを入力したりしてクリック、さらに移動して所定のボタンをクリック、のように連続して記述していきます。
退勤時にも使っているので出勤と退勤の切り分けしてますが、そこは今回の話とは直接関係ないです。でも消すのが面倒だったのでそのまま残してます。
サイトが遅いので、出勤してこれを走らせるだけでもかなり時間の節約なります。2分が8秒くらいになります。
require "mechanize"
def stamp_time_card(mode="s_go")
agent = Mechanize.new
agent.user_agent_alias = 'Mac FireFox'
# select your section
page = agent.get("ログインURL")
form = page.form("form2")
form.field_with(:name => "lgid").option_with(:value => "XX").click
# load uid options and submit
uid_page = form.submit( form.button_with(:name => "s_change") )
uid_form = uid_page.form("form2")
uid_form.field_with(:name => "uid").option_with(:value => "XX").click
uid_form.field_with(:name => "_word").value = "XXXXXXXXXX"
agent.submit(uid_form)
# move to timecard url and click btn
time_card_page = agent.get("つぎのページのURL")
time_card_form = time_card_page.form("_form")
# taikin or shukkin
if mode == "s_leave"
puts "Are you sure you taikin?"
puts "[Y/n]"
if gets.chomp == "Y"
time_card_form.submit( time_card_form.button_with(:name => mode) )
else
puts "so bad... keep working!"
end
else
time_card_form.submit( time_card_form.button_with(:name => mode) )
end
end
##メールをトリガーにする
するというか、しました。新しくgmailアカウントを作って、そこに特定の件名のメールが特定の時間内に来ていたら上のスクリプトが実行されるようにすることにしました。
gmailをチェックしてくれるgmailというgemと、chatworkに投稿してくれるchatworkというgemを使いました。chatworkのAPIは、成功した時にマイチャットにお花を投稿してくれる部分にしか使ってないです。
午前9時から9時31分までの31分の間、20秒毎にメールチェックします。ほんとは5秒くらいでやっときたいのですが、小心者なのでなんとなく20秒にしています。
require 'gmail'
require 'chatwork'
require './click_timecard.rb'
ChatWork.api_key = "CHATWORKのAPIキー"
def chat(text)
ChatWork::Message.create( room_id: "xxxxxxx", body: text )
end
begin
gmail = Gmail.connect("メアド@gmail.com", "パスワード")
puts "login OK." if gmail.logged_in?
t = Time.now
nine = Time.new(t.year, t.month, t.day, "+9")
nine_thirtyone = nine + 1900
100.times do
if Time.now.between?(nine, nine_thirtyone)
if gmail.inbox.count(:on => Date.today, :subject => "出勤したよing!!!") > 0
shukkin = true
stamp_time_card
chat("(F)")
else
puts Time.now
end
end
break if shukkin
sleep 20
end
rescue => e
puts(e)
ensure
gmail.logout
end
##Automatorでスクリプトを実行するアプリ作成
職場で使っているのがOSXのSnow leopardです。そいつのAutomatorにApplescriptでスクリプトを起動するだけのアプリを作って保存します。
on run {input, parameters}
tell application "Terminal"
activate
do script "cd /Users/rubyスクリプトまでのパス/time_card && ruby check_the_shukkin_mail.rb && exit"
end tell
return input
end run
##毎朝定時に自動起動させる
で、そのアプリを平日の午前9時になったら毎朝起動するように設定します。自分が使っているのはcronnixというGUIのアプリです。
cronnix
##メールを送るだけのウェブアプリを作る
アプリと言っていいのかわかりませんが、URLにアクセスがあるとメールが送られるだけです。
さくらのVPSにdokku-altを入れてsinatraでやりました。
さくらのナレッジ:Dockerを使ったミニPaaSのdokkuをパワーアップさせた「Dokku Alternative」を試す
require 'sinatra'
require 'mandrill'
def send_mail
m = Mandrill::API.new 'APIキー'
message = {
:subject=> "出勤したよing!!!",
:from_name=> "shukkinApp",
:text=>"出勤したよing!!!",
:to=>[
{
:email=> "メアド@gmail.com",
:name=> "おれおれ"
}
],
:from_email=>"送信元メアド@gmail.com"
}
sending = m.messages.send message
puts sending
end
get "/長いURLパス" do
send_mail
"yay!"
end
普通にメールを送ろうとしたらタイムアウトするので(もう詳細覚えてない)、MandrillのAPIを使うgemを使いました。1日1万2千通まで無料で遅れますが、1日1通、週5,6通しか送信していません。
#pebble app作成
一番簡単そうなsimplyjsのチュートリアルアプリをcloudpebble上で編集する方法でやりました。
http://simplyjs.io/
https://cloudpebble.net/
SELECTボタン(真中のボタン)を押すとさくらVPSのURLにアクセスするだけです。
# https://cloudpebble.net/
simply.on('singleClick', function(e) {
// console.log(util2.format('single clicked $button!', e));
if (e.button == "select"){
ajax({ url: 'アクセスするとメールが送られるappのURL' }, function(){
simply.text({ body: 'Mail sent!' });
});
}
});
simply.setText({
title: 'My SHUKKIN App',
body: 'PRESS SELECT for Shukkin',
}, true);
###結果
動きました。かなり快適です。エレベータの中で焦っている同僚を尻目にカチリとボタンを押す快感、相当やばいです。
###問題点
- oh my zshのアップデートでたまに止まっている(ギリギリで画面見てめっちゃ焦る)
- pebbleが壊れた(液晶が映らなくなった。交換品がそろそろ届く)
- カードキーが導入されることになった(どうやら自分がその担当らしい)
というかPebbleなしでもできます。
が、あると嬉しいです。