今回は、pythonを使ってDMMから商品の情報を取得する処理のプログラミングです。
ここの部分の処理ですね。

DMMから情報取得する仕様の確認
DMMへの接続は、「DMM Webサービス」の利用ガイドを参照してREST APIを使って接続します。
DMMの提供するAPIは、次の7種類が用意されています。とりあえず商品情報APIを使ってデータを取得してみます。
提供API | API説明 |
---|---|
商品情報API | DMM.com の商品の情報を取得 |
女優検索API | 女優情報を取得 |
ジャンル検索API | ジャンル一覧を取得 |
メーカー検索API | メーカー一覧を取得 |
シリーズ検索API | シリーズ一覧を取得 |
作者検索API | 作者一覧を取得 |
フロア検索API | フロア一覧を取得 |
商品情報APIの仕様を確認
APIの動作仕様は、左下メニューの「APIver3.0リファレンス」から確認できます。

リクエストURLから手動でAPIをリクエストして結果を確認しましょう。
使用するリクエストURLの確認
まずは、リファレンスを確認して、使用するURLを確認します。

リファレンスページのリクエストURLがREST APIで接続に行くエンドポイントになります。これを参考にリクエストパラメータを修正してデータを取得します。
必須パラメータの修正
リクエストパラメータの表を参照して、API発行時に必要なパラメータを修正します。
修正が必要なパラメータは、この3つです。

APIIDの修正
まずは、APIIDの修正です。
https://api.dmm.com/affiliate/v3/ItemList?api_id=[APIID]&affiliate_id=[アフィリエイトID]&site=FANZA&service=digital&floor=videoa&hits=10&sort=date&keyword=%e4%b8%8a%e5%8e%9f%e4%ba%9c%e8%a1%a3&output=json
APIIDはアフィリエイトアカウント作成時に発行されたIDで左上に画面左上に確認用のボタンがあります。まだ登録していない人は、こちらの記事を参照して登録しちゃってください。


https://api.dmm.com/affiliate/v3/ItemList?api_id=uVusadkefJDwfdsasef1aRtF&affiliate_id=[アフィリエイトID]&site=FANZA&service=digital&floor=videoa&hits=10&sort=date&keyword=%e4%b8%8a%e5%8e%9f%e4%ba%9c%e8%a1%a3&output=json
アフィリエイトIDの修正
続いてアフィリエイトIDを修正します。
https://api.dmm.com/affiliate/v3/ItemList?api_id=uVusadkefJDwfdsasef1aRtF&affiliate_id=[アフィリエイトID]&site=FANZA&service=digital&floor=videoa&hits=10&sort=date&keyword=%e4%b8%8a%e5%8e%9f%e4%ba%9c%e8%a1%a3&output=json
アフィリエイトIDは登録情報メニューから確認できます。Webサービスの登録を行っていれば、末尾990番のアフィリエイトIDが確認できます。

アフィリエイトIDは末尾990のIDを指定します。
適当な文字でも発行はできます。そこから報酬が発生しないだけですが、動作確認であれば、IDはなくても問題ありません。
https://api.dmm.com/affiliate/v3/ItemList?api_id=uVusadkefJDwfdsasef1aRtF&affiliate_id=XXXX-990&site=FANZA&service=digital&floor=videoa&hits=10&sort=date&keyword=%e4%b8%8a%e5%8e%9f%e4%ba%9c%e8%a1%a3&output=json
サイト名変更
3つ目はサイト名の変更です。DMMは一般サイトのDMM.comとアダルト用サイトのFANZAの2サイトのいずれかを選択します。
https://api.dmm.com/affiliate/v3/ItemList?api_id=uVusadkefJDwfdsasef1aRtF&affiliate_id=XXXX-990&site=FANZA&service=digital&floor=videoa&hits=10&sort=date&keyword=%e4%b8%8a%e5%8e%9f%e4%ba%9c%e8%a1%a3&output=json
リクエストAPIのサンプルがデフォルトでFNAZAになっていますので、DMM.comに修正します。
https://api.dmm.com/affiliate/v3/ItemList?api_id=uVusadkefJDwfdsasef1aRtF&affiliate_id=XXXX-990&site=DMM.com&service=digital&floor=videoa&hits=10&sort=date&keyword=%e4%b8%8a%e5%8e%9f%e4%ba%9c%e8%a1%a3&output=json
手動でリクエストを出してみる
では、パラメータを変更したURLを使ってリクエストを出してみます。
ブラウザのURL欄にリクエストURLを貼り付けてアクセスしてみます。

