Я сделялъ

Я сделялъ

Предисловие

Новый пост от этого шитпостера. Зачем? Почему? Я не знаю. А кто знает?

Послепредисловие

Надо лить воду. Поговорить, например, о змеях. Лично я не люблю змей.

Я сделялъ

Что еще можно сказать? Как-то опять же... не знаю? Слишком тупой. Слова в предложения формируются довольно-таки сложно.

Почтипослесловие

Если кто-то дочитал до сюда -- мне вас жаль. Здесь было еще два абзаца нытья, но... ну его нахуй.

Короче, как и сказано в заголовке поста: я сделялъ:

Да, это библиотека для работы с API основы через dotnet (5.0+). Кроссплатформенность, десериализация всех (почти) JSON на объекты, хуё-моё, всякое такое. Билды доступны на NuGet. Подробнее в README по ссылке выше написано.

Как небольшой примерчик работы с API в репе находится прога OsnovaImageDownloader -- скачивает все изображения в посте (готовые билды выбрасываются в релизы гитхаба через Appveyor CD). Пользоваться так: `./OsnovaImageDownloader -e entryId -o "outPath" -w dtf`, где:

  • -e/--entry-id -- номер поста для загрузки;
  • -o/--output -- полный путь к директории для загрузки пикч;
  • -w/--website-kind -- дополнительный параметр, тип сайта для скачивания постов, dtf по умолчанию, а так доступны еще tjournal и vc.

Теоретически с помощью библиотеки можно ебануть консольный клиент для очобы, но я с этим запариваться не хочу (по крайней мере в обозримом будущем).

Роадмапа и проблемы на данный момент aka Чего ждать?/Чем я могу помочь?

Щепотка говнокода, ложка опечаток и плохих тестов...
Щепотка говнокода, ложка опечаток и плохих тестов...

Чего в библиотеке пока нет? Вообще, все про фичи будет в issues и milestones проекта (если у вас какие-то предложения - милости прошу или сюда в комменты, или опять же на GitHub; лучше туда).

Ближайший релиз -- 1.0.0-rc.1. Главные задачи к этому релизу:

  • Дописать все POST-методы (сейчас реализованы все GET-методы, указанные в официальной документации, кроме getPaymentsCheck, getSubsiteSubscribe и getSubsiteUnsubscribe -- оно уже не работает? POST-методов пока маловато);
  • Протестить и допилить кастомные JsonConverter'ы (в частности Write'еры, с десериализацией все более-менее в порядке);
  • Поменять названия методов/классов, переместить что-то туда, где ему место, архитектуру пофиксить короче. Пока все делаю 1 в 1 со спецификацией API, но она дерьмо ебаное (как и само апи, но щито поделать. Незначительные коррективы я вносил, вроде переименования getEntryCommentsLevelsGet в GetEntryCommentsLevels, но их мало и не все в окончательном виде);

