全国送料一律500円
各種支払
実店舗案内
 

ショップサーブAPI(旧:Eストア)をCurlを使って在庫情報を取得する

ショップサーブAPIをCurlで各種在庫情報を取得する!




時短のために、ショップサーブAPIを叩いて楽したい!!!



こんにちは、薬師真珠のネット通販担当者です。


在庫管理のために、いちいちショップサーブの在庫を
管理ページを開いて確認するのがめんどくさくなったので、APIを叩く方法を模索したところ、
公式APIがありましたので、忘備録として少し残しておきます。
なお、今回はWindowsPowerShellだとCurlを使用した場合、
受け入れる位置指定パラメータが見つからないと怒られたので、
今回のコマンドはすべてUbuntu20.04上で実行したコマンドになります。
おそらく、Linux系列であれば今回のコマンドは実行できるものと思われます。


また、公式のAPIはPyrhonでHTTP Requestを行った場合、以下のようなエラーが現時点で発生します。

※2024年4月24日にGoogle Colabで再現確認しています。

SSLError: HTTPSConnectionPool(host='management.api.shopserve.jp', port=443):
Max retries exceeded with url: /v2/items/_search (Caused by SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED]
unsafe legacy renegotiation disabled (_ssl.c:1007)')))




このエラーは2024年4月24日現在、CVE-2009-3555の対策のために、
Legacy Unsafe Renegotiationが無効になっていることに起因しています。
何とかしようと思えば、セキュリティを下げることによって可能ですが、
セキュリティリスクが増大するために、ショップサーブ側のサーバー対策待ちとなります。

CVE-2009-3555についてはこちら

本題のショップサーブAPIを使用した商品在庫情報の取得に関してですが、
ショップサーブのAPIキーを発行後、Ubuntu側で以下のようなコマンドを実行します。

ショップサーブAPIについてはこちら

ショップサーブ側のAPIリファレンスは初心者には少し読みずらいと思いますが、
読み解きながら説明していきます。


curl -X POST https:// ショップサーブのユーザー名:ショップサーブのAPIキー(マネジャー認証キー)@management.api.shopserve.jp/v2/items/_search -H "Content-Type: application/json" -d '{"from":0, "sort": {"type":"StockQuantity"},"filters":[{"item_code":"10","range_of_item_price":{"min":5000,"max":10000}}]}'

上記のコマンドをLinuxで実行すると、商品取得開始位置が0
在庫数順に並び変えを行う・商品番号に10を含む・金額が¥5,000円~10,000円
となる商品が抽出されます。

これは、"from":0 が商品取得開始位置が0
"sort": {"type":"StockQuantity"} が在庫数順に並び変えを行う
"filters": が商品のフィルタを行う
"item_code":"10" が商品番号に「10」を含む
"range_of_item_price":{"min":5000,"max":10000] が
商品の最低値段がが5,000以上かつ最高額が10,000まで
という条件検索となります。


上記の条件で検索すると件数が多くなり、塗りつぶしがめんどくさいため、
参考程度に高額商品を絞り込んだCurlコマンドの実行結果を載せておきます。

下記のコマンドは70,000以上10,000円以下の商品の有無と在庫数確認

※店舗情報があるため、一部塗りつぶしています。


上記の2連グラデーションネックレスはこちら



上記のように、コマンドを実行することで、
いちいち在庫管理ページを開かなくても、
商品絞り込みや在庫数の確認ができるようになりました!
なお、そこそこめんどくさくて躓いた(特に認証関連)ので
ほぼ自分用ですが残しておきます。
また、API仕様書を見るともう少し踏み込んだことも可能ですので、
頑張ってください。




今回参考にしたサイト
ショップサーブAPI公式リファレンス(要ダウンロード)
Deepl 翻訳
Google Colab
Google 翻訳
Hatena Blog curlを使うときのデータの渡し方 @swfz
Qitta curl コマンド 使い方メモ @yasuhiroki A10 Lab Inc.
知的好奇心 Pythonでcurlコマンドと同等の処理を実行する方法
JniimiLab エラーSSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED
への対応

