デスクトップ常駐型アプリケーションを作りました.
Github
使い方
ライフログを取るのにハマっていて,GPS とかの記録を取ったりしているのですが,ふと音楽のログも取りたいと思いました.
そのようなサービスがないか調べたところ,Last.fm というものがありました. Spotify などと連携して聞いた音楽のログを取り,似た傾向のおすすめの曲を紹介してくれるそうです. 気に入ったのが,ログを取るための API が用意してあり,PC,スマートフォンのあらゆるプレイヤーで記録できるところで,もし対応していなければ開発すればいいのです.
Last.fm の API リファレンスを見ていたところ今聞いている曲を取得できるのを見つけたので,これで discord の「プレイ中」欄に表示しようと考えたのでした.さりげなさがいい感じなので.
あんまり書く機会がなくて,いつも忘れるので.
Form クラスを継承したクラスのインスタンスに初期化処理を書けば動く.
定期実行は Timer クラスがあるので,以下で FunctionName に定期実行したい処理を書けばよい.
var timer = new Timer();
timer.Interval = 5000; //5s
timer.Elapsed += FunctionName;
timer.Enable = true //動き出す
参考にしました. http://pineplanter.moo.jp/non-it-salaryman/2017/06/01/c-sharp-tasktray/
全部ここに書いてるのですが,やることは
です.
ドキュメントが充実しているので特に書くこともないです. https://github.com/Lachee/discord-rpc-csharp
nuget で導入して README のチュートリアル通りに書けばいいです.
ただ最初は Discord Game SDK でやろうとしていて,文字化け問題に直面したのでかなり苦労しました.Issue→https://github.com/discord/discord-rpc/issues/119
ちなみに,昔は GameSDK でなくても RichPeresence を弄れたのですが API が廃止されたので面倒になりました. 昔は同じことをする js 製ツールがあったっぽいのですが,API 廃止で使えなくなっちゃったみたいです.
HttpClient を使います.クエリパラメタも URL エンコードできます. その他まとめ →C# 今更ですが、HttpClient を使う - Qiita
動的な,というのは,Last.fm の API を JSON で受け取ると,Nowplaying かどうかで微妙に形が変わるため構造体を作ってそこにぶち込む,という手法が使えない,ということです.
Json.NET では動的にメンバが生成される Json オブジェクトが扱えるので,Json.NET を nuget で導入します.
面白かったのが,C#には dynamic 型という,Python や JS のように実行時に型が決まる静的な型(型自体は静的,ややこしい)が存在することです.ゆるゆるなので当然実行時エラーガンガンなんですけどね.
dynamic jsonResponse = JsonConvert.Deserialize(jsonString);
var m = jsonResponse.member;//
json で要素が存在するかは,メンバが存在するかなので,以下で判断できます.
jsonResponse.GetType().GetProperty("member") != null
Last.fm の API は制限もゆるく太っ腹なのでいろいろ遊べそうです. 楽曲情報も取得できるっぽいのでそれで何かします.