ISBNの書かれたテーブルにPower Queryのカスタム関数で書誌情報を追加する
はじめに
下の図のようにISBNコードが書かれたテーブルに対して、タイトル、著者、出版社などの書誌情報を Power Query で追加することができました
このカスタム関数を使う方法に気づくまでは Python を使っていたのですが json の構造をたどって欲しい情報を選ぶのに苦労していました。 Power Query だとローコード(コードを触ったのは3か所だけ!)で実現できるし json から欲しい情報を選ぶのも超簡単です!
Power Query で openBD の書誌情報を読み込んでみる
書誌情報の取得には openBD を使わせていただきました
openBD の API では isbn=
の後にISBNコードをカンマ区切りで並べて書くことで複数の書誌情報を一度に取得できます。
実装上の要点
• なるべくまとめて取得する(HTTPのペイロードを減らす)
とopenBDセミナーのプレゼン資料に書かれていたので複数のISBNコードが書かれたテーブルから上記のようなURLを一つだけ作成して一気に取得する方法にしています
まずはこのURLをPower Queryで読み込んでみます
Power Query の新しいクエリで 「Web から」の URL に先ほどの URL を入力して OK をクリック
展開するボタンをクリックし、summaryの列を選択し、元の列名を~のチェックを外してOKをクリック
展開するボタンをクリックし、全ての列を選択してOKをクリック
このクエリをカスタム関数に置き換える
つぎにこのクエリをISBNコードをパラメータとした関数に置き換えます
let の上に (IsbnList as text) =>
と入力する(コードを触る1か所目)
URL の中のISBNコードの数字部分を下記のように変更する(コードを触る2か所目)
変更後のコード
(IsbnList as text) =>
let
ソース = Json.Document(Web.Contents("https://api.openbd.jp/v1/get?isbn="& IsbnList)),
テーブルに変換済み = Table.FromList(ソース, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"展開された Column1" = Table.ExpandRecordColumn(テーブルに変換済み, "Column1", {"summary"}, {"summary"}),
#"展開された summary" = Table.ExpandRecordColumn(#"展開された Column1", "summary", {"isbn", "title", "volume", "series", "publisher", "pubdate", "cover", "author"}, {"isbn", "title", "volume", "series", "publisher", "pubdate", "cover", "author"})
in
#"展開された summary"
詳細エディタの完了を押すとこのように関数に変換されるので関数名 getBookInfo としておく
カスタム関数の動作テストをしてみます
IsbnListの部分に 9784899774921,9784802511025,9784802511216,9784798055909,9784798059822
と入力して呼び出しをクリック
ISBNコードが書かれたテーブルからカスタム関数を呼び出す
このようなテーブルを元にしてに先ほどのカスタム関数で書誌情報をとってみます
全ての列を選択して列のマージを行います。区切り文字はコンマを選んでOKをクリック
列のマージを行う際に {"Column1", "Column2", "Column3", "Column4", "Column5"}
とコラム名が指定されていますがISBNデータの個数が変わったときにこのままではうまく動かなさそうなので・・・
Table.ColumnNames(転置されたテーブル)
に書き換えます(コードを触る3か所目)
列の追加タブのカスタム関数の呼び出しをクリックし、ダイアログで関数クエリに getBookInfo を選び、IsbnList に結合済みの列を選択してOKをクリック
展開するボタンをクリックし、すべての列を選択してOKをクリック
まとめ
この方法に気づくまでは Python を使っていて json の構造をたどってほしい情報を選ぶのに苦闘していました。 Power Query だとローコード(コードを触ったのは3か所だけ!)で json の構造を追うのも超簡単に同じことを実現できました!
ISBNコードの行数が増えた時も更新ボタン一発です。openBD で情報が見つからない場合もエラーで途中終了したりしないで空白行で返ってくるのも助かります!
Power Query のカスタム関数は超便利&超強力ですね!!
参考
カスタム関数の作成についてはこちらのページを参考にさせていただきました
[Power BI / Excel] 複数にまたがる Web ページからデータを取得する
Author And Source
この問題について(ISBNの書かれたテーブルにPower Queryのカスタム関数で書誌情報を追加する), 我々は、より多くの情報をここで見つけました https://qiita.com/reisyu/items/bb5aefab43acf79d0393著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .