mirror of
https://github.com/stashapp/CommunityScrapers.git
synced 2025-12-13 16:46:15 -06:00
84 lines
2.0 KiB
Python
84 lines
2.0 KiB
Python
import json
|
|
import sys
|
|
import subprocess as sp
|
|
from datetime import datetime
|
|
from urllib.parse import urlparse
|
|
|
|
from py_common import graphql
|
|
from py_common import log
|
|
|
|
|
|
def parse_url(comment):
|
|
if urlparse(comment).scheme:
|
|
return comment
|
|
|
|
return None
|
|
|
|
|
|
def get_path(scene_id):
|
|
scene = graphql.getScene(scene_id)
|
|
if not scene:
|
|
log.error(f"Scene with ID '{scene_id}' not found")
|
|
return
|
|
|
|
if not scene["files"]:
|
|
log.error(f"Scene with ID '{scene_id}' has no files")
|
|
return
|
|
|
|
return scene["files"][0]["path"]
|
|
|
|
|
|
def scrape_file(path):
|
|
video_data = sp.check_output(
|
|
[
|
|
"ffprobe",
|
|
"-loglevel",
|
|
"error",
|
|
"-show_entries",
|
|
"format_tags",
|
|
"-of",
|
|
"json",
|
|
f"{path}",
|
|
],
|
|
text=True,
|
|
)
|
|
if not video_data:
|
|
log.error("Could not scrape video: ffprobe returned null")
|
|
return
|
|
|
|
metadata = json.loads(video_data)["format"]["tags"]
|
|
metadata_insensitive = {key.lower(): metadata[key] for key in metadata}
|
|
|
|
scene = {}
|
|
if title := metadata_insensitive.get("title"):
|
|
scene["title"] = title
|
|
|
|
if (comment := metadata_insensitive.get("comment")) and (url := parse_url(comment)):
|
|
scene["url"] = url
|
|
|
|
if description := metadata_insensitive.get("description"):
|
|
scene["details"] = description
|
|
|
|
if date := metadata_insensitive.get("date"):
|
|
scene["date"] = datetime.strptime(date, "%Y%m%d").strftime("%Y-%m-%d")
|
|
|
|
if date := metadata_insensitive.get("creation_time"):
|
|
scene["date"] = date[:10]
|
|
|
|
if artist := metadata_insensitive.get("artist"):
|
|
scene["performers"] = [{"name": artist}]
|
|
scene["studio"] = {"name": artist}
|
|
|
|
return scene
|
|
|
|
|
|
if __name__ == "__main__":
|
|
fragment = json.loads(sys.stdin.read())
|
|
path = get_path(fragment["id"])
|
|
if not path:
|
|
print("null")
|
|
sys.exit(1)
|
|
|
|
scraped = scrape_file(path)
|
|
print(json.dumps(scraped))
|