Python スクレイピング

【Python】DMMのAPIを使ってFANZAのサンプル動画をダウンロードする機能を作った

この記事は約5分で読めます。

 

こんにちは、ミナピピン(@python_mllover)です。

 

今回はMENTAの案件でDMMのAPIを使ってFANZAのサンプル動画をPythonからダウンロードするスクリプトを作成したので、ここに保存しておこうと思います。

 

PythonでDMMのAPIを叩く

 

検索したところdmm-search3というラッピングライブラリが有志の方によって作成されています。

# ライブラリのインストール
$pip install dmm-search3

 

 

ライブラリの使い方はgitからそのまま持ってきただけですが↓のような感じです。

# モジュールのインポート
import dmm

# API ID と アフィリエイトIDをセット
api_id = ""
affiliate_id = ""

# インスタンスを作成
api = dmm.API(api_id=api_id, affiliate_id=affiliate_id)

# 商品検索
item_search = api.item_search(site="FANZA", hits=1, keyword="バレンタイン")

# フロア一覧
floor_list = api.floor_list()

# 女優検索
actress_search = api.actress_search()

# ジャンル検索
genre_search = api.genre_search(floor_id=91)

# メーカー検索
maker_search = api.maker_search(floor_id=91)

# シリーズ検索
series_search = api.series_search(floor_id=91)

# 作者検索
author = api.author_search(floor_id=72)

参照:https://github.com/miya/dmm-search3/blob/master/test.py

 

これで作品検索とか女優検索はAPI経由ですぐ実行できるのですが、サンプル動画のダウンロードについては自分の環境ではうまく動作しませんでした。

 

サンプル動画のURLを取得する

 

というわけでDMMのエッチのビデオのサンプル動画をダウンロードする機能を自分の方で書き直してみたので、その過程をここにまとめておきます。

 

まず適当な女優名で検索して検索結果を取得します。

res = api.item_search(site="FANZA", hits=1, keyword="飛鳥りん")

 

引数hits=1を適当な数字に変えるとその分だけ検索結果を取得してくれます。

 

レスポンスで必要な部分を抜き出すとこんな感じです。↓

>>res['result']['items'][0]['sampleMovieURL']

<実行結果>

{'size_476_306': 'https://www.dmm.co.jp/litevideo/-/part/=/cid=atkd298/size=476_306/',
 'size_560_360': 'https://www.dmm.co.jp/litevideo/-/part/=/cid=atkd298/size=560_360/',
 'size_644_414': 'https://www.dmm.co.jp/litevideo/-/part/=/cid=atkd298/size=644_414/',
 'size_720_480': 'https://www.dmm.co.jp/litevideo/-/part/=/cid=atkd298/size=720_480/',
 'pc_flag': 1,
 'sp_flag': 1}

 

サンプル動画が存在している場合はレスポンスにサンプル動画のURLが返されます。

見ればわかりますが、丁寧にサイズごとに別々にURLを返してくれます。

 

スポンサーリンク
スポンサーリンク

サンプル動画をPythonからダウンロードする

 

最初に紹介したライブラリのリファレンスを見るとサンプル動画のダウンロード機能が実装されているみたいなのですが、実行するとエラーになったので自分で書きなおしてみました。

 

import re
import requests

find_src = soup.find("iframe", allow="autoplay").get("src")
tcid = re.findall("cid=(.*)/mtype", find_src)[0]
small_video_url = "http://cc3001.dmm.co.jp/litevideo/freepv/{}/{}/{}/{}_sm_w.mp4".format(tcid[:1], tcid[:3], tcid, tcid)
video_url = res['result']['items'][0]['sampleMovieURL']['size_476_306']
response = requests.get(video_url)
with open(r'C:\~~\test.mp4', 'wb') as saveFile:
    saveFile.write(response.content)

 

 

やっていることはBeautifulSoupで動画のURLからmp4ファイル名を推測し、それをリクエストで叩いてコンテンツをmp4ファイルに書き出しているだけです。dmm-search3のソースコードと流れは同じなのですが、あちらは内部でyoutube-dlを使用しておりそれの仕様変更がエラーの原因なのかなーって思いました。

 

参照:【Python】youtube-dlでmp4/mp3をYoutubeからダウンロードする

参照:https://boukenki.info/python-douga-download-houhou/

 

 

 

コメント

タイトルとURLをコピーしました