🥰

Switch Science で委託販売してる人が役立つサービス作った

2023/07/27に公開

つくるきっかけ

委託販売を始めたら切り離せない在庫管理。

みなさんはどのようにやっていますか?

アンケートの結果9名の委託販売をしている人のうち7人が人力、2人が自動化してました。

プログラムが書けるといっても自動化するのは正直めんどい!

とはいえ、自分が作ったものがたまたま在庫切れで欲しいと思ってくれた人に届かないのはめちゃくちゃもったいない!

なので私が作りました!

簡単にまとめるサービス利用者のメリット:

  • 在庫切れによる売り上げの損失を防ぐことができます。
  • 入庫時の通知により、迅速な告知が可能です。
  • (今後)売り上げデータの蓄積により、市場の動向を把握できます。

通知がほしいメールアドレスと商品番号とその閾値を設定するだけで、下のようなメールが届きます。

これで在庫切れに気が付かなくて済む確率を上げられます!

設定方法

利用者数次第で設定用のWebサイト作ろうかとおもいますが、おそらくそんなにユーザー数いない…?のでとりあえずGoogle Formに設定してほしい商品を教えてください。人力で登録します!w

フォームある内容を埋めて送信してください。

変更や削除については、Twitter(https://twitter.com/wamisnet)やHirameQのサイトのお問い合わせより教えていただけば対応します。

またバグなどあれば教えていただけると助かります。

設定は以上で完了です。

前日より在庫数に変動があり、それが閾値の以下か上回るタイミングのみメールが送付されます。

例(9053の商品 閾値は5個)

8/1 6個 
8/2 5個 ←このタイミングで在庫低下メールが届く
8/3 4個 
8/4 3個 
8/5 10個 ←このタイミングで在庫復活メールが届く

以下の通知がきたら製造の準備をして、上回る通知がきたらSNSで補充されました!と告知を打つとよいでしょう

まとめ

このサービスでは毎日記録を取るので、在庫データを貯めつつ、グラフ化とかできたら面白そうだな…とか夢はありますけど、まあ利用者数との兼ね合いだったり私のリソース次第ですがどうなりますかね…?

ぜひこんな使い方できたらいいなとかあればぜひ教えてください。

そんなわけでとりあえず使ってもらわないと今後の発展性もないので、よければ周りの人に教えてぜひ使ってみてください。

おまけ

今回スクレイピングをしているのですが、そこのコードはchatGPTに作ってもらいました。

テクノロジーを活用することで皆さんのアイデアが簡単に実現されていくといいですね。

  // スイッチサイエンスのウェブページのURL
  const sku = 9052
  const url = "https://www.switch-science.com/products/"+sku;

  // ウェブページのHTMLを取得
  const response = await axios.default.get(url);
  const html = response.data;

  // Cheerioを使用してHTMLを解析
  const $ = cheerio.load(html);
  // 商品名の要素を特定して取得
  const productNameElement = $(".product-title");
  const productName = productNameElement.text().trim();
  // 在庫数の要素を特定して取得
  const stockElement = $(".product-details__block p");
  let stockCount = -1; // 在庫数が見つからない場合のデフォルト値

  // 各要素のテキストを順番にチェックして、在庫数を見つける
  stockElement.each((index, element) => {
    const text = $(element).text().trim();
    if (text.includes("在庫数:")) {
      stockCount = Number(text.replace("在庫数:", "").trim());
      return; // 在庫数を見つけたらループを終了
    }
  });
  // 画像のURLを特定して取得
  const imageElement = $(".product-gallery--image-background img");
  const imageUrl = ensureHttpsPrefix(imageElement.attr("src"));

  // 「委託販売商品」というワードが含まれる<p>タグの中にある<a>タグの内容を取得
  let creator = "";
  const pElements = $("p");
  pElements.each((index, element) => {
    const pText = $(element).text().trim();
    if (pText.includes("受託販売商品")) {
      creator = $(element).find("a").text().trim();
      return; // <p>タグ内の<a>タグの内容を取得したらループを終了
    }
  });

  // リスト表示の中にある<a>タグのリンク文字を配列にまとめる
  const tags: string[] = [];
  const listItems = $(".product-tags li a");
  listItems.each((index, element) => {
    const linkText = $(element).text().trim();
    tags.push(linkText);
  });

  // データをオブジェクトに格納
  console.log({
    productName,
    stockCount,
    imageUrl,
    creator,
    tags
  });

今回のアプリはFirebase Functionを活用して作っています。

Nefry Cellular Bee(nRF9160 Xbee互換基板)

LTEモジュールなど販売しています。興味があればぜひ!

Discussion