К полноценному релизу версии 1.0.0 планируется:

  • Сделать некоторые "расширения" (Osnova.Net.Extensions? Или дополнить существующие классы? Еще не решил), недоступные через API (как редактор статей, например);
  • Дописать все xml-доки и красивенько все оформить на github pages через docfx (опыт есть, просто пока не приоритетно);
  • Дополнительные свистоперделки для README и организации репы в целом в виде всяких codecov-баджей, issue/pr-темплейтов и т.д;
  • Исправить все Warning'и от netanalyzer'ов (анализ после компиляции в командной строке/подсветка дрисни в Visual Studio);
  • Доделать дополнительные классы, вроде TelegramData, TwitterData (обсуждение: это нужно вообще, или стоит оставить object'ом? Если оно было десериализовано нормально, то и обратно в JSON ложится вполне себе хорошо);
  • Протестить аутентификацию через соцсети и QR-код. Простагма пытался мне помочь с получением кода, но я слишком тупой и не понял, так что с этими двумя пунктиками НУЖНА ПОМОЩЬ!;
  • ПОСТ ДОПОЛНЯЕТСЯ НЕ РЕДАКЦИЕЙ

К релизу 1.1.0 планируется:

  • Доделать работу с WebSocket (пока реализован только посредственный клиент, код которого на 90% спизжен со stackoverflow);
  • Сделать тесты с моками (сейчас они РЕАЛЬНО отправляют запросы к API. Я знаю. Я знаю...);

С чем нужна помощь? Помимо того, что указано выше - отзывы! Но в идеале pull request'ы с реализованными фичами, хе-хе. Я как-нибудь напишу CONTRIBUTING, чтобы было понятно, как дополнять библиотеку, там все очень просто.

Но если кто-то что-то будет делать, гонять данные и тому подобное и будут возникать проблемы или охуительные идеи -- пишите в issues. Плюс, я не уверен, что нашел ВСЕ виды блоков, да и доступа к редакторским у меня нет. Какие-то отыскал, но наверняка не все. А документация нихера не помогает (пост НЕНАВИСТИ будет... когда-нибудь).

Да и не со всеми моментами я смог полностью разобраться.

Убью нахуй!!11 Когда оно не пустое - это совсем не массив!<br />
Убью нахуй!!11 Когда оно не пустое - это совсем не массив!
Иногда приходилось методом тыка вдуплять, почему же не работает запрос. А ПОТОМУ, БЛЯДЬ, ЧТО last_id НА САМОМ ДЕЛЕ QUERY PARAMETER, А НЕ PATH! И подобной ху-е-ты в документации много, ох много...
Иногда приходилось методом тыка вдуплять, почему же не работает запрос. А ПОТОМУ, БЛЯДЬ, ЧТО last_id НА САМОМ ДЕЛЕ QUERY PARAMETER, А НЕ PATH! И подобной ху-е-ты в документации много, ох много...

И все же послесловие

Нет тебе прощения<br />
Нет тебе прощения

Мне стыдно за мой говнокод, чего скрывать. Но все равно захотелось поделиться - мало ли кому пригодится. Пусть и говнокод...

Сам я хотел сделать только загрузчик картинок под свои нужды, потом мне захотелось написать свою реализацию постилки сейбы (just for fun), но без внешних зависимостей и по возможности через API, ну а затем уже родилась и идея библиотеки. Сегодня последний день моего двухнедельного отпуска, за время которого я и наебенил этого кода, поэтому я старался как можно быстрее сделать хотя бы все GET-методы. Возможно дальше разработка пойдет немного медленнее...

Ну и в конце-концов -- это мое GNUсное дело.

Отдельное спасибо

  • Prostagma? за помощь с QR, небольшую консультацию по WebSocket'ам и загрузке файлов через API;
  • Farid за тестирование некоторых методов этого адского API и предоставление мне JSON'ов для экономии времени;
  • Saber-nyan за вдохновение -- если бы не его постилка, я бы не решился!
1919
16 комментариев

Кривой (пока что), но рабочий код загрузки постов через апи и библиотеку:

// Загружаем картинки на очобу, получаем рабочие блоки image в ответе
var imageBlocks = await Upload.PostUploaderUploadAsync(httpClient, websiteKind, filesBytes).ConfigureAwait(false);

// Делаем список блоков для entry:
var entryBlocks = new List<Block>();

// Картинки в очобу грузить можно только в media-блоки, так что создаем новый:
var mediaBlock = new Block
{
Type = "media",

// Добавляем в данные медиа-блока список наших готовых блоков:
Data = new MediaBlockData
{
Items = imageBlocks.Select(block => new MediaItemBlock { Image = block })
}
};


// Добавляем готовый медиа-блок к списку блоков поста:
entryBlocks.Add(mediaBlock);

// Делаем пост и добавляем ему блоки:
Entry entry = new Entry
{
Title = "Охуительный пост!",
Blocks = entryBlocks
};


// Можем постить!
var response = await Entry.PostEntryCreateResponseAsync(httpClient, websiteKind, subsiteId, entry);

1

Колбаска вкусная

4

Колбаса с клубничным вареньем

3

не верьте ему, он даже мой ник неправильно написал

3

Ты кто

4

Верьте ему, Фарид всегда прав. 

3