LoginSignup
5
7

More than 5 years have passed since last update.

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

Posted at

動機

予定表とかを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を作成します.
今回は壁紙を変えたいため,以下のものになります.


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

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

問題

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

つまり

簡単に壁紙に情報を表示したかったがそんなに簡単ではなかった.

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7