90
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

クソアプリAdvent Calendar 2019

Day 1

クソアプリを作った件

Last updated at Posted at 2019-11-30

クソアプリ Advent Calendar 2019 に参加したので

ウンコさんのデスクトップアクセサリを作りました!

Windows 10
image.png

macOS Catalina
スクリーンショット 2019-11-27 2.24.59.png

機能

このデスクトップアクセサリでは以下の機能があります。
特に、ダブルクリックでアンサイクロペディアの記事をランダムで見れるのって超便利だよね~!

  • Windows / macOS に対応
  • ダブルクリックでアンサイクロペディアをブラウザに表示
  • ウンコさんに7色の後光
  • アバウト画面ではリップルエフェクト
  • ちゃんと前回の起動位置を覚えて次に起動するときはそこで起動
  • タスクトレイ/ステータスバーに常駐
  • 終了時、水洗で流される!

実行時の動画

Qiita にアップできるように色数を相当落としたので大分汚いですが…

unko.gif

ソース

リポジトリ
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 が返ってきます。

image.png

その構造をクラスに落とし込みます。

// 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;

上記のように簡単にアクセスできます。

まとめ

クソアプリ作るのが一番楽しい!!

90
33
2

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
90
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?