Stackoverflow SSL error unsafe legacy renegotiation disabled
Convert curl commands to Python, JavaScript and more
※CurlコマンドPython形式などへ変換してくれるサイト

上記のサイトはCurlコマンドが間違っているとエラーで出るため、
確認のために使用


Synology Container Manager(Docker Hub)上に永続化フォルダを作成して、Grafanaを実行する

Synology Container Manager(Docker Hub)上に
永続化フォルダを作成して、Grafanaを実行する

前回の更新から少し時間が経ちましたが、お久しぶりです。
薬師真珠のネット通販担当です。
最近は社内催事・社内サーバ・各種社内機材の更新等でまっったく、
新商品が追加できていませんでした。 申し訳ありません・・・・🥺

さて、今回のテーマは、

「GrafanaをSynology上で動かそう!」

です!

    目次:

    0.初めに

  1. 永続化フォルダの作成

  2. フォルダに権限なしで起動した場合

  3. フォルダへ権限をつける

  4. 起動

  5. Grafanaへのアクセス

0.初めに

Q.なんで作ったの?

A.自分がやろうとして超絶各種設定で沼ったから
あと、たまにHTML・CSS触っとかないと忘れるから
(本文内ほぼHTML・CSS手打ち)

※padding(内側余白)とline-height(行間)を併用する場合<p>タグで囲まないと併用できなかった

    注意事項

  1. Synology DS1621+ DSM 7.2.1-69057 Update 4上で
    Grafanaのプログラムを実行しています。

  2. Synology Container Managerのインストール等は割愛します。

  3. また、少し間違えるとNASのデータを吹っ飛ばす可能性や
    セキュリティホールになる可能性があります。

  4. 入力するコマンドをよく理解した上で実行してください。

  5. 使用したGrafanaのイメージは"grafana/grafana"です

1.永続化フォルダの作成

SynologyのFile StationでDockerのファイルをなければ作成する。
また、目的のDokcerで使用するフォルダの作成を行う(今回はgrafana-2を使用)

今回使用するフォルダは下記画像のgrafana-2を使用していきます。

今回Grafanaで使用するフォルダ

ただし、そのままの状態でもGrafanaは起動しますが、
今回は永続化フォルダを作成し、
永続化フォルダ上に展開することを目標とします。


Grafanaの詳細設定



上記の構築設定のボリューム設定が
Dockerの"-v"オプション(volumeオプション)になります。


ただし、何も追加設定をせずに、この状態でコンテナを起動しようとすると、
Synology上で下記のようなエラーを出して、コンテナが強制停止します。

Grafanaの強制終了エラー


下記は、強制停止したコンテナのエラーログですが、
こちらのエラーログを見ると、
Synology上の"Docker/Grafana-2"のフォルダに権限がないので
強制停止していることがログからわかります。

Grafanaの起動エラーログ




このエラーを回避するためには、
該当するフォルダに読み書き権限を与える必要があります。
そのため、以下の画像のようにフォルダの詳細設定より、
Everyoneに対して、読み書きの権限をつけてあげると動くようになります。

永続化フォルダで使用するフォルダ権限に関して


永続化フォルダで使用するフォルダ権限に関して2


上記のようにフォルダに読み書き権限をつけて再度コンテナを実行すると、
"Docker/Grafana-2"のフォルダ上にいろいろ展開されているのを確認できます。

コンテナ起動中のフォルダ内の様子

コンテナ起動中のファイル展開ログ






ここまで来たら、あとはコンテナの起動を待つだけなのですが、
ほかのコンテナ(Prometheusやsnmp-explorer)と違い、
初回の起動には結構時間がかかりました(およそ5分ほど)
これに関してはログを確認するとよくわかるのですが、
大量のファイルを展開する必要があるためだと思われます。
(下記の画像参考)
実際に起動しないなぁ・・・と思ってなんども確認した結果、
初回のファイル展開中でした(3敗)

