pebbleを使ってエレベータからタイムカードを押すシステム
pebbleを使ってエレベータからタイムカードを押すシステム:
どうも、しゅーいっちです。
はっきり言って自分の環境でしか使えないやり方なんですが、うまく動いて嬉しかったのでその方法です。
まずはクリックする部分です。社外ネットワークだとバレるので、職場の自分の端末にクリックするスクリプトを入れておきます。
ブラウザの挙動を自動化するmechanizeというgemを使いました。
mechanize
所定のURLにアクセスして所定のフォームを選んだりパスワードを入力したりしてクリック、さらに移動して所定のボタンをクリック、のように連続して記述していきます。
退勤時にも使っているので出勤と退勤の切り分けしてますが、そこは今回の話とは直接関係ないです。でも消すのが面倒だったのでそのまま残してます。
サイトが遅いので、出勤してこれを走らせるだけでもかなり時間の節約なります。2分が8秒くらいになります。
するというか、しました。新しくgmailアカウントを作って、そこに特定の件名のメールが特定の時間内に来ていたら上のスクリプトが実行されるようにすることにしました。
gmailをチェックしてくれるgmailというgemと、chatworkに投稿してくれるchatworkというgemを使いました。chatworkのAPIは、成功した時にマイチャットにお花を投稿してくれる部分にしか使ってないです。
午前9時から9時31分までの31分の間、20秒毎にメールチェックします。ほんとは5秒くらいでやっときたいのですが、小心者なのでなんとなく20秒にしています。
職場で使っているのがOSXのSnow leopardです。そいつのAutomatorにApplescriptでスクリプトを起動するだけのアプリを作って保存します。
で、そのアプリを平日の午前9時になったら毎朝起動するように設定します。自分が使っているのはcronnixというGUIのアプリです。
cronnix
アプリと言っていいのかわかりませんが、URLにアクセスがあるとメールが送られるだけです。
さくらのVPSにdokku-altを入れてsinatraでやりました。
さくらのナレッジ:Dockerを使ったミニPaaSのdokkuをパワーアップさせた「Dokku Alternative」を試す
普通にメールを送ろうとしたらタイムアウトするので(もう詳細覚えてない)、MandrillのAPIを使うgemを使いました。1日1万2千通まで無料で遅れますが、1日1通、週5,6通しか送信していません。
mandrill
一番簡単そうなsimplyjsのチュートリアルアプリをcloudpebble上で編集する方法でやりました。
http://simplyjs.io/
https://cloudpebble.net/
SELECTボタン(真中のボタン)を押すとさくらVPSのURLにアクセスするだけです。
動きました。かなり快適です。エレベータの中で焦っている同僚を尻目にカチリとボタンを押す快感、相当やばいです。
が、あると嬉しいです。
- 他ブログからの移行、昔の記事です。
- 今はなきpebble watchというスマートウォッチが好きでした。
- 誰でもアプリを自作できる環境があったため、一部のユーザに熱く愛されていましたが2017年にFitbitに買収され消滅。
- だがしかし!有志の皆様がRebbleという形でOS開発を継続していて、一応まだ使えます(自分はもう使ってないですが...)
どうも、しゅーいっちです。
はっきり言って自分の環境でしか使えないやり方なんですが、うまく動いて嬉しかったのでその方法です。
状況
- 退勤管理のサイトを開くのに2分位かかる
- 自分は常にギリギリに来るやつ
- 社外ネットワークからクリックするとわかるようになっている
- リモートデスクトップは繋がらないようになっている
mechanizeでタイムカードをクリックする
まずはクリックする部分です。社外ネットワークだとバレるので、職場の自分の端末にクリックするスクリプトを入れておきます。ブラウザの挙動を自動化するmechanizeというgemを使いました。
mechanize
所定のURLにアクセスして所定のフォームを選んだりパスワードを入力したりしてクリック、さらに移動して所定のボタンをクリック、のように連続して記述していきます。
退勤時にも使っているので出勤と退勤の切り分けしてますが、そこは今回の話とは直接関係ないです。でも消すのが面倒だったのでそのまま残してます。
サイトが遅いので、出勤してこれを走らせるだけでもかなり時間の節約なります。2分が8秒くらいになります。
click.rb
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秒にしています。
check_mail.rb
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でスクリプトを起動するだけのアプリを作って保存します。launchClickApp.scpt
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」を試す
send_mail.rb
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
pebble app作成
一番簡単そうなsimplyjsのチュートリアルアプリをcloudpebble上で編集する方法でやりました。http://simplyjs.io/
https://cloudpebble.net/
SELECTボタン(真中のボタン)を押すとさくらVPSのURLにアクセスするだけです。
letMailSent.js
# 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が壊れた(液晶が映らなくなった。交換品がそろそろ届く)
- カードキーが導入されることになった(どうやら自分がその担当らしい)
が、あると嬉しいです。
コメント
コメントを投稿