見出し画像

偏差値30でも分かる DUGA APIの使い方(Python編)

皆さん、こんにちは。中川@ナマポエンジニアです。

以前の投稿から少し時間が過ぎてしまいましたが、最近DUGAのAPIを使ってみたので、noteに書いてみようと思います。

このnoteは、Pythonの基礎とAPIが出来る前提で話を進めていきます。もし、これらが分からない場合は、以下の教材がおすすめ。

DUGAとは?

そもそも、DUGAとは何ぞや!?と思う方も多いと思います。ア〇ルトアフィリエイトや、AVをよく見る人でないと知らないでしょう。

DUGAとは、一言で述べると成人向けの動画コンテンツを販売しているサイトです。DMMもその一つですが、DMMは成人向けの動画コンテンツ以外にも、様々な物を販売していますが、DUGAは成人向けの動画コンテンツに特化しています。

会員数は、100万人を超えており、そこそこの規模を誇っています。ニッチなジャンルの作品が多いにも大きな特徴ですね。

以前、ソクミルという同業者のAPIの使い方をご説明しました。

ソクミル同様にDUGAもAPIを無料で提供していましたので、早速ご紹介しています。

DUGAの登録方法

DUGAの登録方法については、以下のnoteが詳しい。そのため、DUGA APIを扱う前に、以下のnoteを参考にDUGAのアカウント作成を行ってください。

DUGA APIの使い方

まず、DUGAのログイン状態を保持したまま、以下のリンクにアクセスしてください。APIを扱うためにはアプリケーションIDの発行をしないといけないからです。

DUGA Web API

スクリーンショット 2020-11-12 223122

その次に、上記画像で赤線で囲んでいる「新しいアプリケーションIDの発行を申請」というボタンをクリックしてください。

スクリーンショット 2020-11-12 223203

そうすると上記画像のようなページに移動するはず。もし、サイトを一つもお持ちでない場合は、ライブドアブログなどの無料ブログでサイトを作って、そのurlを貼り付けてください。

アプリケーションIDの発行が完了しましたら、DUGA Web APIに戻ってください。

発行済みアプリケーションIDを見てもらうと、アプリケーションIDが発行されているはず。

スクリーンショット 2020-11-13 012516

コードを書いていく

準備が整いましたら、実際にコードを書いていきましょう。

APIテストのボタンをクリックすれば、具体的なパラメータを把握することができますので、ぜひお試ししてください。

DMM APIほど多機能ではありませんが、シンプルな構成で使いやすいAPIとなっていました。主に今回は、キーワードから検索、カテゴリーから検索、指定の並び順にソートという機能を作りました。

まず、__init__メゾッドを記入していきます。

class duga:
   def __init__(self,hits):
       self.api_domain = "http://affapi.duga.jp/search"
       self.api_id = ""
       self.agentid = ""
       self.version = "1.2"
       self.hits = hits

__init__内の変数は、以下のような構成になっています。

api_domain: APIドメイン
api_id: アプリケーションID
agentid: 代理店ID
hits: 取得件数
version: バージョン
import requests
import json

class duga:
   def __init__(self,hits):
       self.api_domain = "http://affapi.duga.jp/search"
       self.api_id = "8HQYQ9RvZRJ2CyztK0Hw"
       self.agentid = "35841"
       self.version = "1.2"
       self.hits = hits
      
    def searchKeyword(self,keyword):
       api_domain = self.api_domain
       api_id = self.api_id
       agentid = self.agentid
       version = self.version
       hits = self.hits
       url = "{0}?version={1}&appid={2}&agentid={3}&keyword={4}&hits={5}&bannerid=01&format=json&adult=1&sort=favorite".format(api_domain,version,api_id,agentid,keyword,hits)
       response = requests.get(url)
       return response
    
    def searchCategory(self,category):
       api_domain = self.api_domain
       api_id = self.api_id
       agentid = self.agentid
       version = self.version
       hits = self.hits
    
       url = "{0}?version={1}&appid={2}&agentid={3}&category={4}&hits={5}&bannerid=01&format=json&adult=1&sort=favorite".format(api_domain,version,api_id,agentid,category,hits)
       response = requests.get(url)
       return response
    
    def getSort(self,sort):
       api_domain = self.api_domain
       api_id = self.api_id
       agentid = self.agentid
       version = self.version
       hits = self.hits
       url = "{0}?version={1}&appid={2}&agentid={3}&hits={4}&sort={5}&bannerid=01&format=json&adult=1&sort=favorite".format(api_domain,version,api_id,agentid,hits,sort)
       response = requests.get(url)
       return response