およそ5分後にGrafanaが立ち上がりますので、
先ほど指定したポートにアクセス(今回は:3010)すると
Grafanaの初回ログインページが立ち上がります。

Grafana初回ログインページ


Dockerよりインストールした場合はユーザー名とパスワードは初期設定では以下の通りとなっています。
ユーザー名:admin
パスワード:admin

Grafana初回ログイン入力



では!Grafanaを頑張って使っていきましょう!

私はまだうまく扱えません!

X(旧:twitter・ツイッター)への自動画像投稿について

皆さま初めまして。
ここ数年薬師真珠のネット通販を担当している担当者です。



通販やホームページ管理の中の人が私に変わって
ここ数年店長ページはまっっったく更新してしてなったのですが、
いくつか書きたいネタが出来、本業のほうで書くのもあれなのでこちらで書いていこうと思います。


さて、現在薬師真珠の𝕏(旧:twitter)はBOTが動いており、30分~1時間程度で
ランダムな画像と決め打ちした文字を自動的につぶやいております。
入社した最初、𝕏(旧:twitter・ツイッター)のアカウントを作成したのですが、定期的に投稿することがめんどk・・・大変だったので、
PythonとGoogleColabを使用して自動化出来たらいいやと考えて自動化しました。
なお、実際にはexe化しており、VM上で24/365で稼働しています。


また、こちらを作成するにあたり、GoogleColabで動くサンプルプログラムを作成しましたので、公開します。
GoogleDriveのimgフォルダ内に画像を入れておけば、自動投稿してくれるプログラムになります。



また、このプログラムを使用することにおける不具合や不都合については一切の責任を負いません。
担当者が好き勝手にプログラムを書いているだけです。



また、APIキーやアクセストークン等は今回は理解されているも物として記述しています。



1行目
※最初に必要なプログラム群をColabにインストール


 
pip install requests_oauthlib tweepy
 

2行目
※投稿プログラム本体

 

import tweepy
import glob
import random
from requests_oauthlib import OAuth1Session

#ツイッタランド認証部分
consumer_key = 'あなたのAPIキー'
consumer_secret = 'あなたのAPIシークレット'
access_token = 'あなたのアクセストークン'
access_token_secret = 'あなたのアクセスシークレット'

# 画像投稿用(※旧APIで画像投稿を行います TwitterAPI Ver1.1)
auth = tweepy. OAuthHandler ( consumer_key, consumer_secret)
auth. set_access_token(access_token, access_token_secret)

# 旧APIで投稿するための設定2
api = tweepy.API (auth)

#API V2で投稿するための設定
client = tweepy.Client(
    consumer_key = consumer_key,
    consumer_secret = consumer_secret,
    access_token = access_token,
    access_token_secret = access_token_secret
)

#画像準備 ランダム画像決定部分
file_path = '/content/drive/MyDrive/img'
filesr = glob.glob("/content/drive/MyDrive/img/*")
data=random.choice(filesr)
print(data)

# 以下、ツイート本体

#詳細な投稿用画像ファイルパス
image_path = data

# 投稿用メッセージ
media = api. media_upload (filename=image_path)
client. create_tweet (text=('ここにメッセージをいれると投稿できます。なお、改行はnです。'), media_ids= [media.media_id])

print("投稿終了!")

 

実行結果



となり、自動投稿が可能です。
使用しているものはもう少し手を加えていますが、
手抜き投稿だけであればこれぐらいのコードでTwitterへの自動投稿が可能です。


次回もお楽しみに!

新年度!


先週末、公園には綺麗な桜が咲いていました

そして4月1日。
新年度のスタートは昨年に続き
フレッシュな新人さんの姿はほとんど見かけません

長引くコロナ渦で
通勤の在り方も様々な工夫をされているんでしょうね