一応成功(status=200)です。でも、取得したデータ数は0件(count=0)。文法的に問題ないということです。
では、キーワードパラメータなど不要なパラメータを削除して再度リクエストしてみます。
修正前のリクエストURL
https://api.dmm.com/affiliate/v3/ItemList?api_id=uVusadkefJDwfdsasef1aRtF&
affiliate_id=XXXX-990&site=DMM.com&service=digital&floor=videoa&hits=10&sort=date&keyword=%e4%b8%8a%e5%8e%9f%e4%ba%9c%e8%a1%a3&output=json
修正後のリクエストURL
https://api.dmm.com/affiliate/v3/ItemList?api_id=uVusadkefJDwfdsasef1aRtF&affiliate_id=XXXX-990&site=DMM.com&service=digital&hits=10&sort=date&output=json
結果、データの取得に成功しています。下記では、全データ数が50000件あり、そのうち10件を取得したことを示す結果が出力されています。
first_positionとは、全データ数の何番目のデータから取得するかを指定するパラメータです。

ちなみに、アフィリエイトIDを末尾 001 にしてリクエストすると、エラーが返ってきます。そのほかにも文法上の問題がある場合は、satus:400のエラーが返ってきます。

まずは、これをPythonを使って実装してみます。
Python使ってDMMからデータを取得する
DMMからデータを取得するための作業ステップ
- DMMに接続
- DMMからデータを取得
ステップにするとたった2ステップ。それぞれの機能毎にコーディングしていきます。
DMMに接続
リクエストURLを書き換えて接続用のURLを作成します。手動で実施した修正と同じです。あなたのIDに合わせて修正してください。
https://api.dmm.com/affiliate/v3/ItemList?api_id=[APIID]&affiliate_id=[アフィリエイトID]&site=DMM.com&service=digital&floor=videoa&hits=10&sort=date&keyword=%e4%b8%8a%e5%8e%9f%e4%ba%9c%e8%a1%a3&output=json
DMMからデータを取得
pythonでデータを取得するコードです。
#ライブラリインポート
import requests
import json
from pprint import pprint
#APIID
API_ID='uVurvdL*******F'
#アフィリエイトID
AFF_ID = 'XXXX-990'
#エンドポイントURL
url="https://api.dmm.com/affiliate/v3/ItemList?api_id="+API_ID+"&affiliate_id="+AFF_ID+"&site=DMM.com&hits=10&output=json"
#リクエスト実行
jsondata=requests.get(url).json()
#取得結果出力
pprint(jsondata)
エンドポイントURL
API_IDとAFF_IDを使ってURLを作成しています。hits=10は検索結果を10件抽出するというパラメータ。output=jsonはJSON形式で取得することを指定しています。
リクエスト実行
リクエストをrequests 関数を使って呼び出して、結果をjsondata に格納しています。
取得結果出力
格納した結果は、pprintを使って表示させています。出力結果は以下の通り
{'request': {'parameters': {'affiliate_id': 'XXXX-990',
'api_id': 'uVur*************aRtF',
'hits': '10',
'output': 'json',
'site': 'DMM.com'}},
'result': {'first_position': 1,
'items': [{'URL': 'https://www.dmm.com/mono/hobby/-/detail/=/cid=cha_toumusical1746/',
'affiliateURL': 'https://al.dmm.com/?lurl=https%3A%2F%2Fwww.dmm.com%2Fmono%2Fhobby%2F-%2Fdetail%2F%3D%2Fcid%3Dcha_toumusical1746%2F&af_id=XXXX-990&ch=api',
'category_name': 'ホビー通販',
'content_id': 'cha_toumusical1746',
'date': '2023-04-17 10:00:00',
'directory': [{'id': 4944, 'name': 'グッズ'},
{'id': 5046, 'name': 'キャラクター雑貨'},
{'id': 5479, 'name': 'その他_キャラクター雑貨'}],
'floor_code': 'hobby',
'floor_name': 'ホビー',
'imageURL': {'large': 'https://pics.dmm.com/mono/hobby/cha_toumusical1746/cha_toumusical1746pl.jpg',
'list': 'https://pics.dmm.com/mono/hobby/cha_toumusical1746/cha_toumusical1746pt.jpg',
'small': 'https://pics.dmm.com/mono/hobby/cha_toumusical1746/cha_toumusical1746ps.jpg'},
'iteminfo': {'genre': [{'id': 15226,
'name': 'ミュージカル『刀剣乱舞』'},
{'id': 79022, 'name': '刀剣乱舞'}],
'maker': [{'id': 63888,
'name': 'ミュージカル『刀剣乱舞』'}],
'series': [{'id': 65820,
'name': 'ミュージカル『刀剣乱舞』'}]},
'prices': {'list_price': '200', 'price': '200'},
'product_id': 'cha_toumusical1746',
'service_code': 'mono',
'service_name': '通販',
'stock': 'reserve',
'title': '【受注生産】ミュージカル『刀剣乱舞』 江 おん すていじ 〜新編 里見八犬伝〜 '
'ランダムすていじカード(全24種)',
'volume': 'W55mm×H85mm'},
{'URL': 'https://dlsoft.dmm.com/detail/dacapo_0027/',
'affiliateURL': 'https://al.dmm.com/?lurl=https%3A%2F%2Fdlsoft.dmm.com%2Fdetail%2Fdacapo_0027%2F&af_id=XXXX-990&ch=api',
pprintがJSON形式のデータを見やすく表示してくれます。
{・・・}はその要素の塊
result{・・・} は、resultの内容はこの中に記載しているという意味。
情報として、zirst_position,items,category_nameなどの情報を持ってることを示す。
[・・・]はその要素が複数ある時のインデックス
Items[・・・]はitemsが複数の情報を持っているということを示す。Itemsの内容は、URL, ‘affiliateURL, ’category_name, content_idなどのラベル情報を持っていて、それを複数存在することを示す。また、各情報の値は、「ラベル:値」という表記になっている。
例)次の例では、
- resultにはitemsとresult_count、status、total_countという要素がある。
- itemsには、affiliateURL、category_name、titleの3つの要素がある。
- itemsは2つの情報を持っている
- 2つ目の情報のタイトルはitems[1]のtitle の値だから、[resut][items][1][title]で表現できて、値は、「エルダー・スクロールズ・オンライン」である。
という形で構成されています。items[]の数字は0から始まることに注意です。
result{
items: [
{affiliateURL : https://al.dmm.com/?lurl=https%3A%2F%2Fwww.dmm.com%2Fmono%2Fhobby%2F-%2Fdetail%2F%3D%2Fcid%3Dcha_toumusical1746%2F&af_id=XXXX-990&ch=api,
category_name : ホビー通販,
title : ミュージカル『刀剣乱舞』 江 おん すていじ 〜新編 里見八犬伝〜},
{affiliateURL :https://al.dmm.com/?lurl=https%3A%2F%2Fdlsoft.dmm.com%2Fdetail%2Fdacapo_0027%2F&af_id=XXXX-990&ch=api,
category_name : PCゲーム,
title : エルダー・スクロールズ・オンライン}]
result_count: 2,
status: 200,
total_count: 50000}}
上記の説明では要素をそのまま書きましたが、実際はシングルクォーテーションで囲む必要があります。
['resut']['items'][1]['title']
次はいよいよ、取得したDMMデータからツイート用文章を作成して、実際にツイートを行います。