diff --git a/yt_dlp/extractor/vrporn.py b/yt_dlp/extractor/vrporn.py new file mode 100644 index 0000000000..2b9adf4434 --- /dev/null +++ b/yt_dlp/extractor/vrporn.py @@ -0,0 +1,100 @@ +import json + +from .common import InfoExtractor + + +class VRPornIE(InfoExtractor): +    _VALID_URL = r"https?://(?:www\.)?vrporn\.com/(?P.+)/" +    _LOGIN_URL = "https://vrporn.com/api/playa/v2/auth/sign-in-password" +    _SINGLE_VIDEO_URL = "https://vrporn.com/api/playa/v2/video/" +    _NETRC_MACHINE = "vrporn" +    _USERTOKEN = None +    _TESTS = [ +        { +            "url": "https://vrporn.com/milkmans-diaries/", +            "only_matching": True, +        }, +        { +            "url": "https://vrporn.com/what-a-fellin/", +            "only_matching": True, +        }, +    ] + +    def _perform_login(self, username, password): +        user_data = self._download_json( +            self._LOGIN_URL, +            None, +            note="Logging in", +            data=json.dumps( +                { +                    "login": username, +                    "password": password, +                } +            ).encode(), +            headers={ +                "Content-Type": "application/json", +            }, +        ) +        self._USERTOKEN = user_data["data"]["access_token"] + +    def _real_extract(self, url): +        mobj = self._match_valid_url(url) +        display_id = mobj.group("display_id") + +        webpage, _ = self._download_webpage_handle(url, display_id) + +        video_id = self._search_regex( +            r"shortlink.+href=[\'\"]https://vrporn\.com/\?p=([0-9]+)[\'\"]", +            webpage, +            "id", +        ) + +        headers = { +            "Content-Type": "application/json", +        } +        if self._USERTOKEN: +            headers.update( +                { +                    "Authorization": f"Bearer {self._USERTOKEN}", +                } +            ) + +        video_data = self._download_json( +            self._SINGLE_VIDEO_URL + video_id, +            None, +            query={"asd": "asd"}, +            note="fetching formats", +            headers=headers, +        ) + +        title = video_data["data"]["title"] + +        formats = [] + +        duration = "" + +        for detail in video_data["data"]["details"]: +            type = detail["type"] +            duration = detail["duration_seconds"] + +            for link in detail["links"]: +                if link["is_download"]: +                    formats.append( +                        { +                            "url": link["url"], +                            "format_id": f'{type}-{link["quality_name"]}-{link["stereo"]}-{link["projection"]}', +                            "quality": link["quality_name"], +                            "resolution": link["quality_name"], +                        } +                    ) + +        return { +            "id": video_id, +            "display_id": display_id, +            "title": title, +            "duration": duration, +            "formats": formats, +            "age_limit": 18, +        } + +