MENU

DMM Web API(FANZA)でAI生成同人作品を検索する方法【Pythonコード付き】

DMM Web API(FANZA)でAI生成同人作品を検索する方法【Pythonコード付き】
目次

前提条件

  • Pythonの実行環境が構築されていること
  • DMM API IDが発行されていること
  • 運営しているサイト

DMM API IDの発行手順

APIを使用するには、DMMへのアカウント登録とDMMアフィリエイトの登録が必要です。

詳細な手順は、DMMアフィリエイト公式サイトから登録を進め、管理画面でAPI IDを確認してください。スクリーンショット付きの手順が必要な場合は、公式の案内と管理画面の表示を見ながら進めるのが確実です。

DMMアフィリエイトの登録には運営しているサイトのURLが必要になるため、事前に用意しておきましょう。

DMM APIの基本的な使い方

API IDとアフィリエイトIDを取得できれば、DMMの様々な情報を取得できるようになります。

基本的な使い方については、DMM Webサービス API公式ドキュメントを参照してください。ただし、最低限の情報しか記載されていないため、以下で具体的な使用方法を解説します。

フロア検索

フロア検索は、パラメータが最小限のため、APIの使用を始めるのに適しています。

使用するURLは以下の通りです。

https://api.dmm.com/affiliate/v3/FloorList?api_id=[APIID]&affiliate_id=[アフィリエイトID]&output=json

[APIID][アフィリエイトID]には、取得したAPI IDとアフィリエイトIDを入力してください。前後の[ ]は不要です。

ブラウザでの実行

手軽に情報を取得するには、ブラウザのアドレスバーにこのURLを入力して検索します。

すると、以下のようにデータが画面に表示されます。ただし、この形式では内容が分かりにくいです。

ブラウザでFloorList APIのURLを実行し、整形されていないJSON形式のデータが表示された画面

このデータを表形式で整理したものが以下になります。フロアの情報を返してくれているわけです。この中のサービスコードやフロアコード、フロアIDは、他のAPIでもパラメータとして使用するので覚えておきましょう。

サイト サービス サービスコード フロア フロアコード フロアID
DMM.com(一般) AKB48グループ lod AKB48 akb48 1
SKE48 ske48 2
NMB48 nmb48 3
HKT48 hkt48 4
NGT48 ngt48 5
REVIVAL!! ON DEMAND rod 6
STU48 stu48 93
DMMブックス ebook コミック comic 19
写真集 photo 20
文芸・ラノベ novel 21
ビジネス・実用 otherbooks 22
PCゲーム/ソフトウェア pcsoft PCゲーム digital_pcgame 23
ソフトウェア digital_pcsoft 24
通販 mono DVD・Blu-ray dvd 25
CD cd 26
本・コミック book 27
ホビー hobby 29
家電・日用品 kaden 30
DMMTV dmmtv DMMTV dmmtv_video 95
FANZA(アダルト) 動画 digital ビデオ videoa 43
素人 videoc 44
成人映画 nikkatsu 45
アニメ動画 anime 46
月額動画 monthly 見放題ch デラックス premium 68
VRch vr 91
見放題ch standard 98
通販 mono DVD dvd 74
大人のおもちゃ goods 75
アニメ anime 76
PCゲーム pcgame 77
ブック book 78
フィギュア・グッズ figure 94
アダルトPCゲーム pcgame アダルトPCゲーム digital_pcgame 80
同人 doujin 同人 digital_doujin 81
FANZAブックス ebook コミック comic 82
美少女ノベル・官能小説 novel 83
アダルト写真集・雑誌 photo 84
BL bl 96
TL tl 97
FANZAブックス読み放題 unlimited_book FANZAブックス読み放題 unlimited_comic 92

Pythonでの実行

このURLはPythonでも実行できます。以下のコードでAPI_IDとAFFILIATE_IDに実際のAPI IDとアフィリエイトIDを入力してください。

import requests
import json
# DMM API設定
API_ID = "XXXXXXXXXXX"
AFFILIATE_ID = "XXXXXXXXXXX"
# APIエンドポイント
url = "https://api.dmm.com/affiliate/v3/FloorList"
# パラメータ
params = {
    "api_id": API_ID,
    "affiliate_id": AFFILIATE_ID,
    "output": "json"
}
def test_dmm_api():
    """DMM APIの基本的なテスト"""
    try:
        # APIリクエスト実行
        response = requests.get(url, params=params)
        response.raise_for_status()
        
        # レスポンスをJSONで取得
        data = response.json()
        
        print("API呼び出し成功!")
        print(f"ステータスコード: {response.status_code}")
        print(f"レスポンス: {json.dumps(data, indent=2, ensure_ascii=False)}")
        
        return data
        
    except requests.exceptions.RequestException as e:
        print(f"API呼び出しエラー: {e}")
        return None
    except json.JSONDecodeError as e:
        print(f"JSON解析エラー: {e}")
        return None
if __name__ == "__main__":
    test_dmm_api()

このコードを実行すると、コンソールに出力結果が表示されます。

GitHubなどでコードを管理する場合は、API_IDやAFFILIATE_IDは環境変数で管理してください。Pythonではpython-dotenvライブラリを使用して.envファイルで管理することをお勧めします。

ジャンル検索

次にジャンル検索について説明します。ここでは先ほど取得したフロアのフロアIDを使用する必要があります。

例として「同人」のフロアID81を使用して、同人フロアのジャンルを検索してみましょう。

使用するURLは以下の通りです。

https://api.dmm.com/affiliate/v3/GenreSearch?api_id=[APIID]&affiliate_id=[アフィリエイトID]&floor_id=81&output=json

同様にブラウザで検索するとデータが表示されます。

Pythonでのコードは以下のようになります。

# ジャンル検索のパラメータ例(同人フロアの場合)
params = {
    "api_id": API_ID,
    "affiliate_id": AFFILIATE_ID,
    "floor_id": "81",
    "output": "json"
}

floor_idパラメータが追加されているのが分かります。

実行すると同人で使用されているジャンルデータを返してくれます。

ジャンルID ジャンル名
12 3DCG
160024 「90%還元」冬のプレミアム企画
4118 アイドル・芸能人
6551 iPhone・iPad対応
160052 青姦
160155 赤ちゃんプレイ
156035 赤ブー5月イベント
160053 悪堕ち
4076 アクション
514 アクション・格闘
19 アクセサリー
160231 アクセス上位ジャンル
160163 アクメ
160116 悪役令嬢
153019
160054 足コキ
4127 アドベンチャー
5005 アナル
160115
160042 アヘ顔
6071 アンソロジー
6562 Android対応
154018 委員長
160117 医者
155010 異種姦
160104 異世界転生
160134 イチオシ
160180 従姉妹/いとこ
72 異物挿入
153032 癒し
8 イラスト・CG集
5068 イラマチオ
155022 色仕掛け
160037 陰キャ・地味
160043 淫語
154001 インテリ
154019 陰毛・腋毛
160039 淫乱
1040 ウェイトレス
153033
160205 鬱勃起
160126 裏垢女子
152016 浮気
300248 エアコミケ2
160160 駅弁
4075 SF
4001 SM
160207 エステ
154002 エルフ・妖精
152005 遠距離恋愛
160132 AI生成
160004 ASMR
160118 王子様・王子系
154003 おかっぱ
153002 オカルト
152006 屋外
1083 幼なじみ
155001 おさわり
153004 お尻・ヒップ
154030 叔父・義父
7007 お嬢様・令嬢
527 お嬢様・令嬢
160031 おすすめ
160056 おすすめボイス作品
160007 襲い受
153003 おっぱい
160219 雄っぱい
160119
153027 男無
160172 男の潮吹き
155011 乙女受け
160026 乙女向け
160055 オナサポ
5008 オナニー
160176 オネエ
528 お姫様
152001 オフィス・職場
160099 オホ声
151001 おむつ
160003 オメガバース
5017 おもちゃ
155002 おもらし
160070 おやじ
155003 オヤジ受け
155012 俺様攻め
15 音声付き
160221 温泉・銭湯・お風呂
1016 女教師
153023 女主人公のみ
1001 OL
153001 オールハッピー
160146 快楽堕ち
160167 カウントダウン
155013 拡張
152007 家族
151004 カチューシャ
154021 褐色・日焼け
160195 壁尻
160208 感覚遮断
5010 監禁

