#動機
予定表とかをMacの壁紙に貼れたら便利なのではと思いました。
また、Macやらeclipseやらと初対面で和解する必要が有ったため、当たり前のこともそれなりに健忘録として書きます。
#概要
オンラインからタスクリストを取ってきてmarkdownにして
pandocでhtml化して
wkhtmltoimageで画像にして
AppleScriptで壁紙にする!!!!!
#環境
##PC
MacBook Pro(Retina, 13-inch)
OS X Yosemite 10.10.2
##開発
eclipse 4.4.2
Gradle 2.4
##依存
pandoc
wkhtmltoimage
#オンラインのタスクリストからデータを取得する
##Google Tasks API
日頃はDoit.im使ってるんですが、API使うのが楽そうだったのでGoogle Tasks APIを使用します。
###注意
これは2015-06-04現在の情報です。Google APIの変更にgoogle developersのサイトですら追いついていない場合が有りますので、下記のQuick Startが動かない場合は諦めて日を改めるなどしましょう(実際しました)。
###Quick Start
https://developers.google.com/google-apps/tasks/quickstart/javaにアクセスし、言ってる通りにします。
端的に言うと
Step1はgoogle側でプロジェクト作成して、クライアントIDなるものを作成し、必要になるデータをダウンロードします。
Step2はGradleプロジェクトを作成して、Step1のデータを取り込みます。
Step3はGradleプロジェクトの設定です。
Step4はサンプルコードです。
Step5は実行方法と、初回起動時にはアカウント認証画面が表示される旨が書かれています。
実際に実行すると、自分のgoogle taskのタスクリストとタスクが表示されます。
うれしいですね。
###Gradle
さらっとGradleというのが出てきましたが、brew install gradle
でサクっと入ります。homebrewを入れてない人はhttp://brew.sh/index_ja.html から入れましょう。
##Eclipseへの取り込み
emacsとかでjava書きたくはない(個人の意見です)ので、eclipseに取り込みます。
まず、build.gradleにapply plugin: 'eclipse'
を追加します
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'eclipse'
mainClassName = 'TasksQuickstart'
sourceCompatibility = 1.7
・・・
その後gradle eclipse
を実行すると色々と生成されてimport可能になります。
eclipseを起動し、File→importからGeneral→Existing Projects into Workspaceでeclipseに取り込みましょう。
Runしてみると、自分のgoogle taskのタスクリストとタスクが表示されます。
うれしいですね。
##マークダウンで保存
QuickStartの時点でタスクリストとタスクが表示されるので、それをファイルに書き出してやるだけです。
タスクリスト名の先頭には#
を、タスク名の先頭には##
を付け足してやります。
また、終わっているが削除されていないタスクは取り消し線で表現するため、~~
で囲みます。
//print the first 10 task lists
以下をこんな感じに書き換えました。
// Print the first 10 task lists.
TaskLists result = service.tasklists().list()
.setMaxResults(new Long(10))
.execute();
List<TaskList> tasklists = result.getItems();
if (tasklists == null || tasklists.size() == 0) {
System.out.println("No task lists found.");
} else {
try{
File file = new File("./task.md");
FileWriter filewriter = new FileWriter(file);
for (TaskList tasklist : tasklists) {
filewriter.write("#"+tasklist.getTitle()+"\n");
com.google.api.services.tasks.model.Tasks tasks = service.tasks().list(tasklist.getId()).execute();
for(com.google.api.services.tasks.model.Task task : tasks.getItems()) {
String dat = "";
if(task.getCompleted() == null){
dat = "##" + task.getTitle() + "\n";
}else{
dat = "##~~" + task.getTitle() + "~~\n";
}
filewriter.write(dat);
}
}
filewriter.close();
}catch(IOException e){
System.out.println(e);
}
}
}
}
#Pandocによるhtml変換
1.pandocをbrew install pandoc
でインストールします.
2.お好みのCSSを用意します.githubのマークダウンならgit clone https://gist.github.com/2554919.git
3.pandoc -s <作成したマークダウン> -c <お好みのCSS> -o <出力先(html)>
以上でMarkdownがhtmlになります.
見た目についてはCSSをうまいことすれば背景をつけたり装飾したりと_思うがままです_.
#wkhtmltoimageによる画像生成
1.brew install wkhtmltoimage
します
2.wkhtmltoimage --width <画面横解像度> --height <画面縦解像度> <画像化するhtml> <出力画像名(jpg)>
#AppleScriptによる壁紙配置
Ctrl+Space→script editor.appでスクリプトエディタを起動し,AppleScriptを作成します.
今回は壁紙を変えたいため,以下のものになります.
on run argv
tell application "Finder" to set desktop picture to POSIX file (item 1 of argv)
end run
あとはosascript <作成したapplescript> <画像ファイルのフルパス>
で壁紙が変更されます.
#問題
現在表示されている画像に変更を加えてapplescriptで更新しようとした場合,更新を検知してくれない.
一度壁紙を別のものに変えてから変更し直す必要があった.
#つまり
簡単に壁紙に情報を表示したかったがそんなに簡単ではなかった.