AzureとF#をいじったときのメモ。
参考にしたもの
- https://docs.microsoft.com/en-us/dotnet/fsharp/using-fsharp-on-azure/table-storage
- http://www.fssnip.net/nR/title/Using-Azure-Table-Storage
コードの外観
だいたいF# Snippetsのものと同じです。ただ、CloudConfigurationManagerを使わずに、AzurePortal->ストレージアカウント->アクセスキー画面にある「接続文字列」を直接CloudStorageAccout.Parseに渡しても動きました。
- 外部からJSONをFSharp.Data.JsonProviderで読み込み、それをAzure Table Storageに投げ込むという処理です
- NuGetからFSharp.DataとWindowsAzure.Storageをパッケーとして追加しておいてください
// F# の詳細については、http://fsharp.org を参照してください
// 詳細については、'F# チュートリアル' プロジェクトを参照してください。
open System
open FSharp.Data
open Microsoft.WindowsAzure.Storage
open Microsoft.WindowsAzure.Storage.Table
let conn = "..." // AzurePortal->
let docid = "..."
let key = "..."
let baseUrl = "https://www.../"
type ConnpassEvents = JsonProvider<"""
{
"kind": "fusiontables#sqlresponse",
...
}
""">
type TechEvent(partition, row, title: string, url: string, address: string, createDate: string) =
inherit TableEntity(partitionKey = partition, rowKey = row)
new (title, url, address, createDate) = TechEvent("defaultPartition", Guid.NewGuid().ToString(), title, url, address, createDate)
member val Title = title with get, set
member val Url = url with get, set
member val Address = address with get, set
member val CreateDate = createDate with get, set
[<EntryPoint>]
let main argv =
let result = ConnpassEvents.Load(sprintf "https://www.../%s/%s" docid key)
let table =
let account = CloudStorageAccount.Parse conn
let client = account.CreateCloudTableClient()
let table = client.GetTableReference("Table")
table.CreateIfNotExists() |> ignore
table
let mutable batchOp = TableBatchOperation()
for row in result.Rows do
let title = row.JsonValue.[0].AsString()
let url = row.JsonValue.[1].AsString()
let address = row.JsonValue.[2].AsString()
let createDate = row.JsonValue.[4].AsString()
let entity = TechEvent(title, url, address, createDate)
let op = TableOperation.Insert(entity)
table.Execute(op) |> ignore
0 // 整数の終了コードを返します