redmanmale

if-goto

Pleer.Net

[ csharp | wrapper | api ]

Abstract

Pleer.Net это C# обёртка для API сервиса Pleer.net (ProstoPleer) - одного из лучших, на мой взгляд, бесплатных онлайн плееров.

Introduction

Довольно давно пользуюсь этим сервисом и подумал, что было бы неплохо заиметь себе оффлайн копию любимых песен. И раз контактик ссучился, Pleer.Net является отличным источником данных.

Methods

Сперва подумал, что придётся плодить очередную поделку, но нашёл API. Поискав обёртки на гитхабе, нашёл несколько, но все они были далеко не первой свежести, так что решил написать свой костыль проект.

Взяв за основу наиболее подходящего донора, немного поправил модель, дописал недостающие методы, добавил асинхронности, тесты и красивое название.

К сожалению, тесты написаны не совсем корректно; сейчас в них используется тестовый аккаунт и реальные запросы к сервису. По канонам надо делать какой-нибудь IClient, и в тестах инжектить мок с правильными ответами, но меня как-то заломало. Так что тесты локально не работают. Возможно, потом доделаю.

Дальше по плану CI и CD. Уже был небольшой позитивный опыт с AppVeyor, решил его дальше использовать. В целом дока у него хорошая, с примерами, но была и пара непоняток.

  • Артефакты. Обычно нужно указать список файлов, которые будут являться артефактом. Если же на выходе nuget пакет, это не так. В этом случае следует прописать в блоке билда publish_nuget: true, а блок артефакта вообще убрать.

  • Автотесты. Неочевидно, как указывать сборку с тестами – сперва прописывал путь относительно корня проекта – не работает.

      test:
          assemblies:
              - Pleer.Net.Tests.dll
    
  • Автодеплой в GitHub-релизы и на Nuget.org. Название артефакта (nuget-пакет) непостоянно, а меняется при каждом билде, посему использовать просто имя файла для деплоя не выйдет. Можно использовать регулярку, как я и сделал, но она немного нелогичная – точки внутри имени не надо экранировать, а перед расширением надо.

      artifact: /^Pleer.Net.*\.nupkg$/
    

Не совсем правильно, что версия релиза берётся как {version-from-config}+{build-version}, в результате первый релиз имеет версию 0.1.5 (потому что пятый билд). Скорее всего, надо будет переделать, чтобы бралась строго версия из конфига, и инкрементить перед каждым релизом.

Results

Этот проект будет основой для собственно качалки песен, и я планирую поддерживать его в случае изменения API (что маловероятно, но всё же).

Чуть получше разобрался с AppVeyor’ом, лишним не будет.

Первый релиз на Nuget.org.

Код на гитхабе.