商品の価格情報を簡単に取得したい時とかありますね。さらにリストにして一気に取得したい。取得した価格情報を使って何かをしたい。
そういった時にはスクリプトで価格情報を一括して素早く取得できれば楽です。
今回はGAS(Google Apps Script)で指定したURLの商品名、価格情報を取得するスクリプトです。
価格comのHTMLを確認
商品名
価格comの商品名は以下のようにh2タグで囲まれています。
<h2 itemprop="name">iPhone X 256GB SIMフリー</h2>
そのためh2タグで囲まれている部分の文字列を取得するようにします。
しかし残念ながらGASでは指定したタグを取得するgetElementsByTagNameが使えません。
そのためタグから文字列を取得する関数を作って対応します。
参考
GASでのgetElementsByTagNameっぽいもの - ピリ辛的備忘録
https://sites.google.com/site/lifeslash7830/home/gas/gasdenogetelementsbytagnameppoimono
最安値の取得
価格comの最安値は以下のようにspanタグで囲まれています。
<div><span id="minPrice">最安価格(税込):<a href="http://kakaku.com/shop/1989/?pdid=K0000995743&lid=shop_itemview_saiyasukakaku"><span>¥140,184~</span></a></span>
最安価格は<span>¥140,184で抽出した時に一番最初にくるため、それを使用したいと思います。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
function getPrice() { //現在のスプレッドシートを取得 var aBook = SpreadsheetApp.getActiveSpreadsheet(); //"価格表"シートを取得 var aSheet = aBook.getSheetByName("価格表"); //"価格表"シートの最終行を取得 var lastRow = aSheet.getDataRange().getLastRow(); //2行目から最終行までループ for (var i = 2; i <= lastRow; i++) { //1列目のi行のURLを取得 var url = aSheet.getRange(i, 1).getValue(); //URLページを取得 var response = UrlFetchApp.fetch(url); //HTML文を取得 var html = response.getContentText('shift_jis'); //h2タグから商品名を取得 var itemName = getContentOfTagName(html, 'h2'); //正規表現で最安値を取得 // <span>¥の後に数字とカンマが1つ以上続く条件で検索。 var regex = new RegExp("\<span\>\¥\;([0-9,]+)"); //マッチした()内の数字を取得 var price = html.match(regex)[1]; //商品名をセルに書き込む aSheet.getRange(i, 2).setValue(itemName[0]); //価格をセルに書き込む aSheet.getRange(i, 3).setValue(price); } } function getContentOfTagName(html, tagName) { var i = 0; var j = 0; var startOfTag; var endOfTag; var str = [ ]; while(html.indexOf('<' + tagName,j)!=-1){ //"<タグ名"の開始位置を取得 j = html.indexOf('<' + tagName,j); //次の">"位置 + 1を文字列の始めとする startOfStr = html.indexOf('>',j)+1; //次の"</タグ名>"位置を文字列の終わりとする endOfStr = html.indexOf('</' + tagName + '>',j); //タグの間の文字列を配列に追加 str[i] = html.substring(startOfStr, endOfStr); j = endOfStr + 1; i++; } return str; } |
実行結果
1列目に価格comの商品URLを入れておきます。
スクリプトを実行します。
自動的に商品名と価格がセルに入力されました。