1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

e-Govの法令APIで更新法令一覧を取得する_パワークエリで

Last updated at Posted at 2023-09-29

以前のでは、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のをカスタム関数としておいて、対象にしたい日付のリストを作成してデータ取得して一覧にしています。

ApplData
(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処理に時間かかる

結果

そのままシートに書き出したらこんな風に取得できてる!
image.png

M言語

ほとんど画面ポチポチとかでつくって、M言語分かってないのでおかしな?ムダな?とこもありそう。

VBAかパワークエリか

単に取得するだけならパワークエリの方がいいのかな。
でも自分的にはVBAの方がそんなに迷わずできた。
たま~~にパワークエリするけど毎回忘れていて調べながらになっちゃうという。

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?