ytarchiver

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 33fe8ae2c6fe32528213fee813833cb1d18699dd
Author: lash <dev@holbrook.no>
Date:   Mon,  3 Aug 2026 15:24:00 -0600

Initial commit

Diffstat:
Acomplete.py | 106+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 106 insertions(+), 0 deletions(-)

diff --git a/complete.py b/complete.py @@ -0,0 +1,106 @@ +import json +import sys +import logging +import os +import urllib.request + +import lxml.etree + +logging.basicConfig(level=logging.DEBUG) +logg = logging.getLogger() + +class YTMeta: + + def __init__(self, tree=None, remote=None): + self.o = tree + self.fp = None + self.base = None + self.wd = None + self.remote = remote + + + def load_nfo(self, fp): + s = os.path.basename(fp) + self.wd = os.path.dirname(fp) + v = os.path.splitext(s) + self.base = v[0] + self.fp = fp + f = open(fp, 'r') + s = f.read() + f.close() + self.o = lxml.etree.fromstring(s) + + + def load_json(self, fp): + if self.o == None: + raise AttributeError('no nfo tree') + f = open(fp, 'r') + o = json.load(f) + f.close() + self.process(o) + + + def process(self, o): + self.process_tags(o) + self.process_thumb(o) + + + def process_tags(self, o): + for v in o['tags']: + logg.info('add tag {}'.format(v)) + element = lxml.etree.Element('tag') + element.text = v + self.o.append(element) + + + def process_thumb(self, o): + s = o['thumbnail'] + ext = os.path.splitext(s)[1] + fp = None + with urllib.request.urlopen(s) as response: + b = response.read() + fp = '{}-poster{}'.format(self.base, ext) + fp = os.path.join(self.wd, fp) + f = open(fp, 'wb') + f.write(b) + f.close() + + #element = lxml.etree.Element("thumb") + #element.text = fp + #self.o.append(element) + + + def save(self, w=None): + close = False + if w == None: + if self.fp == None: + raise AttributeError('missing file path') + w = open(self.fp, 'w') + close = True + w.write(str(self)) + if close: + w.close() + + + def __str__(self): + return lxml.etree.tostring(self.o).decode('utf-8') + + +def main(): + ofp = os.path.realpath(sys.argv[1]) + d = os.path.dirname(ofp) + try: + ifp = os.path.realpath(sys.argv[2]) + except IndexError: + ifp = os.path.splitext(ofp)[0] + '.info.json' + + o = YTMeta() + logg.debug('json {}, nfo {}'.format(ifp, ofp)) + + o.load_nfo(ofp) + o.load_json(ifp) + o.save() + + +if __name__ == '__main__': + main()