以前ビーズ講師の活動をしていたころから合わせると
心斎橋に20年近く通っていますが
初めての景色です

でも何年たっても初心の気持ちは持ち続けたいです

今日は
その気持ちを表した?
純白のネックレス!をチョイスしました








↓↓↓ 薬師真珠ホームページ ↓↓↓






↓↓↓ ショップチャンネル 「ゑんの華」 ↓↓↓ 




「第16回大阪アジアン映画祭」

「第16回大阪アジアン映画祭」

地下鉄内の中吊りポスターを見かけて
今年も始まるなぁと
ほっとしました

昨年は開催直前、コロナの影響で
急遽いろいろな対策を練りつつの開催で
最後までドキドキしました

そんな中での今回の準備も
とても大変だったと思います


今年も、いろいろ条件付きでの開催となりそうですが
楽しみにしています

今年も薬師真珠は
「第16回大阪アジアン映画祭」に
協賛させていただきます


「第16回大阪アジアン映画祭」
3月5日(金)~3月14日(日)








↓↓↓ 第16回大阪アジアン映画祭 ↓↓↓










↓↓↓ 薬師真珠ホームページ ↓↓↓







↓↓↓ ショップチャンネル 「ゑんの華」 ↓↓↓ 




商売繁盛! 疫病退散


毎年恒例の

『商売繁盛!』の御練り

今年は残念ながらありませんでした

とても静かな えべっさん


笹にも「疫病退散」の文字が


明るく安心な世の中に早くなりますように
気持ちを込めてお飾りしました







↓↓↓ 薬師真珠ホームページ ↓↓↓







↓↓↓ ショップチャンネル 「ゑんの華」 ↓↓↓ 



本年も宜しくお願いいたします


2021年がスタートしました

自粛ムードのお正月休みでしたが
あっという間に年が明けました

今年も早々から厳しい世の中ですが

皆さまどうぞお気をつけてお過ごしくださいませ









↓↓↓ 薬師真珠ホームページ ↓↓↓








↓↓↓ ショップチャンネル 「ゑんの華」 ↓↓↓ 

















2020年お世話になりました



毎年この時期御堂筋は夜のライトアップがあり
クリスマスが近づくと
より一層華やかになるんですが

同じ景色もいつもとは何か違うように感じます

見えない恐怖と戦った一年
来年は、明かりがさしてくれることを祈るばかりです


薬師真珠は
12/25(金)~1/4(月)お休みをいただきます



2021年は 
明るく笑顔あふれる一年でありますように
こころよりお祈り申し上げます








↓↓↓ 薬師真珠ホームページ ↓↓↓



↓↓↓ ショップチャンネル 「ゑんの華」 ↓↓↓ 












只今セール中!

12月に入ってスタートしましたファミリーセール

たくさんの商品をご用意いたしております!





全商品20%引き!

びっくりです

ぜひ期間内楽しんでくださいませ

薬師真珠 『ファミリーセール』

12月1日(火)~ 12月4日(金)10:00~17:00

12月5日(土)10:00~17:00

Thank You セール!

今年は新型コロナの影響で
見えない恐怖を感じ、我慢し、もう11月です。

そんな中、薬師真珠ではこれまでの感謝の気持ちを込めて
ファミリーセールを開催することになりました!
限られた時間ですが、お買い物を楽しんでいただけたらと思います


 薬師真珠 『ファミリーセール』

12月1日(火)~ 12月4日(金)10:00~17:00

12月5日(土)10:00~16:00




期間内、どなたもご来場いただけますが
感染予防といたしまして
ご予約をいただきました方を優先させていただきます

ご理解のほどよろしくお願いいたします


社員一同、皆様のご来場、心よりお待ちしております!



↓↓↓ 薬師真珠ホームページ ↓↓↓







↓↓↓ ショップチャンネル 「ゑんの華」 ↓↓↓ 










ページトップへ