commit 33fe8ae2c6fe32528213fee813833cb1d18699dd
Author: lash <dev@holbrook.no>
Date: Mon, 3 Aug 2026 15:24:00 -0600
Initial commit
Diffstat:
| A | complete.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()