Zer0must2b
Green Team
- 23.06.2019
- 306
- 141
Я наконец обернул (на данный момент) свой небольшой побочный проект, в обертку C # вокруг v2.0 Ghost RESTful API . Я называю это GhostSharp , и он доступен на NuGet . Проверьте исходный код или узнайте больше об API и связанных инструментах и библиотеках в документации Ghost .
Я начал писать его в начале прошлого года, когда вышел API v0.1, чтобы узнать больше об API и оттачивать свои навыки в C #, но это устарело в пользу (намного лучше) API v2.0. В начале этого года я отметил тег v0.1 и начал переписывать все для работы с 2.0 .
Использование
Ghost разделяет их API на две проблемные области, в зависимости от того, чего вы хотите достичь - Content API и Admin API . Первый касается доступа только для чтения, позволяющего потребителям отображать общедоступные данные, тогда как второй касается создания и управления (администрирования) этих же данных.
Чтобы начать использовать его, создайте новую интеграцию и зацепите сгенерированный ключ Content API и ключ API администратора. Будьте осторожны, с кем вы им делитесь, особенно с ключом API администратора ... при этом кто-то может изменить (или удалить) большую часть данных на вашем сайте!
Доступ к API контента
Чтобы получить доступ к API содержимого, возьмите URL-адрес API и ключ API содержимого на странице «Интеграции» . Получив эти фрагменты информации, вы можете получить доступ к любому «общедоступному» контенту, доступному только для чтения.
Вывод:
Welcome to Grant Winney: We learn by doing. We've all got something to contribute.
Navigation: Home, APIs, Lambda, Rasp PI, About Me, CV
Доступ к API администратора
Чтобы получить доступ к API администратора, получите URL-адрес API и ключ API администратора, также на странице «Интеграции» . Получив эти фрагменты информации, вы можете получить доступ к «частному» контенту, а также создавать, изменять или даже удалять много «открытого» контента.
Вывод:
Welcome to <a href='Grant Winney'>Grant Winney</a>
Running Ghost v2.23
Проблемы
Все прошло гладко, даже немного скучно и до тех пор, пока я не занялся последней стабильной конечной точкой API администратора - загрузкой изображений. Документы утверждают, что
Но когда я попытался отправить сообщение в конечную точку, используя RestSharp с добавленным заголовком, единственный ответ, который я смог получить, был что-то вроде «пожалуйста, выберите изображение». Я часами изучал, как загрузить файл изображения, и попробовал полдюжины разных способов.
Решение? Удалить заголовок.
Я понятия не имею, почему это было проблемой, и у меня мало желания копаться в кишках RestSharp, чтобы понять это. Каким-то образом этот заголовок испортил запрос, так что Ghost подумал, что изображение не загружается. Может я неправильно использовал шапку? Добавление файла некорректно для работы с этим заголовком? Может быть AddFile(), что-то скрывается за кулисами, что сделало все это очень-очень неправильным?
Ну что ж!
Чему я научился?
Грузы ...
JsonProperty
Если вам нужно получить / опубликовать поля с нижними или нижними подчеркиваниями в них, но вы хотите, чтобы все ваши классы были в паскале (или в другом формате), вам может понадобиться способ перевода между ними. JsonProperty на помощь. Он помогает RestSharp в переводе между именами свойств C # и именами полей JSON.
Трэвис CI
Потратьте несколько минут, чтобы импортировать в него свои проекты, особенно если у вас есть тесты. Тогда вы можете просто продолжать вносить изменения, весело и головокружительно не зная о последствиях, и у Трэвиса есть ваша спина. Или что-то вроде того.
CodeFactor
CodeFactor - еще один замечательный сервис. Он также следит за вашим репо, предлагая исправления кода. У меня было несколько десятков из того, что я бы назвал «косметическими» изменениями - несколько классов в одном файле, лишние пустые строки и т. Д. - но все же было приятно немного почистить вещи и увидеть эту большую зеленую полосу.
Команда Ghost очень отзывчива
Я задал довольно много вопросов на их форуме , и они были полезны ...
Я начал писать его в начале прошлого года, когда вышел API v0.1, чтобы узнать больше об API и оттачивать свои навыки в C #, но это устарело в пользу (намного лучше) API v2.0. В начале этого года я отметил тег v0.1 и начал переписывать все для работы с 2.0 .
Использование
Ghost разделяет их API на две проблемные области, в зависимости от того, чего вы хотите достичь - Content API и Admin API . Первый касается доступа только для чтения, позволяющего потребителям отображать общедоступные данные, тогда как второй касается создания и управления (администрирования) этих же данных.
Чтобы начать использовать его, создайте новую интеграцию и зацепите сгенерированный ключ Content API и ключ API администратора. Будьте осторожны, с кем вы им делитесь, особенно с ключом API администратора ... при этом кто-то может изменить (или удалить) большую часть данных на вашем сайте!
Доступ к API контента
Чтобы получить доступ к API содержимого, возьмите URL-адрес API и ключ API содержимого на странице «Интеграции» . Получив эти фрагменты информации, вы можете получить доступ к любому «общедоступному» контенту, доступному только для чтения.
Код:
var ghost = new GhostSharp.GhostContentAPI("https://grantwinney.com", "a6d33f1b95ff17adf0f787a70a");
var settings = ghost.GetSettings();
Console.WriteLine($"Welcome to {settings.Title}: {settings.Description}\r\n");
Console.WriteLine($"Navigation: {string.Join(", ", settings.Navigation.Select(x => x.Label))}");
Вывод:
Welcome to Grant Winney: We learn by doing. We've all got something to contribute.
Navigation: Home, APIs, Lambda, Rasp PI, About Me, CV
Доступ к API администратора
Чтобы получить доступ к API администратора, получите URL-адрес API и ключ API администратора, также на странице «Интеграции» . Получив эти фрагменты информации, вы можете получить доступ к «частному» контенту, а также создавать, изменять или даже удалять много «открытого» контента.
Код:
var ghost = new GhostSharp.GhostAdminAPI("https://grantwinney.com",
"5cf706fd7d4a33066550627a:9e5ed2b90e40f68573b0ccaf4aef666b047fc9867ad285b2e219eed5503bae53");
var site = ghost.GetSite();
Console.WriteLine($"Welcome to <a href='{site.Url}'>{site.Title}</a>\r\n");
Console.WriteLine($"Running Ghost v{site.Version}");
Вывод:
Welcome to <a href='Grant Winney'>Grant Winney</a>
Running Ghost v2.23
Проблемы
Все прошло гладко, даже немного скучно и до тех пор, пока я не занялся последней стабильной конечной точкой API администратора - загрузкой изображений. Документы утверждают, что
Они выкладывают пример использования curlс опцией -F . Я не пробовал, но это соответствует тому, что они просят.Чтобы загрузить изображение, отправьте запрос составных данных из нескольких частей, указав 'Content-Type': 'multipart/form-data;'заголовок ...
curl -X POST -F 'file=@/path/to/images/my-image.jpg' -F 'ref=path/to/images/my-image.jpg' -H "Authorization: 'Ghost $token'" https://{admin_domain}/ghost/api/{version}/admin/images/upload/Но когда я попытался отправить сообщение в конечную точку, используя RestSharp с добавленным заголовком, единственный ответ, который я смог получить, был что-то вроде «пожалуйста, выберите изображение». Я часами изучал, как загрузить файл изображения, и попробовал полдюжины разных способов.
Код:
var request = new RestRequest("images/upload/", Method.POST);
request.AddHeader("Content-Type", "multipart/form-data");
Решение? Удалить заголовок.
Код:
var request = new RestRequest("images/upload/", Method.POST);
if (image.FilePath != null)
request.AddFile("file", image.FilePath, GetMimeType(image.ImageType));
else
request.AddFile("file", image.File, image.FileName, GetMimeType(image.ImageType));
request.AddParameter("purpose", image.Purpose.ToString().ToLower());
request.AddParameter("ref", image.Reference);
return Execute<ImageResponse>(request).Images[0]; // adds authentication and execute s the query
Я понятия не имею, почему это было проблемой, и у меня мало желания копаться в кишках RestSharp, чтобы понять это. Каким-то образом этот заголовок испортил запрос, так что Ghost подумал, что изображение не загружается. Может я неправильно использовал шапку? Добавление файла некорректно для работы с этим заголовком? Может быть AddFile(), что-то скрывается за кулисами, что сделало все это очень-очень неправильным?
Ну что ж!
Чему я научился?
Грузы ...
JsonProperty
Если вам нужно получить / опубликовать поля с нижними или нижними подчеркиваниями в них, но вы хотите, чтобы все ваши классы были в паскале (или в другом формате), вам может понадобиться способ перевода между ними. JsonProperty на помощь. Он помогает RestSharp в переводе между именами свойств C # и именами полей JSON.
Код:
namespace GhostSharp.Entities
{
public class Author
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("profile_image")]
public string ProfileImage { get; set; }
[JsonProperty("cover_image")]
public string CoverImage { get; set; }
Трэвис CI
Потратьте несколько минут, чтобы импортировать в него свои проекты, особенно если у вас есть тесты. Тогда вы можете просто продолжать вносить изменения, весело и головокружительно не зная о последствиях, и у Трэвиса есть ваша спина. Или что-то вроде того.
CodeFactor
CodeFactor - еще один замечательный сервис. Он также следит за вашим репо, предлагая исправления кода. У меня было несколько десятков из того, что я бы назвал «косметическими» изменениями - несколько классов в одном файле, лишние пустые строки и т. Д. - но все же было приятно немного почистить вещи и увидеть эту большую зеленую полосу.
Команда Ghost очень отзывчива
Я задал довольно много вопросов на их форуме , и они были полезны ...
- Я обновил Ghost, но не могу найти ключ API v2 на экране Интеграции
- Авторы, теги не возвращаются через API, если они не связаны с опубликованным постом.
- Комментарий к коду гласит: «Мы еще не поддерживаем ключи API API» - это правда?
- Невозможно преобразовать исходный HTML-код в Mobiledoc: пакет html-to-mobiledoc не был установлен