Python スクレイピング

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

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

 

こんにちは、ミナピピン(@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
from bs4 import BeautifulSoup

# APIのレスポンスで返されたサンプルビデオのURL
r = requests.get('https://www.dmm.co.jp/litevideo/-/part/=/cid=atkd298/size=720_480/')
find_src = soup.find("iframe", allow="autoplay").get("src")
tcid = re.findall("cid=(.*)/mtype", find_src)[0]
video_url = "http://cc3001.dmm.co.jp/litevideo/freepv/{}/{}/{}/{}_sm_w.mp4".format(tcid[:1], tcid[:3], tcid, tcid)
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からダウンロードする

関連記事:【Python】requestsで画像・動画ファイルを書き出し・ダウンロードするサンプルプログラム

関連記事:【Python】YoutubeのAPIを叩いて検索結果と各動画の再生回数を取得する

 

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

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. おとも より:

    始めまして。
    主様のようにDMMからサンプル動画を取得したいと思い
    サンプルコードを実行しましたが
    find_src = soup.find(“iframe”, allow=”autoplay”).get(“src”)
    のところで
    ‘NoneType’ object has no attribute ‘get’
    のエラーが発生して詰まっております。
    なにが原因だと考えられますでしょうか?

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