This commit is contained in:
Christoph Califice
2025-10-09 20:05:31 -03:00
parent ed22ef22bc
commit 0a5f88d75a
1442 changed files with 101562 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
import json
import sys
from requests import head
from typing import Any
from py_common import log
from py_common.util import dig, replace_all, replace_at
from AyloAPI.scrape import (
gallery_from_url,
scraper_args,
scene_from_url,
scene_search,
scene_from_fragment,
performer_from_url,
performer_from_fragment,
performer_search,
movie_from_url,
)
studio_map = {
"AvaSpice": "Ava Spice",
"MomIsHorny": "Mom Is Horny",
}
def redirect(url: str) -> str:
if not url or "/video/" not in url:
return url
if (res := head(url)) and (redirect := res.headers.get("Location", url)):
return redirect if not redirect.endswith("404") else url
return url
def bangbros(obj: Any, _) -> Any:
domain = (
"virtualporn.com"
if dig(obj, "studio", "name") == "Virtual Porn"
else "bangbros.com"
)
# All bangbros URLs omit the standard www. subdomain prefix
# and all scene URLs use /video/ instead of the standard /scene/
fixed = replace_all(
obj,
"url",
lambda x: x.replace("/scene/", "/video/").replace("www.bangbros.com", domain),
)
# Rename certain studios according to the map
fixed = replace_at(
fixed, "studio", "name", replacement=lambda x: studio_map.get(x, x)
)
return fixed
if __name__ == "__main__":
domains = [
"bangbros",
"virtualporn",
]
op, args = scraper_args()
result = None
match op, args:
case "gallery-by-url" | "gallery-by-fragment", {"url": url} if url:
url = redirect(url)
result = gallery_from_url(url, postprocess=bangbros)
case "scene-by-url", {"url": url} if url:
url = redirect(url)
result = scene_from_url(url, postprocess=bangbros)
case "scene-by-name", {"name": name} if name:
result = scene_search(name, search_domains=domains, postprocess=bangbros)
case "scene-by-fragment" | "scene-by-query-fragment", args:
args = replace_all(args, "url", redirect)
result = scene_from_fragment(
args, search_domains=domains, postprocess=bangbros
)
case "performer-by-url", {"url": url}:
url = redirect(url)
result = performer_from_url(url, postprocess=bangbros)
case "performer-by-fragment", args:
result = performer_from_fragment(args)
case "performer-by-name", {"name": name} if name:
result = performer_search(
name, search_domains=domains, postprocess=bangbros
)
case "movie-by-url", {"url": url} if url:
url = redirect(url)
result = movie_from_url(url, postprocess=bangbros)
case _:
log.error(f"Operation: {op}, arguments: {json.dumps(args)}")
sys.exit(1)
print(json.dumps(result))

View File

@@ -0,0 +1,78 @@
name: BangBros
# requires: py_common, AyloAPI
# scrapes: Ass Parade, Ava Spice, Back Room Facials, Backroom MILF, Ball Honeys, Bang Bus, Bang Casting, Bang POV, Bang Tryouts, BangBros 18, BangBros Angels, Bangbros Clips, BangBros Remastered, BangBros Vault, Big Mouthfuls, Big Tit Cream Pie, Big Tits, Round Asses, BlowJob Fridays, Blowjob Ninjas, Boob Squad, Brown Bunnies, Can He Score, Casting, Chongas, Colombia Fuck Fest, Dirty World Tour, Dorm Invasion, Facial Fest, Fuck Team Five, Glory Hole Loads, Latina Rampage, Living With Anna, MILF Lessons, Milf Soup, Magical Feet, Mom Is Horny, Monsters of Cock, Mr CamelToe, Mr. Anal, My Dirty Maid, My Life In Brazil, Newbie Black, Pawg, Party of 3, Penny Show, Porn Star Spa, Power Munch, Public Bang, Slutty White Girls, Stepmom Videos, Street Ranger, Tugjobs, Virtual Porn, Working Latinas
galleryByURL:
- action: script
url:
- bangbros.com/video
- virtualporn.com/video
script:
- python
- BangBros.py
- gallery-by-url
galleryByFragment:
action: script
script:
- python
- BangBros.py
- gallery-by-fragment
sceneByURL:
- action: script
url:
- bangbros.com/video
- virtualporn.com/video
script:
- python
- BangBros.py
- scene-by-url
sceneByFragment:
action: script
script:
- python
- BangBros.py
- scene-by-fragment
sceneByName:
action: script
script:
- python
- BangBros.py
- scene-by-name
sceneByQueryFragment:
action: script
script:
- python
- BangBros.py
- scene-by-query-fragment
performerByName:
action: script
script:
- python
- BangBros.py
- performer-by-name
performerByURL:
- action: script
url:
- bangbros.com/model/
script:
- python
- BangBros.py
- performer-by-url
performerByFragment:
action: script
script:
- python
- BangBros.py
- performer-by-fragment
movieByURL:
- action: script
url:
- bangbros.com/movie
- virtualporn.com/movie
# Since scenes link to the movie we can scrape movies from scenes
- bangbros.com/video
- virtualporn.com/video
script:
- python
- BangBros.py
- movie-by-url
# Last Updated January 14, 2024

View File

@@ -0,0 +1,10 @@
id: BangBros
name: BangBros
metadata: {}
version: c2abfdf
date: "2024-02-03 17:45:33"
requires: []
source_repository: https://stashapp.github.io/CommunityScrapers/stable/index.yml
files:
- BangBros.py
- BangBros.yml