それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Evernote を自動化する 1 - アカウント

EvernoteJavaScript から使って自動化します。

#!/usr/bin/env osjscript
app = Application("Evernote")

Evernote も通常通り Application でオブジェクトをブリッジします。

アカウントデータにアクセスする

ただ、いつの通りJSで書いててもあきるので、先に同等のAppleScriptを掲載しておきます。

tell application "Evernote"
    set a to name of account info 1
    set c to upload used of account info 1
    set d to c / 1024 / 1024
    set e to round d rounding to nearest
    set f to e as string
    set g to "今月は" & e & "% 使用
    "
    set j to upload reset date of account info 1 as string
    set g to g & "次回リセット:" & j
    display dialog g
end tell

これとほぼ同じことをするJavaScriptが以下のとおりになります。

JavaScript でアカウント情報にアクセスします。

app = Application("Evernote")
account = app.accounts["takuya_XXXXt"]


//account.accountType()
//account.name()
//account.uploadLimit()
account.uploadUsed()

//以下略

ただ、せっかくJavaScript なのでDateオブジェクトにこだわってみたり

app = Application("Evernote")
account = app.accounts["takuya_XXXXt"]


Date.prototype.format = function(){
    var a = this
    date  = a.getFullYear()
    date += "/" 
    date += ("00"+ (a.getMonth()+1)).substr(-2)
    date += "/"  
    date += ("00"+a.getDate()).substr(-2)
    date += " "
    date += ("00"+a.getHours()).substr(-2)
    date += ":"
    date += ("00"+a.getMinutes()).substr(-2)
    date += ":"
    date += ("00"+a.getSeconds()).substr(-2)
    date += " "
    date += a.toString().match( /\((.+)\)/)[1]
    return date
}


a = Date.parse(str)
a = new Date(a)


console.log( "ユーザーID   : "   + account.name() )
console.log( "当月通信量   : "   + (Math.round( (account.uploadUsed()/1024/1024)*100 )/100 )  + "MB"      ) 
console.log( "次回リセット : "   + a .format() )

後はコレを実行します。

osascript -l JavaScript evernote_account.js

実行結果

takuya@rena:~/Desktop$ ./evernote_account.js

ユーザーID   : takuya_XXX
当月通信量   : 81.96MB
次回リセット : 2015/01/02 17:00:00 JST

Evernote の自動化スクリプトを作るときのコツ

EvernoteをScript Editor で扱うと、応答待ちにフリーズすることが多い。

Evernote が未知のオブジェク呼び出しでエラーを返さずに、ダンマリするからみたい。

そのために、いつでもすぐ、中止できるようScript Editorではなく、ターミナルから、osascript経由で実行する。

Script Editorで作ってフリーズすると、終了が非常に面倒なのでした。

スクリプト・エディタ強制終了⇛Evernote強制終了⇛アクティビティモニタ⇛jlx を強制終了

なので、osascript からトライ・アンド・エラーするほうが効率的でした。

JavaScript Automation for OSX の記事まとめはこちら

Javascrript for OSX Automation アドベントカレンダー - それマグで!