google tasksからタスクリスト壁紙を作成する

#動機
予定表とかを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'`を追加します

```build.gradle
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を作成します．
今回は壁紙を変えたいため，以下のものになります．

```applescript

on run argv
    tell application "Finder" to set desktop picture to POSIX file (item 1 of argv)
end run
```


あとは`osascript <作成したapplescript> <画像ファイルのフルパス>`で壁紙が変更されます．

#問題
現在表示されている画像に変更を加えてapplescriptで更新しようとした場合，更新を検知してくれない．
一度壁紙を別のものに変えてから変更し直す必要があった．

#つまり
簡単に壁紙に情報を表示したかったがそんなに簡単ではなかった．