見出し画像

リアル本屋をやるとしたら・・・WEBに商品を全て公開する_2_商品登録編_1

※有料ですが全文読めます。読後、参考になるようでしたらサポートしていただけると大変喜びます。

このノートをはじめたきっかけは、下記ツイートです。


前回の記事は下記です。


商品登録については下記の項目で説明します。

・ECショップへ、CSVデータでの一括登録の方法
・CSVデータの作成
・CSVデータに必要な、ISBNから書籍情報を収集
・CSVデータに必要な、書籍画像の取得方法

前提条件

本屋の想定
・新刊を扱う
・1万冊ほどの在庫
・ECショップも運営する
使うツールは
・在庫データなどは、Googleスプレッドシートを採用
・ECショップはBASEを採用

・ECショップへ、CSVデータでの一括登録の方法

大量の商品をECショップ(BASE)に登録する方法は、ショップ側でCSV登録が用意されていますので、こちらを活用します。

・BASEのApp「CSV」をインストールします。

画像1


・App「CSV」を開くとサンプルの「CSVファイル」が用意されているので、ダウンロードします。※画像フォルダーZIPファイルは次回記事で説明します。

画像2

画像3

・サンプルのCSVファイルを開き、必要項目を入力し、上書き保存します。
・上書きしたCSVを上記画面のファイル選択のCSVファイルの横にあるファイルを選択ボタンからアップロードします。
・しばらく待つと、CSVの商品情報がECショップに登録されています。
・画像はさきほどのCSVとは別でZIPフォルダとしてアップロードします。※画像フォルダーZIPファイルは次回記事で説明します。

※CSVファイルの項目に画像ファイル名がありますので、このファイル名と
画像フォルダの画像ファイル名が同じであれば、その商品にその画像ファイルが挿入されるという仕組みです。

画像4

・CSVデータの作成


こちらは先にダウンロードしたCSVの項目を埋めていきますが、大量にかつ効率的に書籍情報を入力するためには下準備する必要があります。

別シートを用意して、そこにまずは書籍情報を取得していきましょう。

スプレッドシートをCSVとしてアップロードする場合は、そのブック内の一番左にあるシートをアップロードすることになるので、完成形を一番左に用意して、下準備シートは右に作成していきましょう。完成形はこんな感じです。

画像5

閲覧のみですが、作成中のスプレッドシートも下記から確認できます。

・CSVデータに必要な、ISBNから書籍情報を収集

商品を入荷した際に、書籍情報をシートに入力していくには、

1.ISBNをバーコードリーダーでスキャンし
2.ISBNに基づいた書籍情報をWEBから収集取得入力する。

この流れでシート入力をしていくことにします。

スプレッドシートの利点として、GAS(Google App Script)というGoogleが用意してくれているプログラミング言語のJavaScriptが扱えることです。※下記参考記事

こちらを使うことで、シート内の情報を自動計算入力してくれたり、WEB上の情報を取得しシートに入力させることができます。

今回はISBNを元にして書籍情報をAmazonから取得入力するようにします。

さて、スプレッドシート内の上部メニューのツール、スクリプトを選ぶと、ブラウザに別タブが立ち上がります。ここに先ほどのGASを記載していきます。

画像6

別タブは下記のような状態です。

画像7

ここに先ほどのGASのコードを記載していきます。下記のような形です。

画像8

コードはこちらです。上書きペーストしてください。※コードは汚い部分はご了承ください。

  
function getIsbn(){
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var activeRange = spreadsheet.getActiveRange();
  var isbn = activeRange.getValue();
  Logger.log("isbn"+isbn);
  return isbn;
}

function getAmazonBookInfo(isbn){
  Logger.log("getAmazonBookInfo"+isbn);
  var u = "http://ecs.amazonaws.jp/onca/xml?";
  var o = {
    Service:"AWSECommerceService",
    Version:"2011-08-01",
    AssociateTag:"[自分のアソシエイトタグ]",
    Operation:"ItemLookup",
    SearchIndex:"Books",
    ItemId:isbn,
    Timestamp:new Date().toISOString(),
    AWSAccessKeyId:"[自分のアクセスキーID]",
    IdType:"ISBN",
    ResponseGroup:"ItemAttributes,Offers,Images"
  };

  var a = Object.keys(o).sort();
  a = a.map(function(key){
    return key +"="+encodeURIComponent(o[key]);
  });

  var s = "GET" + "\n" + "ecs.amazonaws.jp" + "\n" + "/onca/xml" + "\n" + a.join("&");

  var x = Utilities.base64Encode(Utilities.computeHmacSha256Signature(s, "[自分のシークレットキー]"));
  var z = u + a.join("&") + "&Signature=" + encodeURIComponent(x);
  var r = UrlFetchApp.fetch(z);

  return XmlService.parse(r.getContentText());
}