AI生成同人作品の検索方法

ここまでの情報を基に、AI生成作品に絞って同人作品を検索する方法を説明します。

使用するのは商品情報APIです。

実際の検索用Pythonコードは以下の通りです。

import requests
import json
# DMM API設定
API_ID = "XXXXXXXXXXX"
AFFILIATE_ID = "XXXXXXXXXXX"
# APIエンドポイント
url = "https://api.dmm.com/affiliate/v3/ItemList"
# パラメータ
params = {
    "api_id": API_ID,
    "affiliate_id": AFFILIATE_ID,
    "site": "FANZA",
    "service": "doujin",
    "floor": "digital_doujin",
    "article": "ai",
    "article_id": "2",
    "output": "json"
}

serviceとfloorパラメータは、先ほど取得したフロア情報を基に入力しています。商品検索ではフロアIDではなくフロアコードを使用することに注意してください。

AIに関するarticleとarticle_idパラメータについては、公式のAPIドキュメントには記載されていません。

これらの値は、AIフロアのURLから推測できます。

AIフロアのURLは以下のようになっています。

https://www.dmm.co.jp/dc/doujin/-/list/=/article=ai/id=2/section=mens

このURLのarticle=aiとid=2が、APIパラメータとして使用されています。

商品検索のリクエストパラメータを確認してみましょう。

論理名 物理名 必須 値のサンプル 概要
APIID api_id 登録時に割り振られたID
アフィリエイトID affiliate_id affiliate-990 登録時に割り振られた990~999までのアフィリエイトID
サイト site FANZA 一般(DMM.com)かアダルト(FANZA)か
サービス service digital フロアAPI から取得できるサービスコードを指定
フロア floor videoa フロアAPI から取得できるフロアコードを指定
取得件数 hits 20 初期値:20 最大:100
検索開始位置 offset 1 初期値:1 最大:50000
ソート順 sort rank 初期値:rank 人気:rank 価格が高い順:price 価格が安い順:-price 発売日:date 評価:review マッチング順:match
キーワード keyword 松本いちか UTF-8で指定 キーワード検索のヒント
商品ID cid mizd00320 商品に振られているcontent_id
絞りこみ項目 article actress 女優 :actress 作者 :author ジャンル :genre シリーズ :series メーカー :maker 絞り込み項目を複数設定する場合、パラメータ名を配列化します。 例:&article[0]=genre&article[1]=actress
絞り込みID article_id 1011199 上記絞り込み項目のID(各検索APIから取得可能) 絞り込み項目を複数設定する場合、パラメータ名を配列化します。 例:&article_id[0]=111111&article_id[1]=222222
発売日絞り込み gte_date 2016-04-01T00:00:00 このパラメータで指定した日付以降に発売された商品を絞り込むことができます。 ISO8601形式でフォーマットした日付を指定してください。(ただし、タイムゾーンは指定できません)
発売日絞り込み lte_date 2016-04-30T23:59:59 このパラメータで指定した日付以前に発売された商品を絞り込むことができます。 フォーマットはgte_dateと同じです。
在庫絞り込み mono_stock mono 初期値:絞り込みなし 在庫あり:stock 予約商品(在庫あり):reserve 予約商品(キャンセル待ち):reserve_empty DMM通販のみ:mono マーケットプレイスのみ:dmp ※通販サービスのみ指定可能
出力形式 output json json / xml
コールバック callback callback 出力形式jsonで指定した場合に、このパラメータでコールバック関数名を指定すると、JSONP形式で出力されます

articleとarticle_idパラメータが存在していることが分かります。これらのパラメータを組み合わせることで、AI生成同人作品のみを取得できます。

URLを確認すると、AIで生成された同人作品のページが表示されていることが分かります。

まとめ

AI作品に絞ることで、WordPressなどを使ってアフィリエイトサイトを運営する際に、AI特化サイトとして運用できます。

AI作品は手軽に制作できるため大量に出品されており、アフィリエイト対象作品には困りません。ただし、質の低い作品も含まれているため、適切な選別を行う運用も必要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

どうすれば自分の思い通りのコンテンツを作れるのか試行錯誤しながら研究中。よりdeepな話はpixivFANBOXへどうぞ。

コメント

コメントする

目次