add script to generate html, update tree
This commit is contained in:
parent
6a8450e773
commit
024b74dcea
2 changed files with 122 additions and 0 deletions
97
ontology/ontology.py
Normal file
97
ontology/ontology.py
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
import getpass
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import ox
|
||||||
|
import ox.web.auth
|
||||||
|
|
||||||
|
def parse_nodes(parents, nodes):
|
||||||
|
global strings
|
||||||
|
parsed = []
|
||||||
|
for name, children in nodes.items():
|
||||||
|
full_name = name if not parents else '{}: {}'.format(parents, name)
|
||||||
|
children = parse_nodes(full_name, children)
|
||||||
|
if not children:
|
||||||
|
strings.add(full_name)
|
||||||
|
parsed.append({
|
||||||
|
'name': full_name,
|
||||||
|
'children': children
|
||||||
|
})
|
||||||
|
return parsed
|
||||||
|
|
||||||
|
# get strings ("a: b: c: d") and parents ({"c": "a: b"})
|
||||||
|
strings = set()
|
||||||
|
data = json.loads(open('ontology.json').read())
|
||||||
|
parse_nodes('', data)
|
||||||
|
parents = {}
|
||||||
|
for string in sorted(strings):
|
||||||
|
parts = string.split(': ')
|
||||||
|
grandparent = ': '.join(parts[:-2])
|
||||||
|
parent = parts[-2]
|
||||||
|
parents[parent] = grandparent
|
||||||
|
|
||||||
|
# sign in
|
||||||
|
site = 'pandora.cinemusespace.com'
|
||||||
|
api = ox.API('https://{}/api/'.format(site))
|
||||||
|
update = False
|
||||||
|
try:
|
||||||
|
credentials = ox.web.auth.get(site)
|
||||||
|
except:
|
||||||
|
print('Please enter your username and password for {}:'.format(site))
|
||||||
|
credentials = {}
|
||||||
|
credentials['username'] = input('Username: ')
|
||||||
|
credentials['password'] = getpass.getpass('Password: ')
|
||||||
|
update = True
|
||||||
|
r = api.signin(**credentials)
|
||||||
|
if 'errors' in r.get('data', {}):
|
||||||
|
print(r['data'])
|
||||||
|
for kv in r['data']['errors'].items():
|
||||||
|
print('{}: {}'.format(*kv))
|
||||||
|
sys.exit(1)
|
||||||
|
if (update):
|
||||||
|
ox.web.auth.update(site, credentials)
|
||||||
|
|
||||||
|
# find keywords, add strings, count items for children and parents
|
||||||
|
child_items = {}
|
||||||
|
parent_items = {}
|
||||||
|
keywords = api.find({
|
||||||
|
'group': 'keywords',
|
||||||
|
'query': {
|
||||||
|
'conditions': [],
|
||||||
|
'operator': '&'
|
||||||
|
},
|
||||||
|
'range': [0, 1000000],
|
||||||
|
'sort': [{'key': 'name', 'operator': '-'}]
|
||||||
|
})['data']['items']
|
||||||
|
for keyword in keywords:
|
||||||
|
if not keyword['name']:
|
||||||
|
continue
|
||||||
|
parent = keyword['name'].split(': ')[0]
|
||||||
|
if parent in parents:
|
||||||
|
string = '{}: {}'.format(parents[parent], keyword['name'])
|
||||||
|
else:
|
||||||
|
string = '{}: {}'.format('unknown', keyword['name'])
|
||||||
|
if not parent:
|
||||||
|
parent = 'unknown'
|
||||||
|
strings.add(string)
|
||||||
|
child_items[string] = keyword['items']
|
||||||
|
parent_items[parent] = parent_items.get(parent, 0) + keyword['items']
|
||||||
|
|
||||||
|
# create html
|
||||||
|
html = []
|
||||||
|
for string in sorted(strings):
|
||||||
|
parts = string.split(': ')
|
||||||
|
parts_ = [p for p in parts]
|
||||||
|
if parts[-2] != 'unknown' and parts[-2] in parent_items:
|
||||||
|
parts_[-2] = '<a href="https://{}/clip/text/keywords={}:*" target="_blank" title="{}">{}</a>'.format(
|
||||||
|
site, parts[-2].replace(' ', '_'),
|
||||||
|
parent_items[parts[-2]], parts[-2]
|
||||||
|
)
|
||||||
|
if string in child_items:
|
||||||
|
parts_[-1] = '<a href="https://{}/clip/text/keywords=={}:_{}" target="_blank" title="{}">{}</a>'.format(
|
||||||
|
site, parts[-2].replace(' ', '_'), parts[-1].replace(' ', '_'),
|
||||||
|
child_items[string], parts[-1]
|
||||||
|
)
|
||||||
|
html.append(': '.join(parts_))
|
||||||
|
template = open('ontology_template.html').read()
|
||||||
|
open('ontology.html', 'w').write(template.replace('{TREE}', '<br>\n '.join(html)))
|
25
ontology/ontology_template.html
Normal file
25
ontology/ontology_template.html
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>ontology</title>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
color: #808080;
|
||||||
|
font-family: Helvetica, sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: #4040c0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{TREE}
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in a new issue