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へのリクエストに失敗しました。";
}
?>
おおまかな動作説明
- APIキーを取得し、コード内の
$api_key
変数に設定します。 - データを保存するMySQLデータベースの接続情報を提供し、
$db
オブジェクトを適切に設定します。 - 必要に応じて、パラメータ(
$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のメリット。。。
- データベースの接続と切断: PDOはデータベースに接続するためのメソッドを提供し、データベースとの接続を確立し、操作が完了したら切断することができます。
- 異なるデータベースドライバのサポート: PDOは多くのデータベースドライバをサポートしており、同じコードを使用して異なるデータベースシステムと連携できます。
- プリペアドステートメント: プリペアドステートメントを使用してSQLインジェクションを防ぐことができます。プリペアドステートメントはSQLクエリの事前コンパイルを行い、パラメータ化されたクエリを実行する際にセキュリティを向上させます。
- トランザクションサポート: PDOはトランザクションをサポートし、データベース操作の一連のクエリを一つのトランザクションとしてまとめ、エラーが発生した場合にロールバックすることができます。
- エラーハンドリング: PDOはエラーハンドリング機能を提供し、データベース操作に関連するエラーをキャッチして適切な処理を行うことができます。
- クエリの実行とデータの取得: PDOを使用してSQLクエリを実行し、データベースから結果セットを取得することができます。