まだTwitterのBotをいじってます。

Chocolate Sweeperのパズルを毎日TweetするBotなのだけど、似たような問題を続けて出さないようにするなどの改良を加えていくうちに、Tweetに失敗するようになってしまいました。Twitter APIが返してくるステータスコードは400なんだけどメッセージがないので何が原因なのかさっぱり。ローカルでデバッグしても普通にTweetできちゃうし。

でも、サーバーはAzureを使ってるんだけどさすがMicrosoft製だけあってVisual Studioで簡単にリモートデバッグできました。それで調べたところ、せっかく前回の記事のようにエンコードしたURLの一部がデコードされてて、不正なURLということで400が返ってきたみたい。

調べたところ、どうも.NETのSystem.Uriはコンストラクタに渡した文字列を勝手に変換してしまうみたいだ(このドキュメントのRemarks参照)。

なぜ突然この問題が起こるようになったのか、そしてどうしたら直接Uriに文字列を指定できるのか、いろいろ試してみてもさっぱりわからなかったんだけど、さすがStack Overflow、解決方法がのってました(リンク)。

うまくいったのは、いったん変なschemaを使っておいて、後からhttpsに変更するという方法(緑のチェックがついている回答)。Pencho Ilchevさんのconfigを追加するという回答も、サーバーでだけこの問題が起こることを考えると納得なんだけど、設定の仕方を間違えたのかうまくいきませんでした。

というわけで、Botが絶賛Tweet中ですのでよろしかったら@choco_sweeperをフォローお願いします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Anti Spam Code *