すみません、メソッド名は結構適当です...

それぞれのメソッドの機能は以下。

searchKeyword: 指定キーワードに一致する商品を取得

searchCategory:指定カテゴリーに一致する商品を取得

getSort: 指定並び順にソート

カテゴリーは、それぞれ番号が振り割られています。私が連想配列にまとめましたので、ぜひご活用ください。

category_Obj = {"素人":"01","ギャル":"100025","盗撮":"03","パンチラ":"0303","スカトロ":"04","おしっこ":"0401",
 "トイレ":"0403","浣腸":"100018","辱め":"05","熟女":"07","SM":"08","緊縛":"0801","女子高生":"09","コスプレ":"10","レズ":"11",
 "アイドル":"12","フェチ":"13","おっぱい":"1301","お尻":"100021","ぽっちゃり":"100022","キャットファイト":"100023",
 "アナル":"15","妊婦":"0101","アニメ":"14","ゲイ":"16","ニューハーフ":"17","シチュエーション":"18","痴漢":"0602",
 "ドラマ":"19","オナニー":"21","外国人":"22","企画":"23","M男":"0802","女王様":"100006","痴女":"100009","ロリ系":"100032",
 "成人映画":"100039","美少女ゲーム":"90"
}

並び順の文字列は、以下。

favorite = ["favorite","release","new","price","rating","mylist"]
duga_api = dugaAPI(1)
res = duga_api.searchKeyword("")
res_text = res.text
res_json = json.dumps(res_text)
print(res_json)

上記のようなコードを実施すると以下のような値が返却されます。

