以前のでは、e-Govから法令APIで更新法令一覧をVBAで取得しましたが、今回はパワークエリでやってみます!
なんとなくVBAでやったけど、そういやパワークエリでもできるはずだよなあと思って!
[追記]
e-GOVのURL変更により修正しました。
https://laws.e-gov.go.jp
⇒https://elaws.e-gov.go.jp
https://laws.e-gov.go.jp/file/houreiapi_shiyosyo.pdf
全体
データ取得するAPIのをカスタム関数としておいて、対象にしたい日付のリストを作成してデータ取得して一覧にしています。
(date as text) =>
let
ソース = Xml.Tables(Web.Contents("https://laws.e-gov.go.jp/api/1/updatelawlists/"& (date))),
Table1 = ソース{1}[Table],
変更された型 = Table.TransformColumnTypes(Table1,{{"Date", Int64.Type}}),
LawNameListInfo = 変更された型{0}[LawNameListInfo],
変更された型1 = Table.TransformColumnTypes(LawNameListInfo,{{"LawTypeName", type text}, {"LawNo", type text}, {"LawName", type text}, {"LawNameKana", type text}, {"OldLawName", type text}, {"PromulgationDate", Int64.Type}, {"AmendName", type text}, {"AmendNo", type text}, {"AmendPromulgationDate", Int64.Type}, {"EnforcementDate", Int64.Type}, {"EnforcementComment", type text}, {"LawId", type text}, {"LawUrl", type text}, {"EnforcementFlg", Int64.Type}, {"AuthFlg", Int64.Type}})
in
try 変更された型1 otherwise null
let
ソース = List.Dates(DateTime.Date(DateTime.LocalNow()), 100, #duration(-1, 0, 0, 0)),
カスタム1 = List.Sort(ソース, Order.Ascending),
テーブルに変換済み = Table.FromList(カスタム1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
削除された文字が挿入されました = Table.AddColumn(テーブルに変換済み, "削除された文字", each Text.Remove(Text.From([Column1], "ja-JP"), {"/"}), type text),
削除された列 = Table.RemoveColumns(削除された文字が挿入されました,{"Column1"}),
#"名前が変更された列 " = Table.RenameColumns(削除された列,{{"削除された文字", "日付"}}),
呼び出されたカスタム関数 = Table.AddColumn(#"名前が変更された列 ", "ApplData", each ApplData([日付])),
フィルターされた行 = Table.SelectRows(呼び出されたカスタム関数, each [ApplData] <> null),
#"展開された ApplData" = Table.ExpandTableColumn(フィルターされた行, "ApplData", {"LawTypeName", "LawNo", "LawName", "LawNameKana", "OldLawName", "PromulgationDate", "AmendName", "AmendNo", "AmendPromulgationDate", "EnforcementDate", "EnforcementComment", "LawId", "LawUrl", "EnforcementFlg", "AuthFlg"}, {"LawTypeName", "LawNo", "LawName", "LawNameKana", "OldLawName", "PromulgationDate", "AmendName", "AmendNo", "AmendPromulgationDate", "EnforcementDate", "EnforcementComment", "LawId", "LawUrl", "EnforcementFlg", "AuthFlg"})
in
#"展開された ApplData"
ApplData
法令APIでデータを取得して必要な部分を取り出している。
https://laws.e-gov.go.jp/api/1/updatelawlists/
の後ろが8桁の日付で変更したいので関数にする。
クエリ
必要な日付分のリストを作って、ApplDataを呼び出して全データを一覧に並べている。
この場合だと当日から100日前までを対象にしている。
※対象期間長くするとAPI処理に時間かかる
結果
M言語
ほとんど画面ポチポチとかでつくって、M言語分かってないのでおかしな?ムダな?とこもありそう。
VBAかパワークエリか
単に取得するだけならパワークエリの方がいいのかな。
でも自分的にはVBAの方がそんなに迷わずできた。
たま~~にパワークエリするけど毎回忘れていて調べながらになっちゃうという。
参考