ChatGPTで作成:DMM Web APIを使って人気商品のサンプル画像を取得、保存するPythonコード

ChatGPT

DMM Web APIを使ってサンプル画像を取得、保存するPythonコードを作成

こちらの記事でDMM Web APIで商品情報を取得するPythonのサンプルコードを作りましたが、続いて、人気商品のサンプル画像を取得、保存するPythonコードを作成してみました。

こちらは見事、基本、修正することなく使えるコードを作ってもらえました。

ChatGPT、賢過ぎる!!

ChatGPTへの質問と回答

依頼した内容と得た回答は以下です。

質問

DMMのWeb APIを使って,商品のタイトルと、サンプル画像、ページ上の画像を取得し、商品名のフォルダに保存するPythonのコードのサンプルを作ってもらうことはできますか

ChatGPTの回答

DMMのWeb APIを使用して商品のタイトル、サンプル画像、およびページ上の画像を取得し、それらを商品名のフォルダに保存するPythonコードのサンプルを提供します。このスクリプトは次のステップで構成されます:

  1. DMM APIから商品情報を取得する。
  2. 取得した商品情報から画像URLを抽出する。
  3. 画像をダウンロードし、商品名に基づいたフォルダに保存する。

以下のサンプルコードは、これらのステップを実装する方法を示しています。この例では、requestsライブラリを使用してHTTPリクエストを行い、ospathlibライブラリを使用してファイルシステム上での操作を行います。必要なライブラリがまだインストールされていない場合は、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_IDAFFILIATE_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

WEB SERVICE BY DMM.com

コメント

タイトルとURLをコピーしました