From 5be7c28d5ea2e3d3394f877f347a36004c3225e3 Mon Sep 17 00:00:00 2001 From: Salah Date: Wed, 7 Aug 2024 00:40:19 +0200 Subject: [PATCH] use of RefitHttpFactory to post to medium --- ArticlePublisher/ArticlePublisher.csproj | 2 +- ArticlePublisher/Program.cs | 13 +++++++++- ArticlePublisher/PublisherFunction.cs | 30 +++++++++++++++++++----- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/ArticlePublisher/ArticlePublisher.csproj b/ArticlePublisher/ArticlePublisher.csproj index 539f0f6..23752a8 100644 --- a/ArticlePublisher/ArticlePublisher.csproj +++ b/ArticlePublisher/ArticlePublisher.csproj @@ -15,7 +15,7 @@ - + diff --git a/ArticlePublisher/Program.cs b/ArticlePublisher/Program.cs index c2df7fb..f0dbe04 100644 --- a/ArticlePublisher/Program.cs +++ b/ArticlePublisher/Program.cs @@ -1,13 +1,24 @@ +using ArticlePublisher; using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Refit; + +const string IMediumHost = "https://api.medium.com"; + var host = new HostBuilder() .ConfigureFunctionsWebApplication() .ConfigureServices(services => { services.AddApplicationInsightsTelemetryWorkerService(); - services.ConfigureFunctionsApplicationInsights(); + services.ConfigureFunctionsApplicationInsights(); + services.AddHttpClient("HttpMedium", (provider, client) => + { + client.BaseAddress = new System.Uri(IMediumHost); + client.DefaultRequestHeaders.Add("Accept", "application/json"); + }) + .AddTypedClient(c => RestService.For(c)); }) .Build(); diff --git a/ArticlePublisher/PublisherFunction.cs b/ArticlePublisher/PublisherFunction.cs index 31b83a1..4087bb4 100644 --- a/ArticlePublisher/PublisherFunction.cs +++ b/ArticlePublisher/PublisherFunction.cs @@ -1,23 +1,21 @@ using Markdig; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Logging; -using System.Text.Json.Serialization; -using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute; - -using static System.Net.Mime.MediaTypeNames; using Microsoft.Azure.Functions.Worker.Http; +using Microsoft.Extensions.Configuration; namespace ArticlePublisher { public class PublisherFunction { private readonly ILogger _logger; + private readonly IMedium _mediumClient; - public PublisherFunction(ILogger logger) + public PublisherFunction(ILogger logger, IMedium mediumClient) { _logger = logger; + _mediumClient = mediumClient; } [Function("Publisher")] @@ -37,7 +35,27 @@ public async Task Run([HttpTrigger(AuthorizationLevel.Anonymous, .ToHtml(content!, pipeline); _logger.LogInformation("C# HTTP trigger function processed a request."); + + await PublishToMediumAsync(frontMatter, html); + return new OkObjectResult(html); } + + public async Task PublishToMediumAsync(BlogFrontMatter blogFrontMatter, string html) + { + MediumPost mediumPost = new MediumPost + { + Title = blogFrontMatter.Title, + ContentFormat = "html", + Content = html, + PublishStatus = "draft" + }; + + var mediumToken = Environment.GetEnvironmentVariable("MEDIUM_TOKEN"); + var mediumUserId = Environment.GetEnvironmentVariable("MEDIUM_USERID"); + + await _mediumClient.CreatePost(mediumUserId, mediumPost, mediumToken); + + } } }