iTunes Store 検索

404 Blog Not Found:Ajax - iTunes Store 検索にインスパイヤされて、同じようなものを awk で作ってみます。 ただし、画像や曲目までは検索せずにアーティスト名とアルバム名だけに限定します。 また、API にアクセスする際には gawk の TCP/IP 通信機能を用いていますので、gawk, xgawk 限定になります。

#! /usr/local/bin/gawk -f
# itunes_store.awk
# iTunes Store で検索します
# usage: gawk -f itunes_store.awk

BEGIN {
    name = ARGV[1];
    if (name == "") {
        exit;
    }

    itunes_url = "http://ax.phobos.apple.com.edgesuite.net"\
                    "/WebObjects/MZStoreServices.woa/wa/itmsSearch";
    itunes_opt = "?output=json&callback=JSONP.run&country=JP&lang=ja_jp&term="\
                    name;

    # ここからは gawk で /inet にアクセスする際の決まり文句のようなもの
    base_url        = gensub(/.*\/\/([^/]+)\/.*/, "\\1", 1, itunes_url);
    http_service    = "/inet/tcp/0/" base_url "/80";
    http_str        = "GET " itunes_url itunes_opt " HTTP/1.0";

    # /inet にアクセス
    ORS = "\r\n";
    print http_str                      |& http_service;
    print ""                            |& http_service;
    while ((http_service |& getline) > 0) {
        if ($0 ~ /wrapperType/) {
            num_item = split($0, arr_item, /, "/);
            for (i = 1; i <= num_item; i++) {
                # アーティスト名
                if (arr_item[i] ~ /artistName/) {
                    artist_name = gensub(/^artistName":"(.*)"/, "\\1", 1,\
                                    arr_item[i]);
                }
                # アルバム名
                if (arr_item[i] ~ /itemParentName/) {
                    album_name = gensub(/^itemParentName":"(.*)"/, "\\1", 1,\
                                    arr_item[i]);
                }
            }

            if ((artist_name != "" || artist_name != "null") ||
                (album_name != "" || album_name != "null")) {
                print artist_name " : " album_name;
            }
        }
    }
    close(http_service);
}

gawk 限定ということもありますので、gensub() 関数を用いてアーティスト名とアルバム名を抽出しています。

$ gawk -f itunes_store.awk 翼をください
德永英明 : VOCALIST
山本潤子 : 翼をください
桜高軽音部 [平沢唯・秋山澪・田井中律・琴吹紬(CV:豊崎愛生、日笠陽子、佐藤聡美、寿美菜子)] : ふわふわ時間
<snip>

Ajax のような軽快さはないですが、コマンドラインからサクサク検索できるのは良いです。

tag_gawk.pngtag_gawk.png