クソアプリ Advent Calendar 2019 に参加したので
ウンコさんのデスクトップアクセサリを作りました!
機能
このデスクトップアクセサリでは以下の機能があります。
特に、ダブルクリックでアンサイクロペディアの記事をランダムで見れるのって超便利だよね~!
- Windows / macOS に対応
- ダブルクリックでアンサイクロペディアをブラウザに表示
- ウンコさんに7色の後光
- アバウト画面ではリップルエフェクト
- ちゃんと前回の起動位置を覚えて次に起動するときはそこで起動
- タスクトレイ/ステータスバーに常駐
- 終了時、水洗で流される!
実行時の動画
Qiita にアップできるように色数を相当落としたので大分汚いですが…
ソース
リポジトリ
https://bitbucket.org/freeonterminate/kusoapp/src/master/
実行ファイル
https://bitbucket.org/freeonterminate/kusoapp/downloads/
このアプリは Delphi で作成しました!
ビルドする場合は Delphi 10.3 Rio Release 3 Community Edition (無料版)でどうぞ!
解説
ほとんど解説するようなことも無く今までの総集編です。
ウンコ大回転
https://qiita.com/pik/items/a0dc426b2089dbce8bc3
FireMonkey で Window Drag
https://qiita.com/pik/items/907641319e4de4d74805
タスクトレイ常駐コンポーネント
https://qiita.com/pik/items/bd3448e2cf0c4c528027
アンサイクロペディア API
アンサイクロペディアも Wikipedia と同じで MediaWiki で作成されているため MediaWiki API を使って情報を取得できます。
MediaWiki API
https://www.mediawiki.org/wiki/API:Main_page/ja
MeidaWiki API については解説記事が多くあるのでここでは詳しくは書きません。
今回は以下のように記事をランダムで取得しています。
Json Serializer
MediaWiki API は Json と XML で値を返せるのですが今回は Json を採用しました。
何故かというと、Delphi にも Json Serializer があり、これを使うと定型の JSON を非常に簡単に扱えるからです。
例えば上記のアンサイクロペディアの API を叩くと下記の様な JSON が返ってきます。
その構造をクラスに落とし込みます。
// Json の continue を定義したクラス
TContinue = class
private var
RnContinue: String;
Continue: String;
end;
// Json の random 内の要素を定義したクラス
TPage = class
private var
Id: UInt64;
NS: UInt64;
Title: String;
end;
// Json の query を定義したクラス
TQuery = class
private var
Random: TArray<TPage>;
end;
// 全体を表すクラス
TRandomResult = class
private var
BatchComplete: String;
Continue: TContinue;
Query: TQuery;
end;
ここで取得した Json を TJsonSerializer.Deserialize メソッドに渡すと、クラスが生成され Json の値がセットされます。
var S := TJsonSerializer.Create;
try
var R := S.Deserialize<TRandomResult>(JSON);
Writeln(R.Query.Random[0].Title); // 値の取得
finally
S.DisposeOf;
end;
上記のように簡単にアクセスできます。
まとめ
クソアプリ作るのが一番楽しい!!