pandora_amp/import_scripts/london_imc_import.py
2019-05-02 21:31:46 +02:00

105 lines
3.5 KiB
Python

#!/usr/bin/python3
from datetime import datetime
import os
import re
import ox
import lxml.html
def parse_info(f):
info = {}
with open(f) as fd:
html = fd.read()
doc = lxml.html.document_fromstring(html)
mp4 = [a for a in doc.xpath('.//a') if a.text_content() == '"MP4"']
if not mp4:
return None
mp4 = mp4[0].attrib['href']
info['mp4'] = 'london.indymedia.org/shared' + mp4
if os.path.exists(info['mp4']):
info['oshash'] = ox.oshash(info['mp4'])
else:
print('video missing', info['mp4'])
return None
info['title'] = doc.xpath('.//h1[contains(@class, "title")]')[0].text_content().strip()
info['links'] = ['http://london.indymedia.org/videos/%s' % f.split('/')[-1].split('.')[0]]
info['summary'] = lxml.html.tostring(doc.xpath('.//div[contains(@class, "singlepost")]')[0].xpath('.//p')[-1]).decode().strip()[3:-4]
byline = doc.xpath('.//p[contains(@class, "byline")]')[0]
uploader = byline.xpath('.//strong')[0].text_content().strip()
info['summary'] += '<br>\n<br>\nCreator: %s' % uploader
info['depositor'] = uploader
info['collection'] = 'Indymedia London'
published = byline.xpath('.//small')[0].text_content().strip()
published = published.replace('Published:', '').strip()
published = datetime.strptime(published, '%B %d, %Y %H:%M').strftime('%Y-%m-%d %H:%M')
info['date'] = published
group = [a for a in doc.xpath('.//a') if '/groups/' in a.attrib.get('href', '')]
if group:
group = group[0].text_content().strip()
info['summary'] += '<br>\n<br>\nGroup: %s' % group
tags = [a for a in doc.xpath('.//a') if '/about/' in a.attrib.get('href', '')]
if tags:
info['themes'] = [t.text_content().strip().replace('_', ' ') for t in tags]
info['themes'] = [t for t in info['themes'] if t not in ('repression', 'solidarity')]
if not info['themes']:
del info['themes']
tags = [a for a in doc.xpath('.//a') if '/in/' in a.attrib.get('href', '')]
if tags:
info['location'] = ', '.join([t.text_content().strip().replace('_', ' ') for t in tags])
return info
def parse_folder(base='london.indymedia.org/shared/system/cache/videos'):
index = []
for root, folders, files in os.walk(base):
for f in files:
f = os.path.join(root, f)
if f.endswith('.html'):
#print(f)
info = parse_info(f)
if info:
index.append(info)
return index
def import_video(api, info):
if not api.findMedia({
'query': {
'conditions': [{'key': 'oshash', 'value': info['oshash']}]
}
})['data']['items']:
filename = info['mp4']
oshash = info['oshash']
avinfo = ox.avinfo(filename)
if 'path' in avinfo:
del avinfo['path']
r = api.addMedia({
'id': oshash,
'filename': os.path.basename(filename),
'info': avinfo
})
item_id = r['data']['item']
url = '%supload/direct/' % api.url
if api.upload_chunks(url, filename, {'id': oshash}):
del info['oshash']
del info['mp4']
info['id'] = item_id
api.edit(info)
else:
return False
return True
if __name__ == '__main__':
index = parse_folder()
api = ox.api.signin('https://amp.0x2620.org/api/')
for i in index:
if not import_video(api, i):
print('!! failed', i['links'])