'{"hits":"1"\r
"count":118995\r
"offset":1\r
"timestamp":"2020\\/11\\/14 02:18:55"\r
"items":[{"item":{"productid":"spice-1172"\r
"title":"\\u91cc\\u898b\\u5343\\u6625  \\u604b\\u306e\\u30b9\\u30ad\\u30f3\\u30b7\\u30c3\\u30d7"\r
"caption":"\\u5727\\u5012\\u7684\\u306a\\u53ef\\u611b\\u3055\\u306b\\u30aa\\u30fc\\u30e9\\u3092\\u7e8f\\u3044\\u59cb\\u3081\\u305f\\u7740\\u30a8\\u30edNo.1\\u7f8e\\u5c11\\u5973\\u300c\\u91cc\\u898b\\u5343\\u6625\\u300d\\u3061\\u3083\\u3093\\u306e\\u904e\\u6fc0\\u306a\\u3010\\u30b9\\u30ad\\u30f3\\u30b7\\u30c3\\u30d7\\u3011\\u306b\\u3053\\u3060\\u308f\\u3063\\u305f\\u3001\\u307e\\u3055\\u306b\\u5922\\u306e\\u3088\\u3046\\u306a\\u4e00\\u4f5c\\uff01\\u5343\\u6625\\u3061\\u3083\\u3093\\u306e\\u3010\\u5e7c\\u3044\\u67d4\\u808c\\u3011\\u306b\\u5bb9\\u8d66\\u306a\\u3044\\u30dc\\u30c7\\u30a3\\u30bf\\u30c3\\u30c1\\u3092\\u7e70\\u308a\\u8fd4\\u3057\\u3001\\u4e0a\\u534a\\u8eab\\u30fb\\u4e0b\\u534a\\u8eab\\u4e21\\u65b9\\u306e\\u5feb\\u25cf\\u30b9\\u30dd\\u30c3\\u30c8\\u3092\\u305f\\u3063\\u3077\\u308a\\u653b\\u3081\\u3066\\u3057\\u307e\\u3063\\u305f\\u306e\\u3067\\u3001\\u4eca\\u307e\\u3067\\u306b\\u898b\\u305b\\u305f\\u3053\\u3068\\u306e\\u306a\\u3044\\u6065\\u3058\\u3089\\u3044\\u306e\\u8868\\u60c5\\u3068\\u5410\\u606f\\u304c\\u6f0f\\u308c\\u3066\\u3061\\u3083\\u3063\\u3066\\u307e\\u3059\\uff01\\u6065\\u305a\\u304b\\u3057\\u3055\\u306e\\u5148\\u306b\\u3042\\u308b\\u5feb\\u697d\\u306b\\u8e0f\\u307f\\u8fbc\\u3093\\u3058\\u3083\\u3063\\u305f\\uff01\\uff1f\\u307e\\u305f1\\u3064\\u58c1\\u3092\\u7a81\\u304d\\u7834\\u3063\\u305f\\u5343\\u6625\\u3061\\u3083\\u3093\\u306e\\u65b0\\u5883\\u5730\\u306f\\u5fc5\\u898b\\uff01"\r
"makername":"Spice Visual"\r
"url":"https:\\/\\/duga.jp\\/ppv\\/spice-1172\\/"\r
"affiliateurl":"https:\\/\\/click.duga.jp\\/ppv\\/spice-1172\\/35841-01"\r
"opendate":"2020\\/10\\/30"\r
"releasedate":"2020\\/06\\/26"\r
"itemno":"MBR-AA185"\r
"price":"400\\u5186\\uff5e"\r
"volume":80\r
"posterimage":[{"small":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/120x90.jpg"}\r
{"midium":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/160x120.jpg"}\r
{"large":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/240x180.jpg"}]\r
"jacketimage":[{"small":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/jacket_120.jpg"}\r
{"midium":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/jacket_240.jpg"}\r
{"large":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/jacket.jpg"}]\r
"thumbnail":[{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0001.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0002.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0003.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0004.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0005.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0006.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0007.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0008.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0009.jpg"}\r
{"image":"https:\\/\\/pic.duga.jp\\/unsecure\\/spice\\/1172\\/noauth\\/scap\\/0010.jpg"}]\r
"samplemovie":[{"midium":{"movie":"https:\\/\\/affsample.duga.jp\\/unsecure\\/spice-1172\\/noauth\\/movie.mp4"\r
"capture":"https:\\/\\/affsample.duga.jp\\/unsecure\\/spice-1172\\/noauth\\/flvcap.jpg"}}]\r
"label":[{"id":"spice"\r
"name":"\\u30b9\\u30d1\\u30a4\\u30b9\\u30d3\\u30b8\\u30e5\\u30a2\\u30eb"\r
"number":"1172"}]\r
"category":[{"data":{"id":"12"\r
"name":"\\u30a2\\u30a4\\u30c9\\u30eb"}}]\r
"performer":[{"data":{"id":"18401"\r
"name":"\\u91cc\\u898b\\u5343\\u6625"\r
"kana":"\\uff7b\\uff84\\uff90 \\uff81\\uff8a\\uff99"}}]\r
"saletype":[{"data":{"type":"\\u901a\\u5e38\\u7248"\r
"price":"980"}}\r
{"data":{"type":"\\u30ec\\u30f3\\u30bf\\u30eb"\r
"price":"400"}}\r
{"data":{"type":"HD\\u7248"\r
"price":"2530"}}\r
{"data":{"type":"HD\\u7248\\u30ec\\u30f3\\u30bf\\u30eb"\r
"price":"400"}}]\r
"ranking":[{"total":"1"}]\r
"review":[{"rating":"5"\r
"reviewer":"4"}]\r
"mylist":[{"total":"75"}]}}]}'

json内の構造が少し見にくいので、少し分かりにくいかと思います。そのため、以下のurlのレスポンスフィールドという箇所で確認すると良いでしょう。

まとめ

ソクミル同様に、dugaのAPIを説明したサイトをあまり見かけなかったので、今回紹介してみました。もちろん、Python以外のPHPやJavaなど他の言語でもAPIを扱えますので、ぜひ一回お試ししてみてください。

もしかすると新たな発見や、面白いツールを開発できるかも?

最後まで読んでいただきありがとうございました。

他のSNSもよろしくお願いします。

Twitter: https://twitter.com/Mz6DPbPxtQQIyNr
ココナラ: https://profile.coconala.com/users/my
MENTA: https://menta.work/member/dash
Note(アフィリエイト用垢): https://note.com/naka_gawa
Booth: https://nakagawa.booth.pm/




この記事が気に入ったらサポートをしてみませんか?