作成したい Azure Logic App インターネット上の特定のWebサイトを常に要求し、受信したHTMLを解析します。
ロジックアプリを作成し、間隔とHTTPリクエストアクションを設定しました。
HTMLコードでの単純な正規表現操作の次のステップとしてどのアクションを選択する必要がありますか?
私の頭に浮かぶのは、その仕事をする Azure Function を作成することですが、そのようなタスクにより適した他の解決策があるかどうか疑問に思います。
できるだけシンプルにしたいと思います。
編集:
いくつかのクールな機能を見つけました。ロジックアプリには、プリミティブ型の基本的な式がいくつか含まれています。
残念ながら、regex
またはstring.contains
がありません。
今のところ、AzureFunctionsを試してみます。
ワークフロー定義言語 とAzureが提供するビルディングブロックを使用して、問題を解決することができました。
Azure Functionのアイデアはそれほど悪くはなく、より複雑なケースにも完全に適合しますが、前述したように、できるだけシンプルにしたかったので、ここに示します。
これが私の流れの様子です。
完全を期すために、JSON形式のフローを次に示します。
{
"$connections": {
"value": {
"wunderlist": {
"connectionId": "/subscriptions/.../providers/Microsoft.Web/connections/wunderlist",
"connectionName": "wunderlist",
"id": "/subscriptions/.../providers/Microsoft.Web/locations/northeurope/managedApis/wunderlist"
}
}
},
"definition": {
"$schema": "https://schema.management.Azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Condition": {
"actions": {
"Create_a_task": {
"inputs": {
"body": {
"completed": false,
"list_id": 000000000,
"starred": true,
"title": "@{variables('today date')}"
},
"Host": {
"connection": {
"name": "@parameters('$connections')['wunderlist']['connectionId']"
}
},
"method": "post",
"path": "/tasks",
"retryPolicy": {
"type": "none"
}
},
"limit": {
"timeout": "PT20S"
},
"runAfter": {},
"type": "ApiConnection"
},
"Set_a_reminder": {
"inputs": {
"body": {
"date": "@{addHours(utcNow(), 3)}",
"list_id": 000000,
"task_id": "@body('Create_a_task')?.id"
},
"Host": {
"connection": {
"name": "@parameters('$connections')['wunderlist']['connectionId']"
}
},
"method": "post",
"path": "/reminders",
"retryPolicy": {
"type": "none"
}
},
"limit": {
"timeout": "PT20S"
},
"runAfter": {
"Create_a_task": [
"Succeeded"
]
},
"type": "ApiConnection"
}
},
"expression": "@contains(body('HTTP'), variables('today date'))",
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
},
"type": "If"
},
"HTTP": {
"inputs": {
"method": "GET",
"uri": "..."
},
"runAfter": {},
"type": "Http"
},
"Initialize_variable": {
"inputs": {
"variables": [
{
"name": "today date",
"type": "String",
"value": "@{utcNow('yyyy/MM/dd')}"
}
]
},
"runAfter": {
"HTTP": [
"Succeeded"
]
},
"type": "InitializeVariable"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"triggers": {
"Recurrence": {
"recurrence": {
"frequency": "Day",
"interval": 1,
"startTime": "2017-08-01T23:55:00Z",
"timeZone": "UTC"
},
"type": "Recurrence"
}
}
}
}
ロジックアプリでインラインコードアクションを使用して、JavaScript正規表現コードを実行できます(プレビュー-2019年5月)(フローではサポートされていません)。
次の行に沿ってAzure関数を作成します。
{{
log.Info( "C#HTTPトリガー関数がリクエストを処理しました。");
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
// Set name to query string or body data
string input = data?.input.ToString();
var regexJson = data?.regexList;
var regexes = regexJson.ToObject<List<RegexReplace>>();
foreach (var regex in regexes)
{
var re = Regex.Replace(regex.Regex, "\\\\","\\");
var replace = Regex.Replace(regex.Replace, "\\\\","\\");
input = Regex.Replace(input, "\\\"","\"");
input = Regex.Replace(input, re, replace);
}
input = Regex.Replace(input, "[\\r\\n]", "");
return data.regexList == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, input, "application/json");
}
パブリッククラスRegexReplace
{{
public string Regex { get; set; }
public string Replace { get; set; }
}
あなたはおそらく正しい方向に進んでいます。現時点でこれを実装するには、AzureFunctionが最も適切な方法です。 APIアプリはオプションですが、それは必要以上に重いプラットフォームです。
これは、文字列内のテキストを置き換えるために使用する私の関数です。これは再利用可能であり、このアプローチはLogicAppsでの作業の多くの同様のタイプの側面に使用できます。
using System.Net;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
dynamic data = await req.Content.ReadAsAsync<object>();
string removeme = data?.removeme;
string replacewith = data?.replacewith;
string value = data?.value;
return req.CreateResponse(HttpStatusCode.OK, value.Replace(removeme, replacewith));
}
次に、ロジックアプリから次のようなオブジェクトを投稿します。
{
"removeme": "SKU-",
"replacewith": "P-",
"value": "SKU-37378633"
}
...結果を取得するには:「P-37378633」