function getBookInfo(){
  var isbn = getIsbn();
  Logger.log("getIsbn="+isbn);
  var o = {};
  var x = getAmazonBookInfo(isbn);
  var a = x.getDescendants();
  Logger.log(x);
  Logger.log(a);
  
  var count = 0;
  for(var i=0;i<a.length;i++){
    
    if(o.price){
      Logger.log("count:"+count);
       var sheet = SpreadsheetApp.openById("[スプレッドシートのID]").getSheetByName("ISBN検索");
       var spreadsheet = SpreadsheetApp.getActiveSheet();
       var activeRange = spreadsheet.getActiveRange();
       var ActiveColumn = activeRange.getLastColumn();
       var ActiveRow = activeRange.getLastRow();

       sheet.getRange(ActiveRow+0,ActiveColumn+1).setValue(o.title);
       sheet.getRange(ActiveRow+0,ActiveColumn+2).setValue(o.price);
       sheet.getRange(ActiveRow+0,ActiveColumn+3).setValue(o.url);
       sheet.getRange(ActiveRow+0,ActiveColumn+4).setValue(o.image);
      return;
    }
    
    
    if(a[i].getType() == XmlService.ContentTypes.ELEMENT){
      switch(a[i].asElement().getName()){
        case "Title" :
          o.title = a[i].asElement().getText();
          Logger.log("Title="+o.title);
          count++;
          Logger.log(count);
          break;
        case "LowestNewPrice" :
          o.price = a[i+1].asElement().getText();
          Logger.log("FormattedPrice="+o.price);
          count++;
          Logger.log(count);
          break;
        case "Item" :
          Logger.log("Item>"+a[i+3].asElement().getName());
          if(a[i+3].asElement().getName()=="DetailPageURL"){
            Logger.log("OK");
            o.url = a[i+3].asElement().getText();
            Logger.log("url="+o.url);
          }else{Logger.log("NO");}
          count++;
          Logger.log(count);
          break;
        case "LargeImage" :
          if(a[i+1].asElement().getName()=="URL"){
            Logger.log("OK");
            o.image = a[i+1].asElement().getText();
            Logger.log("image="+o.image);
          }else{Logger.log("NO");}
          count++;
          Logger.log(count);
          break;

      }
    }
  }
  
}


このコードに、Amazonアカウントと紐付けた個別情報を3箇所ほど入力する必要があります。下記のように記載している部分です。※記載時は[]は外してください。

[自分のアソシエイトタグ]
[自分のアクセスキーID]
[自分のシークレットキー]
[スプレッドシートのID]

Amazonからの個別情報は、Amazon product APIというサービスに登録することで、Amazonのサイト情報を一部取得することができます。※下記申込みサイト情報です。

Amazon product APIとは

WEBサービスには、APIという概念があり、各サイトが自身の一部の情報をほかのWEBサービスに提供することで、双方の相乗効果を目的とした取り組みといった便利なサービスがあります。

今回はAmazonを活用してますが、書籍情報の取得はGoogleや楽天なども提供しています。「書籍情報 API」などで調べてみると、より詳しい情報を知ることができます。

今回のAmazon APIについては下記の記事などを参考にしてますので、ご確認ください。

スプレッドシートIDはどこからとる?

コードの個別項目の4つ目、[スプレッドシートのID]ですが、下記画像のスプレッドシートのURLの赤枠部分です。

画像9

・CSVデータに必要な、書籍画像の取得方法

上記のGASを「実行」することで必要な書籍情報が取得入力できます。

画像10

下記画像の青枠の選択している「アクティブセル」のISBNをもとにして、AmazonAPIを使い、書籍情報を取得し、赤枠の「書籍名」「金額」「書籍取得先URL」「書籍画像URL」を入力させるようGASのコードで書いています。

画像11

下記は動画です。

このシートを、一番左のシート「登録CSV」の赤枠のような形で、必要な部分だけシート「ISBN検索」から参照させることでCSVとしての必要情報は完成です。

画像12

今回は書籍情報のCSVを作成する流れを説明しました。

次回は画像フォルダZIP作成

次回は画像フォルダのZIPを作成します。

流れとしては
先に作成したシート内の画像URL情報をもとに、
画像をWEBから取得し、
画像フォルダに格納、圧縮
という流れでZIPファイルを作成します。


技術的な不明点はお気軽にご連絡ください。また、実際のWEB作業などもお手伝いできますのでお気軽に相談ください。


それ以降の公開予定記事

・ECショップ検索編
・SEO検索編
・実店舗売上記録編
・返品対応編

別テーマ
実店舗が電子書籍を取り扱うとしたら・・・スキームの構想と具体案

などです。

引き続きよろしくお願いします。


本屋さんへのWEB相談・支援承っております

本屋さんや出版社さん、酒屋さん、小売店舗さん、美容院さん、個人病院さん、個人事業さんなど、街場の商いや「個人やまだ小規模だけどもっとWEBをいろいろやりたい」かたなどのご相談、支援など承っておりますので、お気軽にご相談ください。※企業のWeb担当も承っております。


Twitterもやってます

Twitterで更新告知しているので、本と本屋とWebについての情報を知りたい方どうぞお気軽にフォローください。



サポートは今後のより良い情報発信に活用させていただきます。