stash
This commit is contained in:
117
stash/config/scrapers/community/Traxxx/Traxxx.py
Normal file
117
stash/config/scrapers/community/Traxxx/Traxxx.py
Normal file
@@ -0,0 +1,117 @@
|
||||
import re, sys, copy, json
|
||||
|
||||
try:
|
||||
import requests
|
||||
except ModuleNotFoundError:
|
||||
print("You need to install the requests module. (https://docs.python-requests.org/en/latest/user/install/)", file=sys.stderr)
|
||||
print("If you have pip (normally installed with python), run this command in a terminal (cmd): pip install requests", file=sys.stderr)
|
||||
sys.exit()
|
||||
|
||||
try:
|
||||
import py_common.log as log
|
||||
except ModuleNotFoundError:
|
||||
print("You need to download the folder 'py_common' from the community repo! (CommunityScrapers/tree/master/scrapers/py_common)", file=sys.stderr)
|
||||
sys.exit()
|
||||
|
||||
try:
|
||||
from traxxx_interface import TraxxxInterface
|
||||
except ModuleNotFoundError:
|
||||
print("You need to download the file 'traxxx_interface.py' from the community repo! (CommunityScrapers/tree/master/scrapers/traxxx_interface.py)", file=sys.stderr)
|
||||
sys.exit()
|
||||
|
||||
def main():
|
||||
global traxxx
|
||||
|
||||
mode = sys.argv[1]
|
||||
traxxx = TraxxxInterface()
|
||||
fragment = json.loads(sys.stdin.read())
|
||||
|
||||
data = None
|
||||
|
||||
log.info(mode)
|
||||
|
||||
if mode == 'scene_name':
|
||||
data = scene_by_name(fragment)
|
||||
if mode == 'scene_url':
|
||||
data = scene_query_fragment(fragment)
|
||||
if mode == 'scene_query_fragment':
|
||||
data = scene_query_fragment(fragment)
|
||||
if mode == 'scene_fragment':
|
||||
data = scene_fragment(fragment)
|
||||
|
||||
if mode == 'performer_lookup':
|
||||
data = performer_lookup(fragment)
|
||||
if mode == 'performer_fragment':
|
||||
data = performer_fragment(fragment)
|
||||
if mode == 'performer_url':
|
||||
data = performer_url(fragment)
|
||||
|
||||
# log.info(json.dumps(data))
|
||||
print(json.dumps(data))
|
||||
|
||||
def search_traxxx_for_scene(fragment):
|
||||
title = fragment.get("title")
|
||||
if not title:
|
||||
title = fragment.get("name")
|
||||
if not title:
|
||||
return
|
||||
return traxxx.search_scenes(title)
|
||||
|
||||
# Return a list of scenes from a search
|
||||
def scene_by_name(fragment):
|
||||
scenes = search_traxxx_for_scene(fragment)
|
||||
if scenes:
|
||||
return [traxxx.parse_to_stash_scene_search(s) for s in scenes]
|
||||
else:
|
||||
log.warning("No scene results from Traxxx")
|
||||
return []
|
||||
|
||||
# extract TraxxxID from passed fragment and return new fragment
|
||||
def scene_query_fragment(fragment):
|
||||
traxxx_url = fragment.get("url", "")
|
||||
m = re.search(r'traxxx.me/scene/(\d+)/', traxxx_url)
|
||||
if not m:
|
||||
log.warning(f'could not parse scene ID from URL: {traxxx_url}')
|
||||
return
|
||||
scene_id = m.group(1)
|
||||
scene = traxxx.get_scene(scene_id)
|
||||
return traxxx.parse_to_stash_scene(scene)
|
||||
|
||||
# return first result from scene_name
|
||||
def scene_fragment(fragment):
|
||||
scenes = search_traxxx_for_scene(fragment)
|
||||
if scenes:
|
||||
return traxxx.parse_to_stash_scene(scenes[0])
|
||||
|
||||
# Return a list of possible performer matches
|
||||
def performer_lookup(fragment):
|
||||
performers = traxxx.search_performers(fragment["name"])
|
||||
if performers:
|
||||
return [traxxx.parse_to_stash_performer_search(p) for p in performers]
|
||||
else:
|
||||
log.warning("No performer results from Traxxx")
|
||||
return []
|
||||
|
||||
# Return a single best guess for performer based on fragment
|
||||
def performer_fragment(fragment):
|
||||
# check if fragment has Traxxx URL
|
||||
performer = performer_url(fragment)
|
||||
if performer:
|
||||
return performer
|
||||
|
||||
# search and take first result from lookup
|
||||
performer = performer_lookup(fragment)[0]
|
||||
return performer
|
||||
|
||||
# Get PerformerID from URL and do a lookup on it
|
||||
def performer_url(fragment):
|
||||
m = re.search(r'traxxx.me/actor/(\d+)/', fragment['url'])
|
||||
if not m:
|
||||
return
|
||||
performer_id = m.group(1)
|
||||
performer = traxxx.get_performer(performer_id)
|
||||
return traxxx.parse_to_stash_performer(performer)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user