Esempio n. 1
0
        public static async Task <IActionResult> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "GetBlogPost/{postId}")] HttpRequest req,
            ILogger log, string postId)
        {
            var _blogExtensions = new BlogExtensions();

            var postBody = string.Empty;

            var mediumKeys = new Dictionary <int, string>()
            {
                { 1, "p" },
                { 3, "h1" },
                { 4, "img" },
                { 6, "blockquote" },
                { 9, "li" }
            };

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri($"https://medium.com/p/{postId}?format=json");
                var result = await client.GetAsync("");

                string resultContent = await result.Content.ReadAsStringAsync();

                var rawContent = resultContent.Substring(resultContent.IndexOf("</x>") + 4);

                JObject content = JObject.Parse(rawContent);

                var paragraphs = content["payload"]["value"]["content"]["bodyModel"]["paragraphs"];

                foreach (var paragraph in paragraphs)
                {
                    var tag = getMediumTag(mediumKeys, (int)paragraph["type"]);

                    var text = _blogExtensions.GetMarkup((string)paragraph["text"], (JArray)paragraph["markups"]);

                    if (tag == "li")
                    {
                        if (postBody.EndsWith("</li>"))
                        {
                            postBody += $"<li>{text}</li>";
                        }
                        else
                        {
                            postBody += $"<ul><li>{text}</li>";
                        }
                    }
                    else
                    {
                        if (postBody.EndsWith("</li>"))
                        {
                            postBody += "</ul>";
                        }

                        if (tag == "img")
                        {
                            var imageUrl = "https://cdn-images-1.medium.com/max/800/" + paragraph["metadata"]["id"];
                            postBody += $"<{tag} src='{imageUrl}'></{tag}>";
                        }
                        else
                        {
                            postBody += $"<{tag}>{text}</{tag}>";
                        }
                    }
                }
            }

            return(postBody != null
                ? (ActionResult) new OkObjectResult(postBody)
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body"));
        }
Esempio n. 2
0
        public static async Task <IActionResult> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            var _blogExtensions = new BlogExtensions();
            var blogUrl         = Environment.GetEnvironmentVariable("BlogUrl", EnvironmentVariableTarget.Process);
            var mediumKeys      = new Dictionary <int, string>()
            {
                { 1, "p" },
                { 3, "h1" },
                { 4, "img" },
                { 6, "blockquote" },
                { 9, "li" }
            };
            var lists = new Dictionary <string, string>();

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri($"{blogUrl}/latest?format=json");
                var result = await client.GetAsync("");

                string resultContent = await result.Content.ReadAsStringAsync();

                var rawContent = resultContent.Substring(resultContent.IndexOf("</x>") + 4);

                JObject content = JObject.Parse(rawContent);

                var posts = content["payload"]["posts"];

                foreach (var post in posts)
                {
                    var title        = post["title"];
                    var previewImage = post["virtuals"]["previewImage"]["imageId"];
                    previewImage = $"https://cdn-images-1.medium.com/fit/t/640/192/{previewImage}";
                    var paragraphs  = post["previewContent"]["bodyModel"]["paragraphs"];
                    var previewBody = string.Empty;

                    foreach (var paragraph in paragraphs)
                    {
                        var tag = getMediumTag(mediumKeys, (int)paragraph["type"]);

                        var text = _blogExtensions.GetMarkup((string)paragraph["text"], (JArray)paragraph["markups"]);

                        if (tag == "li")
                        {
                            if (previewBody.EndsWith("</li>"))
                            {
                                previewBody += $"<li>{text}</li>";
                            }
                            else
                            {
                                previewBody += $"<ul><li>{text}</li>";
                            }
                        }
                        else
                        {
                            if (previewBody.EndsWith("</li>"))
                            {
                                previewBody += "</ul>";
                            }

                            if (tag != "img")
                            {
                                previewBody += $"<{tag}>{text}</{tag}>";
                            }
                            //else
                            //{
                            //    var imageUrl = "https://cdn-images-1.medium.com/max/800/" + paragraph["metadata"]["id"];
                            //    postBody += $"<{tag} src='{imageUrl}'></{tag}>";
                            //}
                        }
                    }

                    var blogPost = $"{{\"title\": \"{title}\", \"previewImage\": \"{previewImage}\", \"previewBody\": \"{previewBody}\"}}";

                    lists.Add((string)post["id"], blogPost);
                }
            }

            var output = string.Empty;
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Dictionary <string, string>));

            using (MemoryStream ms = new MemoryStream())
            {
                serializer.WriteObject(ms, lists);
                output += Encoding.Default.GetString(ms.ToArray());
            }

            return(output != null
                ? (ActionResult) new OkObjectResult(output)
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body"));
        }