DMM Web APIを使ってサンプル画像を取得、保存するPythonコードを作成
こちらの記事でDMM Web APIで商品情報を取得するPythonのサンプルコードを作りましたが、続いて、人気商品のサンプル画像を取得、保存するPythonコードを作成してみました。
こちらは見事、基本、修正することなく使えるコードを作ってもらえました。
ChatGPT、賢過ぎる!!
ChatGPTへの質問と回答
依頼した内容と得た回答は以下です。
質問
DMMのWeb APIを使って,商品のタイトルと、サンプル画像、ページ上の画像を取得し、商品名のフォルダに保存するPythonのコードのサンプルを作ってもらうことはできますか
ChatGPTの回答
DMMのWeb APIを使用して商品のタイトル、サンプル画像、およびページ上の画像を取得し、それらを商品名のフォルダに保存するPythonコードのサンプルを提供します。このスクリプトは次のステップで構成されます:
- DMM APIから商品情報を取得する。
- 取得した商品情報から画像URLを抽出する。
- 画像をダウンロードし、商品名に基づいたフォルダに保存する。
以下のサンプルコードは、これらのステップを実装する方法を示しています。この例では、requests
ライブラリを使用してHTTPリクエストを行い、os
とpathlib
ライブラリを使用してファイルシステム上での操作を行います。必要なライブラリがまだインストールされていない場合は、pip install requests
を使用してインストールしてください。
import os
import requests
from pathlib import Path
# APIエンドポイントと認証情報
API_ENDPOINT = 'https://api.dmm.com/affiliate/v3/ItemList'
API_ID = 'your_api_id'
AFFILIATE_ID = 'your_affiliate_id'
# リクエストパラメータ
params = {
'api_id': API_ID,
'affiliate_id': AFFILIATE_ID,
'site': 'DMM.com',
'service': 'mono',
'floor': 'dvd',
'sort': 'date',
'hits': 5, # 取得する商品数
}
def save_image(url, path):
"""画像を指定したパスにダウンロードして保存する"""
response = requests.get(url)
response.raise_for_status()
with open(path, 'wb') as file:
file.write(response.content)
try:
# APIリクエストを送信
response = requests.get(API_ENDPOINT, params=params)
response.raise_for_status()
data = response.json()
items = data['result']['items']
for item in items:
# 商品名でフォルダを作成
folder_name = item['title'].replace('/', '-') # フォルダ名に使用できない文字を置換
folder_path = Path(folder_name)
folder_path.mkdir(exist_ok=True)
# 商品ページの画像を保存
if 'imageURL' in item and 'large' in item['imageURL']:
image_url = item['imageURL']['large']
save_image(image_url, folder_path / 'product_page.jpg')
# サンプル画像を保存
if 'sampleImageURL' in item and 'sample_s' in item['sampleImageURL']:
for i, sample_url in enumerate(item['sampleImageURL']['sample_s']['image'], start=1):
save_image(sample_url, folder_path / f'sample_{i}.jpg')
print(f"商品 '{folder_name}' の画像を保存しました。")
except requests.exceptions.RequestException as e:
print(f"リクエスト中にエラーが発生しました: {e}")
このコードを実行する前に、API_ID
とAFFILIATE_ID
をあなたのDMM APIの認証情報に置き換えてください。また、このコードは商品名をフォルダ名として使用していますが、商品名にファイルシステムに不適切な文字が含まれている場合は、それらを適切な文字に置換または削除する処理が必要です(この例では、/
を-
に置換しています)。
このスクリプトは、指定したパラメータに基づいてDMMから最初の数件の商品情報を取得し、各商品のメイン画像とサンプル画像をダウンロードして、商品名をタイトルとしたフォルダ内に保存します。サンプル画像や商品ページの画像が存在しない場合は、その部分はスキップされます。
実行したコードとその出力
以下が実行したコードです。(API_IDなど認証情報は消しています。)
基本、リクエストパラメータを取得したい情報に変えたのみです。
実行コード
import os
import requests
from pathlib import Path
# APIエンドポイントと認証情報
API_ENDPOINT = 'https://api.dmm.com/affiliate/v3/ItemList'
API_ID = 'xxxxxx'
AFFILIATE_ID = 'xxxxxx'
# リクエストパラメータ
params = {
'api_id': API_ID,
'affiliate_id': AFFILIATE_ID,
'site': 'DMM.com', # 'DMM.com' または 'DMM.co.jp'
'service': 'ebook', # 利用したいサービス名
'floor': 'comic', # 利用したいフロア名
'sort': 'rank', # ソート順
'hits': 10, # 取得する商品数
}
def save_image(url, path):
"""画像を指定したパスにダウンロードして保存する"""
response = requests.get(url)
response.raise_for_status()
with open(path, 'wb') as file:
file.write(response.content)
try:
# APIリクエストを送信
response = requests.get(API_ENDPOINT, params=params)
response.raise_for_status()
data = response.json()
items = data['result']['items']
for item in items:
# 商品名でフォルダを作成
folder_name = item['title'].replace('/', '-') # フォルダ名に使用できない文字を置換
folder_path = Path(folder_name)
folder_path.mkdir(exist_ok=True)
# 商品ページの画像を保存
if 'imageURL' in item and 'large' in item['imageURL']:
image_url = item['imageURL']['large']
save_image(image_url, folder_path / 'product_page.jpg')
# サンプル画像を保存
if 'sampleImageURL' in item and 'sample_s' in item['sampleImageURL']:
for i, sample_url in enumerate(item['sampleImageURL']['sample_s']['image'], start=1):
save_image(sample_url, folder_path / f'sample_{i}.jpg')
print(f"商品 '{folder_name}' の画像を保存しました。")
except requests.exceptions.RequestException as e:
print(f"リクエスト中にエラーが発生しました: {e}")
実行結果
取得した画像の一部です。
DMM APIリファレンス
ちなみに、DMMのweb Apiのリファレンスは以下です。
リンク:https://affiliate.dmm.com/api/v3/itemlist.html
コメント