アフィリエイトサイト用に、DMM.com の商品紹介APIからデータを取得しMySQLデータベースに保存するPHPコード

API

DMM.comのWEBAPIを使う案件があったのでメモです。ここではcURLを使用してFANZA APIからデータを取得するPHPスクリプトです。

目次

DMMのWebサービスAPIで商品情報を取得しMySQLに保存するPHPコード

<?php
// DMM.com APIエンドポイントとAPIキーを設定
$api_url = 'https://api.dmm.com/affiliate/v3/ItemList';
$api_key = 'あなたのAPIキー';

// パラメータを設定
$params = array(
    'api_id' => 'あなたのAPI ID',
    'affiliate_id' => 'あなたのアフィリエイトID',
    'site' => 'DMM.co.jp',
    'service' => 'digital',
    'floor' => 'videoa',
    'hits' => 10, // 取得したいアイテム数
);

// cURLを初期化
$ch = curl_init($api_url . '?' . http_build_query($params));

// cURLオプションを設定
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// cURLリクエストを実行
$response = curl_exec($ch);

// cURLセッションを閉じる
curl_close($ch);

if ($response) {
    // JSONレスポンスを配列に変換
    $data = json_decode($response, true);

    if (isset($data['result'])) {
        // MySQLデータベースに接続
        $db = new mysqli('ホスト', 'ユーザー名', 'パスワード', 'データベース名');

        if ($db->connect_error) {
            die("MySQL接続エラー: " . $db->connect_error);
        }

        // 商品データをMySQLデータベースに保存
        foreach ($data['result']['items'] as $item) {
            $title = $item['title'];
            $price = $item['prices']['price'];
            $affiliate_url = $item['affiliateURL'];

            $sql = "INSERT INTO products (title, price, affiliate_url) VALUES ('$title', '$price', '$affiliate_url')";

            if ($db->query($sql) === true) {
                echo "商品がデータベースに追加されました。";
            } else {
                echo "エラー: " . $sql . "<br>" . $db->error;
            }
        }

        // MySQL接続を閉じる
        $db->close();
    } else {
        echo "DMM.com APIからデータを取得できませんでした。";
    }
} else {
    echo "DMM.com APIへのリクエストに失敗しました。";
}
?>

おおまかな動作説明

  1. APIキーを取得し、コード内の$api_key変数に設定します。
  2. データを保存するMySQLデータベースの接続情報を提供し、$dbオブジェクトを適切に設定します。
  3. 必要に応じて、パラメータ($params変数)を調整してAPIから取得する商品の数や他の検索条件を変更します。

実際のプロジェクトではエラー処理やセキュリティ対策をして使います。

PHPのPDOを使ってDMMの商品情報APIをMySQLに保存する

MySQLにデータ保存する際に、最近では PHP Data Objects(PDO)を使う事が多いと思います。PDOはPHPプログラムとさまざまなデータベースシステムを連携させるためのデータベースアクセス抽象化ライブラリです。

PDOを使うことで異なるデータベースシステム(MySQL、SQLite、PostgreSQLなど)との接続と対話を単一の一貫した方法で行うためのインターフェースを提供します。これにより、データベースに依存しないコードを記述しやすくなり、コードの再利用性や保守性が向上します。ただし、PDOのメソッドが最終的にどのようなSQL文になるのか慣れるまで大変かもしれません。単純なCRUDならPODの方がよいかもしれません。

<?php
// DMM.com APIエンドポイントとAPIキーを設定
$api_url = 'https://api.dmm.com/affiliate/v3/ItemList';
$api_key = 'あなたのAPIキー';

// パラメータを設定
$params = array(
    'api_id' => 'あなたのAPI ID',
    'affiliate_id' => 'あなたのアフィリエイトID',
    'site' => 'DMM.co.jp',
    'service' => 'digital',
    'floor' => 'videoa',
    'hits' => 10, // 取得したいアイテム数
);

try {
    // データベースに接続
    $db = new PDO('mysql:host=ホスト;dbname=データベース名', 'ユーザー名', 'パスワード');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // cURLを初期化
    $ch = curl_init($api_url . '?' . http_build_query($params));

    // cURLオプションを設定
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // cURLリクエストを実行
    $response = curl_exec($ch);

    // cURLセッションを閉じる
    curl_close($ch);

    if ($response) {
        // JSONレスポンスを配列に変換
        $data = json_decode($response, true);

        if (isset($data['result'])) {
            $items = $data['result']['items'];

            $stmt = $db->prepare("INSERT INTO products (title, price, affiliate_url) VALUES (:title, :price, :affiliate_url)");

            foreach ($items as $item) {
                $title = $item['title'];
                $price = $item['prices']['price'];
                $affiliate_url = $item['affiliateURL'];

                $stmt->bindParam(':title', $title);
                $stmt->bindParam(':price', $price);
                $stmt->bindParam(':affiliate_url', $affiliate_url);

                if ($stmt->execute()) {
                    echo "商品がデータベースに追加されました。";
                } else {
                    echo "エラー: " . $stmt->errorInfo()[2];
                }
            }
        } else {
            echo "DMM.com APIからデータを取得できませんでした。";
        }
    } else {
        echo "DMM.com APIへのリクエストに失敗しました。";
    }
} catch (PDOException $e) {
    echo "データベースエラー: " . $e->getMessage();
}

多少面倒ではありますが、セキュリティと拡張性を向上させるのに役立ちますね。
そのほかPDOのメリット。。。

  1. データベースの接続と切断: PDOはデータベースに接続するためのメソッドを提供し、データベースとの接続を確立し、操作が完了したら切断することができます。
  2. 異なるデータベースドライバのサポート: PDOは多くのデータベースドライバをサポートしており、同じコードを使用して異なるデータベースシステムと連携できます。
  3. プリペアドステートメント: プリペアドステートメントを使用してSQLインジェクションを防ぐことができます。プリペアドステートメントはSQLクエリの事前コンパイルを行い、パラメータ化されたクエリを実行する際にセキュリティを向上させます。
  4. トランザクションサポート: PDOはトランザクションをサポートし、データベース操作の一連のクエリを一つのトランザクションとしてまとめ、エラーが発生した場合にロールバックすることができます。
  5. エラーハンドリング: PDOはエラーハンドリング機能を提供し、データベース操作に関連するエラーをキャッチして適切な処理を行うことができます。
  6. クエリの実行とデータの取得: PDOを使用してSQLクエリを実行し、データベースから結果セットを取得することができます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次