Trelloのとあるリストに入ったもののラベルの色を特定の色にするバッチプログラムをAzure Functionで(しかもC#で)書こうとしたのですが、ライブラリが古くて結構つらかったので書きます。
Trelloのラベルの色を変えるFunctionはgithubに公開しています。
結論をいうと
以下のようにproject.jsonに"MyTrelloNet": "1.0.8"と書くことで解決させました。
{
"frameworks": {
"net46":{
"dependencies": {
"MyTrelloNet": "1.0.8"
}
}
}
}
もしかしたら、Azure Functionにpublishした後に、手動でnuget restoreしないといけないかもしれません。
Trello.NET
TrelloのクライアントとしてTrello.NETというものがあります。
これがだいぶメンテされていなくて、結構エラーが出ていたのが今回の話です。
すぐ使いたかったしプルリクはテストに失敗するみたいなので修正して自分が使う用にMyTrelloNetとしてnugetにあげました。MyTrelloNetという名前で使えます。namespaceはTrelloNetのままです。
以下修正したところの紹介です。
ターゲットフレームワークを変えた
Azure Functionが.net46なので合わせて.net46でビルドしました。
RestSharpのrestclientのAuthenticatorが下のようになっていて後方互換性がなかったので再ビルドも必要でした。
public IAuthenticator Authenticator { get; set; }
合わせてNewtonsoft.Jsonを10.0.1、RestSharpを105.2.3を使うようにしました。
参照エラー
using RestSharp.Authenticators;
をMemberTokenAuthenticator.csに追記
using RestSharp;
using RestSharp.Authenticators;
色追加
これはプルリクにもあるやつをコピペ
namespace TrelloNet
{
public enum Color
{
Green,
Yellow,
Orange,
Red,
Purple,
Blue,
Sky,
Lime,
Pink,
Black
}
}
エスケープ処理追加
私はEleganttというガントチャートツールを使っているのですが、どうもこれがあるとカードのdescに変な値が入るみたいでJsonパースエラーが起きていました。
RestShartにExecute<T>(request)みたいなリクエストしてレスポンスをデシリアライズしてくれるメソッドがあるのですが、この中にエスケープ処理が入っていないので普通のExecuteでJson取得して、手動でデシリアライズします。
その時にJsonをエスケープのためにリテラル文字列に変えます。
public T Request<T>(IRestRequest request) where T : class, new()
{
var response = Execute(request);
ThrowIfRequestWasUnsuccessful(request, response);
return response.StatusCode == HttpStatusCode.NotFound ? null : JsonConvert.DeserializeObject<T>(@response.Content);
}