見出し画像

ニート生活中に作った在庫管理ツールを無料で配布します[ebay輸出]



こんにちは、ユウタです。

10月から転職活動始まり、無事に第一志望である会社に内定を頂くことができ、絶賛出社までのニート生活をしております。あまりにも暇でやることがないので、Googleスプレッドシート上で動く在庫管理ツールを作りました。

Googleとebay Develper Programのアカウントさえあれば、誰でも使えます。


用意するもの

・Googleのアカウント
[ ebay Develper Programの登録が必須 ]
・App ID (Client ID)
・Dev ID
・Cert ID (Client Secret)
・User Token(Production環境)

App ID~を利用するためには、ebay Develper Programのアカウントを作成する必要があります。アカウントを作成する方法はこちらの記事が詳しいので、ぜひ参考にしてみてください。

スプレッドシートのダウンロード方法


手順1. 下記のリンクからシートのコピーを作成

https://docs.google.com/spreadsheets/d/1jPSHhH9etnvVeZKVjUUO21_f5ZZUJMu0x-Hvc8qoRIU/edit?usp=sharing

ファイルからコピーを作成の選択をしてください。

画像1




手順2. 必要な情報の入力をしてください。

さて、晴れてコピーの作成ができたら、取得したebayの情報と仕入れURL、その他諸々の情報を適宜入力してください。

画像2


B8のセルに関数が入っているので、A列にURL[メルカリ・ラクマ・ヤフーショッピング・楽天市場・ヤフオク]を貼ると、自動でキーワードが入力されます。
※ URL元の商品ページに特定のキーワードがあるかで在庫の有無を判断しているので、上記のサイト以外も対応可能です。(ご自身でチェックお願いします)

※楽天市場のみ動作しておりません。

画像3


手順3. スクリプトの実行を許可する

必要な情報の入力が終わったら、在庫チェックを開始をクリックしてください。
初めてスクリプトを実行する場合は、ご自身のGoogleアカウントからアクセスを許可する必要がございます。

下の画像の手順で、在庫管理ツールの承認をしてください。

画像4

画像5

→在庫管理ツール(安全ではないページ)に移動をクリック

画像6

画像7


手順4. 在庫チェックを開始

これで、在庫管理ツールの設定が終了しました。お疲れ様でした😔
それでは、在庫チェックを開始してみましょう!

※仕入先のサーバーに負担をかけないように、1秒の間隔をあけてます。

画像8



実行後は、在庫チェック列に○✗で仕入先の在庫の有無が表示され、状況の列にebayの現在のEND情報が表示されます。


※ END情報の例

・App IDなどのIDやトークンが正しくない場合
→入力データが無効

・ItemIDの商品が削除されている場合や違うセラーの商品だった場合
→ ItemIDが無効

・既にebay上で、出品を取り下げている場合
→ END済

・商品の取り下げが成功した場合
→ END成功!


GASのソースコード(メンテナンス用)

ツールを使用して、アクセス制限などの不具合が起きましたら、クラウドワークス等でエンジニアを探して、各自でメンテナンスをお願いします。

ツール開発を0→1でお願いするとツール費用に5万〜くらいかかりますが、既存コードのメンテナンスなら5000円〜1万円くらいで依頼できると思いますので、ぜひ参考にしてください😔



function myFunction() {
 // シート情報にアクセスできるようにします
 var sheet=SpreadsheetApp.getActiveSheet();
 var APP = sheet.getRange('B2').getValue();
 var DEV =  sheet.getRange('B3').getValue();
 var CERT = sheet.getRange('B4').getValue();
 var Token = sheet.getRange('B5').getValue();
 // 最後の行数を取得します
 var rowcount = sheet.getLastRow();
 // 開始行から最終行までまわします
 
 for(var i=8; i<rowcount+1; i++){
     url = sheet.getRange(i,1).getValue();
     keyword = sheet.getRange(i,2).getValue();
     ItemID = sheet.getRange(i,4).getValue();
     result = check_url(url,keyword);
     if(result){
     // 想定通りならH列に◯を
        sheet.getRange(i,3).setValue('○');
     } else {
     // 想定と違ったら×を
       sheet.getRange(i,3).setValue('☓');
       try {
         var endpoint = "https://api.ebay.com/ws/api.dll"
         var headers = {'X-EBAY-API-COMPATIBILITY-LEVEL': '1149',
                        'X-EBAY-API-DEV-NAME': DEV ,
                        'X-EBAY-API-APP-NAME': APP,
                        'X-EBAY-API-CERT-NAME': CERT,
                        'X-EBAY-API-CALL-NAME': 'EndItem',
                        'X-EBAY-API-SITEID': '0',
                        'Content-Type': 'text/xml'}
         
         var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><EndItemRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\"><RequesterCredentials><eBayAuthToken>" + Token + "</eBayAuthToken></RequesterCredentials><EndingReason>NotAvailable</EndingReason><ItemID>" + ItemID + "</ItemID></EndItemRequest>"
         var options = {
           'method' : 'post',
           'headers' : headers,
           'payload' : xml
         };
         response = UrlFetchApp.fetch(endpoint,options)
         var responseBody = response.getContentText();
         if (responseBody.search("invalid") !== -1) {
             sheet.getRange(i,5).setValue("入力データが無効");
         } 
         else if(responseBody.search("closed") !== -1){
           sheet.getRange(i,5).setValue("END済");
        } 
        else if(responseBody.search("Item cannot be accessed") !== -1){
           sheet.getRange(i,5).setValue("ItemIDが無効");
        } 
        else{
           sheet.getRange(i,5).setValue("END成功!");
        } 
         
       } catch (e){
         sheet.getRange(i,5).setValue("");
       }
       
     }
 }
 }

function check_url(url,keyword){
    html = get_html(url);
 
    if (html.match(keyword)) {
    
       return true;
     }
  
    else{
     return false;
      
    }
   }  

 
function get_html(url) {
   try{
      Utilities.sleep(1000);
      var response = UrlFetchApp.fetch(url).getContentText();
      return response
    }
   catch(e){
      return '';
    }
  }
   


設定次第で、一日の決まった時間に在庫管理ツールを動かすことができます。興味がありましたら、リンクを参考にアレンジしてみてください。


さいごに

当ツールは、ただ国内の在庫チェックをして、ただ出品を自動で取り下げてくれるだけの機能です。そのため、ヤフオクなどの再出品の商品には対応しておりませんので、お気をつけください😔


また、商品数が莫大になってくると在庫元のURLのサーバーに負荷がかかります。

当ツールを使って、アクセス制限などのいかなるトラブル・損失・損害が起きましても、一切責任を負いませんのでよろしくお願いします!

※サーバーに負荷がかかりづらい設計には心がけております。


11月から転職先にて、仕事が始まりますので、当ツールの不具合や質問などに対応することができません。

このマニュアル通りにセルの配置や設定を変えなければ、問題なく利用できると思いますので、なるべくご質問はお控えくださいませ😔

追記
6分以上の処理をするとタイムアウトになりますので、商品数が多い場合は、分割して処理をお願いいたします🤲

※楽天市場のみ動作しておりません。


改良版はこちら

https://note.com/yuta_ebayer/n/neeadeae87f5e

この記事が気に入ったらサポートをしてみませんか?