-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathupdate_speakers_via_speaker_json_import.py
executable file
·84 lines (75 loc) · 3.48 KB
/
update_speakers_via_speaker_json_import.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#==============================================================================
# This script checks the speaker.json file in every event for new versions
# and imports the data
#
# In the database you can mark urls to ignore with a "#" at the beginning
#
# This script can be run as cronjob via an event but it is not necessary
#==============================================================================
import os
import sys
import json
from urllib import request
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "subtitleStatus.settings")
import django
django.setup()
from django.core.exceptions import ObjectDoesNotExist
from www.models import Event, Speaker, Speaker_Links
# Check all events, start always with the oldest
my_events = Event.objects.all().exclude(id = 3).order_by("start")
#all_urls = ["https://events.ccc.de/congress/2015/Fahrplan/speakers.json"]
# Check all events
for event in my_events:
print(event.title)
any_url = event.speaker_json_link
event.save_speaker_json_file()
# Stop here if the url starts with a '#' and start over with the next event
if any_url[0:1] == "#":
print("No active link, remove '#' to allow an update\n")
continue
response = request.urlopen(any_url)
result = response.read()
result = result.decode("utf8")
result = json.loads(result)
# Print Version
print(result["schedule_speakers"]["version"])
# if the version is the same than the one in the database, stop here
if event.speaker_json_version == result["schedule_speakers"]["version"]:
print("Not doing anything here, there is no new version available!\n")
continue
prefix = event.frab_id_prefix
# Iterate over any speaker
for any_speaker in result["schedule_speakers"]["speakers"]:
#print(any_speaker["id"])
#print(any_speaker["full_public_name"])
#print(any_speaker["abstract"])
#print(any_speaker["description"])
#for any_link in any_speaker["links"]:
#print(any_link["title"])
#print(any_link["url"])
# Get or create a speaker with the same frab id
my_speaker, created = Speaker.objects.get_or_create(frab_id = prefix + str(any_speaker["id"]))
# Only alter the entry if the name has changed
if len(any_speaker["full_public_name"]) <= 50 and my_speaker.name != any_speaker["full_public_name"]:
my_speaker.name = any_speaker["full_public_name"]
my_speaker.save()
elif len(any_speaker["full_public_name"]) > 50 and my_speaker.name != any_speaker["full_public_name"]:
my_speaker.name = my_speaker.name[0:50]
my_speaker.save()
# Only alter the entry if the abstract has changed
if my_speaker.abstract != any_speaker["abstract"]:
my_speaker.abstract = any_speaker["abstract"]
my_speaker.save()
# Only alter the entry if the description has changed
if my_speaker.description != any_speaker["description"]:
my_speaker.description = any_speaker["description"]
my_speaker.save()
# Save Link data form this speaker into the database
for any_link in any_speaker["links"]:
my_speaker_link, created = Speaker_Links.objects.get_or_create(speaker = my_speaker, title = any_link["title"], url = any_link["url"])
if created:
my_speaker_link.save()
event.speaker_json_version = result["schedule_speakers"]["version"]
event.save()