Intro:
Emails often contain links that are valuable for various reasons. Power Automate by Microsoft is a tool that can automate many tasks, but it doesn’t have a built-in feature to Find all (as in excel) instance of a specific string. Felling in love with bring in your own c# code as a plugin helped to solve a small problem of extracting URL from an email body.
C# Code:
Piggy backing on the previous blog on the framework the only change is
Sorcerer’s Code: Spellbinding Regex match in Power Automate’s C# Plugin
Bala Madhusoodhanan ・ Jun 10
using System.Net;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
public class Script : ScriptBase
{
public override async Task<HttpResponseMessage> ExecuteAsync()
{
// Check if the operation ID matches what is specified in the OpenAPI definition of the connector
if (this.Context.OperationId == "URLextract")
{
// Corrected method name
return await this.HandleURLextractOperation().ConfigureAwait(false);
}
// Handle an invalid operation ID
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.BadRequest);
response.Content = CreateJsonContent($"Unknown operation ID '{this.Context.OperationId}'");
return response;
}
private async Task<HttpResponseMessage> HandleURLextractOperation()
{
HttpResponseMessage response;
// The structure of the message body of the incoming request looks like this:
// {
// "urltext": "<some text>"
// }
var contentAsString = await this.Context.Request.Content.ReadAsStringAsync().ConfigureAwait(false);
var contentAsJson = JObject.Parse(contentAsString);
// Extract the input text from the request content
var inputText = (string)contentAsJson["urltext"];
// Call the ExtractUrls method to get the list of URLs
var urls = await ExtractUrls(inputText);
// Create a JSON object to hold the response content
JObject output = new JObject
{
["urls"] = JArray.FromObject(urls)
};
response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = CreateJsonContent(output.ToString());
return response;
}
// The ExtractUrls method provided by the user
public async Task<List<string>> ExtractUrls(string inputText)
{
// Define a regular expression to match URLs
var urlRegex = new Regex(@"\b(?:https?://|www.)\S+\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
// Find matches in the input text
var matches = urlRegex.Matches(inputText);
// Create a list to hold the URLs
var urls = new List<string>();
foreach (Match match in matches)
{
// Add each URL to the list
urls.Add(match.Value);
}
// Return the list of URLs
return urls;
}
// Helper method to create JSON content
private StringContent CreateJsonContent(string jsonString)
{
return new StringContent(jsonString, System.Text.Encoding.UTF8, "application/json");
}
}
Magic:
This JSON output organizes the URLs neatly, making it easy to process and utilize them in various applications.