Add lists of ratings. v1.8.9
authorCarl Hetherington <cth@carlh.net>
Tue, 1 Mar 2022 16:06:26 +0000 (17:06 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 3 Mar 2022 20:58:31 +0000 (21:58 +0100)
ratings [new file with mode: 0644]
scripts/update-ratings [new file with mode: 0755]
src/rating.cc
src/rating.h
src/util.cc
wscript

diff --git a/ratings b/ratings
new file mode 100644 (file)
index 0000000..32bc3b9
--- /dev/null
+++ b/ratings
@@ -0,0 +1,1092 @@
+http://www.movielabs.com/md/ratings/AE/NMC-G/0
+MOI-G
+United Arab Emirates
+AE
+7
+12
+18
+21
+3
+16
+http://www.movielabs.com/md/ratings/AE/NMC/0
+MOI
+United Arab Emirates
+AE
+PG
+G
+PG13
+PG15
+15+
+18+
+http://www.movielabs.com/md/ratings/AR/INCAA/0
+INCAA
+Argentina
+AR
+Todo público
+mayores de 13
+mayores de 16
+mayores de 18
+condicionada
+http://www.movielabs.com/md/ratings/AT/BMUKK/2
+BMUKK
+Austria
+AT
+Freigaben für alle Altersstufen
+Freigaben ab 6 Jahren
+Freigaben ab 8 Jahren
+Freigaben ab 10 Jahren
+Freigaben ab 12 Jahren
+Freigaben ab 14 Jahren
+Freigaben ab 16 Jahren
+http://www.movielabs.com/md/ratings/AU/ACMA/1
+ACMA
+Australia
+AU
+The General (G) Classification
+The Parental Guidance Recommended (PG) Classification
+Children
+Preschool
+The Mature (M) Classification
+The Mature Audience (MA) Classification
+http://www.movielabs.com/md/ratings/AU/NCS/1
+NCS
+Australia
+AU
+General (G)
+Parental Guidance (PG)
+Mature (M)
+Mature Accompanied (MA 15+)
+Restricted (R 18+)
+Check the Classification (CTC)
+Restricted (X 18+)
+Refused Classification (RC)
+http://www.movielabs.com/md/ratings/BE/CICF/1
+CICF
+Belgium
+BE
+Exempt
+Kinderen Toegelaten
+Kinderen Niet Toegelaten
+http://www.movielabs.com/md/ratings/BE/CSA/1
+CSA
+Belgium/Wallonie
+BE
+déconseillés aux moins de 10 ans
+déconseillés aux moins de 12 ans
+déconseillés aux moins de 16 ans
+déconseillés aux moins de 18 ans
+interdits
+http://www.movielabs.com/md/ratings/BE/PEGI/0
+PEGI
+Belgium
+BE
+PEGI OK
+PEGI 3
+PEGI 7
+PEGI 12
+PEGI 16
+PEGI 18
+http://www.movielabs.com/md/ratings/BG/NFRC/3
+NFRC
+Bulgaria
+BG
+A
+B
+C
+D
+X
+http://www.movielabs.com/md/ratings/BH/MIA/0
+MIA
+Bahrain
+BH
+PG
+G
+PG-13
+PG-15
+15+
+18+
+http://www.movielabs.com/md/ratings/BN/Film/0
+Film
+Brunei Darussalam
+BN
+U
+A/PG
+X
+http://www.movielabs.com/md/ratings/BO/Film/0
+Film
+Bolivia
+BO
+Todo público
+14
+16
+18
+http://www.movielabs.com/md/ratings/BR/DJCTQ/5
+DJCTQ
+Brazil
+BR
+Especialmente recomendado para crianças e adolescentes
+Conteúdo varia de Livre a 14 anos
+Conteúdo varia de Livre a 16 anos
+Conteúdo varia de Livre a 18 anos
+Conteúdo varia de Livre a 10 anos
+Livre para todos os públicos
+Livre a 12 anos
+10 a 14 anos
+10 a 12 anos
+Não recomendado para menores de 10 anos
+10 a 18 anos
+10 a 16 anos
+12 a 18 anos
+12 a 16 anos
+12 a 14 anos
+Não recomendado para menores de 12 anos
+Não recomendado para menores de 14 anos
+14 a 18 anos
+14 a 16 anos
+Não recomendado para menores de 16 anos
+16 a 18 anos
+Não recomendado para menores de 18 anos
+http://www.movielabs.com/md/ratings/BY/IBC/0
+MKRF
+Belarus
+BY
+16+
+18+
+0
+6+
+12+
+http://www.movielabs.com/md/ratings/CA/AFC/2
+AFC
+Canada/Alberta
+CA
+General
+Parental Guidance
+14 Accompaniment
+18 Accompaniment
+Restricted
+http://www.movielabs.com/md/ratings/CA/CBSC-F/1
+CBSC-F
+Canada/Quebec
+CA
+General
+Exempt
+8 years and over
+13 years and over
+16 years and over
+18 years and over
+Refusal of classification
+http://www.movielabs.com/md/ratings/CA/CBSC/2
+CBSC
+Canada/Ontario
+CA
+Children
+Exempt
+C8
+General
+Parental Guidance
+Over 14 Years
+18 years and older.
+http://www.movielabs.com/md/ratings/CA/CHVRS/1
+CHVRS
+Canada
+CA
+E
+G
+PG
+14A
+18A
+R
+http://www.movielabs.com/md/ratings/CA/CPBC-T/2
+CPBC-T
+Canada/British Columbia
+CA
+AP
+SP
+Restricted
+Adult
+http://www.movielabs.com/md/ratings/CA/CPBC/2
+CPBC
+Canada/British Columbia
+CA
+General
+Parental Guidance
+14 Accompaniment
+18 Accompaniment
+Restricted
+Adult
+http://www.movielabs.com/md/ratings/CA/MFCB/2
+MFCB
+Canada/Prince Edward Island
+CA
+General
+Parental Guidance
+14 Accompaniment
+18 Accompaniment
+Restricted
+Adult
+Explicit Material
+Adult Accompaniment
+http://www.movielabs.com/md/ratings/CA/OFRB/2
+OFRB
+Canada/Ontario
+CA
+All
+Parental Guidance
+14 Accompanied
+14 Accompanied
+RESTRICTED
+http://www.movielabs.com/md/ratings/CA/RCQ/2
+RCQ
+Canada/Quebec
+CA
+General
+13 years and over
+16 years and over
+18 years and over
+Refusal of classification
+http://www.movielabs.com/md/ratings/CH/Film/2
+Film
+Switzerland
+CH
+Freigegeben ohne Altersbeschränkung (d.h. ab 0 Jahren)
+Freigegeben ab 6 Jahren
+Accès légal dès 8 ans (cinéma)
+Freigegeben ab 10 Jahren (Kino)
+Freigegeben ab 12 Jahren
+Freigegeben ab 14 Jahren (Kino)
+Freigegeben ab 16 Jahren
+Freigegeben ab 18 Jahren
+http://www.movielabs.com/md/ratings/CL/ANATEL/0
+ANATEL
+Chile
+CL
+Familiar
+Infantil
+Infantil para mayores de 7 años
+Infantil para mayores de 10 años
+Infantil para mayores de 12 años
+Responsabilidad compartida
+Adulto
+http://www.movielabs.com/md/ratings/CL/CCC/1
+CCC
+Chile
+CL
+Todo espectador
+Mayores de 6 años
+Mayores de 14 años
+Mayores de 18 años
+http://www.movielabs.com/md/ratings/CO/MOC/1
+MOC
+Colombia
+CO
+Exempt
+T
+7
+12
+15
+18
+X
+Banned
+http://www.movielabs.com/md/ratings/CR/CCEP/0
+CCEP
+Costa Rica
+CR
+15
+18
+I
+TP
+TP12
+12
+http://www.movielabs.com/md/ratings/CZ/Film/1
+Film
+Czech Republic
+CZ
+U
+12
+14
+15
+18
+http://www.movielabs.com/md/ratings/DE/FSF/1
+FSF
+Germany
+DE
+0
+6
+12
+
+16
+18
+X
+http://www.movielabs.com/md/ratings/DE/FSK/1
+FSK
+Germany
+DE
+FSK ab 0 freigegeben/Freigegeben ohne Altersbeschränkung
+FSK ab 6 freigegeben
+FSK ab 12 freigegeben
+FSK ab 16 freigegeben
+FSK ab 18/Keine Jugendfreigabe
+Keine Kennzeichnung
+http://www.movielabs.com/md/ratings/DK/MCCYP/1
+MCCYP
+Denmark
+DK
+A
+7
+Approval of the film for admittance of children from the age of 11
+Approval of the film for admittance of children from the age of 15
+http://www.movielabs.com/md/ratings/EC/CNE/0
+CNE
+Ecuador
+EC
+Todo público
+12 años
+15 años
+18 años
+21 años
+http://www.movielabs.com/md/ratings/EC/TV/0
+TV
+Ecuador
+EC
+C
+A
+B
+http://www.movielabs.com/md/ratings/EE/Film/1
+Film
+Estonia
+EE
+PERE
+L
+MS-6
+K-6
+MS-12
+K-12
+K-14
+K-16
+http://www.movielabs.com/md/ratings/EG/Film/2
+Film
+Egypt
+EG
+16
+GN
+12+
+18
+BANNED
+http://www.movielabs.com/md/ratings/ES/ICAA/2
+ICAA
+Spain
+ES
+APTA
+ER
+7
+12
+13
+16
+18
+X
+http://www.movielabs.com/md/ratings/FI/MEKU/2
+MEKU
+Finland
+FI
+Sallittu kaikenikäisille
+Sallittu yli 7-vuotiaille
+Sallittu yli 12-vuotiaille
+Förbjudet under 18 år
+Förbjudet under 18 år
+http://www.movielabs.com/md/ratings/FR/CNC/3
+CNC
+France
+FR
+visa autorisant, pour tous publics, la représentation de l'œuvre
+visa comportant interdiction de représentation aux mineurs de douze ans
+visa comportant interdiction de représentation aux mineurs de seize ans
+visa comportant interdiction de représentation aux mineurs de dix-huit ans
+visa comportant interdiction totale de l'œuvre
+http://www.movielabs.com/md/ratings/FR/CSA/3
+CSA
+France
+FR
+déconseillés aux moins de 10 ans
+déconseillés aux moins de 12 ans
+déconseillés aux moins de 16 ans
+déconseillés aux moins de 18 ans
+interdits
+http://www.movielabs.com/md/ratings/GB/BBFC/1
+BBFC
+United Kingdom
+GB
+Universal
+Parental Guidance
+Accompanied under 12
+12 and Older
+15 and Older
+18 and Older
+RESTRICTED 18 and Older
+http://www.movielabs.com/md/ratings/GR/Film/0
+Film
+Greece
+GR
+K
+Exempt
+K-12
+K-13
+K-15
+K-17
+18+
+http://www.movielabs.com/md/ratings/HK/FCO/1
+FCO
+Hong Kong
+HK
+Category I
+Category IIA
+Category IIB
+Category III
+http://www.movielabs.com/md/ratings/HN/Film/0
+Film
+Honduras
+HN
+G
+12 años
+15 años
+18 años
+http://www.movielabs.com/md/ratings/HR/HAVC/0
+HAVC
+Croatia
+HR
+SU
+12
+15
+18
+http://www.movielabs.com/md/ratings/HU/RCNOF/2
+RCNOF
+Hungary
+HU
+I
+II
+III
+IV
+V
+VI
+http://www.movielabs.com/md/ratings/ID/LSF/1
+LSF
+Indonesia
+ID
+Semua Umur
+Anak-anak
+13+
+17+
+21+
+http://www.movielabs.com/md/ratings/IE/IFCOF/1
+IFCOF
+Ireland
+IE
+General Audiences
+Parental Guidance
+12A
+15A
+16
+18
+http://www.movielabs.com/md/ratings/IE/IFCO/1
+IFCO
+Ireland
+IE
+General
+PARENTAL GUIDANCE
+12
+15
+18
+http://www.movielabs.com/md/ratings/IE/RTE/0
+RTE
+Ireland
+IE
+Children
+General Audience
+Parental supervision
+Suggested for mature audience
+http://www.movielabs.com/md/ratings/IL/Film/0
+Film
+Israel
+IL
+לכל
+12
+14
+16
+18
+http://www.movielabs.com/md/ratings/IN/CBFC/2
+CBFC
+India
+IN
+Unrestricted
+Unrestricted - Parental Discretion
+Adults
+S
+Unrestricted for 7+- Parental Discretion
+Unrestricted for 13+- Parental Discretion
+Unrestricted for 16+- Parental Discretion
+http://www.movielabs.com/md/ratings/IS/FRISK/0
+FRISK
+Iceland
+IS
+L
+6
+9
+12
+16
+18
+http://www.movielabs.com/md/ratings/IS/SMAIS/2
+SMAIS
+Iceland
+IS
+L
+7
+12
+14
+16
+18
+http://www.movielabs.com/md/ratings/IT/AGCOM/1
+AGCOM
+Italy
+IT
+Pellicola per tutti
+14 anni
+18 anni
+6 and Over
+http://www.movielabs.com/md/ratings/IT/MBACT/2
+MBACT
+Italy
+IT
+T
+VM14
+VM16
+VM18
+http://www.movielabs.com/md/ratings/JO/MC-JO/0
+MC-JO
+Jordan
+JO
+PG
+General Audiences
+PG13
+PG15
+15+
+18+
+http://www.movielabs.com/md/ratings/JP/ERIN/1
+EIRIN
+Japan
+JP
+General
+Parental guidance - 12 and Above
+15 and above only
+18 and above only
+http://www.movielabs.com/md/ratings/KE/KFCB/1
+KFCB
+Kenya
+KE
+General Exhibition
+Parental Guidance Recommended
+16+
+R
+http://www.movielabs.com/md/ratings/KH/MCFA-KH/0
+MCFA-KH
+Cambodia
+KH
+G
+PG-13
+NC-15
+R-18
+http://www.movielabs.com/md/ratings/KR/KCC/1
+KCC
+Korea, Rep
+KR
+All
+7+
+12+
+15+
+19+
+http://www.movielabs.com/md/ratings/KR/KMRB/4
+KMRB
+Korea, Rep
+KR
+전체 관람가
+12세 이상 관람가
+15세 이상 관람가
+청소년 관람불가
+제한관람가
+http://www.movielabs.com/md/ratings/KW/KCB/0
+KCB
+Kuwait
+KW
+PG
+G
+12+
+13+
+15+
+18+
+http://www.movielabs.com/md/ratings/KZ/KCB/0
+KCB
+Kazakhstan
+KZ
+K
+12
+14
+16
+18
+HA
+http://www.movielabs.com/md/ratings/LB/LCB/0
+LCB
+Lebanon
+LB
+PG
+G
+PG13
+PG16
+18+
+R21
+http://www.movielabs.com/md/ratings/LT/LKC/0
+LKC
+Lithuania
+LT
+V
+N-7
+N-13
+N-16
+N-18
+http://www.movielabs.com/md/ratings/LU/CSCF/1
+CSCF
+Luxembourg
+LU
+T
+Tous
+6
+12
+16
+18
+http://www.movielabs.com/md/ratings/LV/NKC-LV/1
+NKC-LV
+Latvia
+LV
+U
+7+
+12+
+16+
+18+
+http://www.movielabs.com/md/ratings/MT/MCCAA/1
+MCCAA
+Malta
+MT
+Universal
+PG
+12A
+12
+14
+15
+16
+18
+http://www.movielabs.com/md/ratings/MV/NBC/1
+NBC
+Maldives
+MV
+General
+Parental Guidance
+12+
+15+
+18+
+18+R
+PU
+http://www.movielabs.com/md/ratings/MX/RTC/1
+RTC
+Mexico
+MX
+AA
+A
+B
+B15
+C
+D
+http://www.movielabs.com/md/ratings/MY/FCBM/1
+FCBM
+Malaysia
+MY
+U
+P13
+18
+18SX
+18PA
+18SG
+18PL
+http://www.movielabs.com/md/ratings/NG/NFVCB/1
+NFVCB
+Nigeria
+NG
+G
+PG
+12
+12A
+15
+18
+RE
+http://www.movielabs.com/md/ratings/NL/Kijkwijzer/2
+Kijkwijzer
+Netherlands
+NL
+AL
+6
+9
+12
+14 jaar
+16
+18 jaar
+http://www.movielabs.com/md/ratings/NO/Medietilsynet/3
+Medietilsynet
+Norway
+NO
+Tillaten for alle
+6
+7
+9
+11 år
+12
+15
+18
+http://www.movielabs.com/md/ratings/NZ/OFLC/3
+OFLC
+New Zealand
+NZ
+Suitable for general audiences
+Parental guidance recommended for younger viewers
+Restricted to persons 13 years of age and over unless accompanied by parent/guardian
+Restricted to persons 13 years of age and over
+Restricted to persons 15 years of age and over
+Suitable for (but not restricted to) mature audiences 16 years and up
+Restricted to persons 16 years of age and over unless accomp[anied by Parent/Guardian
+Restricted to persons 16 years of age and over
+Restricted to persons 18 years of age and over unless accomp[anied by Parent/Guardian
+Restricted to persons 18 years of age and over
+Restricted to a particular class of persons, or for particular purposes, or both, specified by the Office of Film and Literature Classification
+Unsuitable for Audiences under 13 years of age.
+Unsuitable for Audiences under 16 years of age.
+Unsuitable for Audiences under 18 years of age.
+http://www.movielabs.com/md/ratings/PE/Film/0
+Film
+Peru
+PE
+PT
+PG
+14
+18
+http://www.movielabs.com/md/ratings/PH/MTRCB/1
+MTRCB
+Philippines
+PH
+GENERAL PATRONAGE
+GENERAL AUDIENCE
+PARENTAL GUIDANCE
+PARENTAL GUIDANCE
+STRONG PARENTAL GUIDANCE
+RESTRICTED–13
+RESTRICTED–16
+RESTRICTED–18
+X: NOT FOR PUBLIC EXHIBITION
+http://www.movielabs.com/md/ratings/PL/NBC-PL/1
+NBC-PL
+Poland
+PL
+All / I
+7 / II
+12 / III
+16 / IV
+inne przekazy dozwolone od lat 18
+http://www.movielabs.com/md/ratings/PT/CCE/0
+CCE
+Portugal
+PT
+A
+M/3
+M/4
+M/6
+M/12
+M/16
+M/18
+M/18-P
+http://www.movielabs.com/md/ratings/RO/CNA/1
+CNA
+Romania
+RO
+AP
+12
+15
+18
+18+
+G
+http://www.movielabs.com/md/ratings/RU/MKRF/1
+MKRF
+Russia
+RU
+0+
+6+
+12+
+14
+16+
+18+
+http://www.movielabs.com/md/ratings/SA/GCAM/0
+CIC-SA
+Saudi Arabia
+SA
+G
+PG
+PG12
+R12
+R15
+R18
+http://www.movielabs.com/md/ratings/SE/SM-SA/1
+SM-SA
+Sweden
+SE
+Barntillåten
+7-årsgränsen
+11-årsgränsen
+15-årsgränsen
+http://www.movielabs.com/md/ratings/SG/MDA-VG/1
+MDA-VG
+Singapore
+SG
+Advisory 16
+Mature 18
+http://www.movielabs.com/md/ratings/SG/MDA/2
+MDA
+Singapore
+SG
+General
+Parental Guidance
+Parental Guidance 13
+No Children Under 16
+Mature 18
+Restricted 21
+http://www.movielabs.com/md/ratings/SK/Film/1
+Film
+Slovakia
+SK
+G
+7
+PG-12
+PG-15
+PG-18
+http://www.movielabs.com/md/ratings/SK/SK_TV/0
+TV
+Slovakia
+SK
+15
+18
+G
+U
+E7-
+E7+
+E12
+E15
+7
+12
+http://www.movielabs.com/md/ratings/SV/Film/0
+Film
+El Salvador
+SV
+AA
+A
+B
+C
+D
+E
+http://www.movielabs.com/md/ratings/TH/BFVC/0
+BFVC
+Thailand
+TH
+General audience
+Educational
+13
+15
+18
+20
+BANNED
+http://www.movielabs.com/md/ratings/TR/AI/1
+AI
+Turkey
+TR
+General Audience
+For Ages 7 and Up
+For Ages 13 and Up
+For Ages 18 and Up
+http://www.movielabs.com/md/ratings/TR/IBMCT/0
+IBMCT
+Turkey
+TR
+GA
+7A
+7+
+13A
+13+
+15A
+15+
+18+
+http://www.movielabs.com/md/ratings/TW/MOC-TW-TV/0
+MOC-TW-TV
+Taiwan
+TW
+G
+P
+PG-12
+PG-15
+R
+http://www.movielabs.com/md/ratings/TW/MOC-TW/2
+MOC-TW
+Taiwan
+TW
+General audiences
+Protected
+Parental guidance
+Restricted-12
+Restricted-15
+Restricted
+http://www.movielabs.com/md/ratings/UA/Ukraine/2
+Ukraine
+Ukraine
+UA
+ДА
+12
+ЗА
+14
+16
+18
+Х21
+Відмовлено
+http://www.movielabs.com/md/ratings/US/ESRB/0
+ESRB
+United States
+US
+Pending
+Early Childhood
+Everyone
+Everyone 10+
+Teen
+Mature
+Adults Only
+http://www.movielabs.com/md/ratings/US/FAB/3
+FAB
+United States
+US
+FAMILY
+CHILDREN
+PARENTAL DESCRETION
+PARENTAL DESCRETION MATURE
+MATURE
+VERY MATURE
+EXTREMELY MATURE
+ADULTS ONLY
+http://www.movielabs.com/md/ratings/US/MPAAT/1
+MPAAT
+United States
+US
+Green Band
+Red Band
+http://www.movielabs.com/md/ratings/US/MPAA/2
+MPAA
+United States
+US
+General Audiences
+Parental Guidance Suggested
+Mature Audiences
+Parental Guidance Suggested
+Parents Strongly Cautioned
+Restricted
+No One 17 and Under Admitted
+No One 17 and Under Admitted
+http://www.movielabs.com/md/ratings/US/RIAA/0
+RIAA
+United States
+US
+Parental Advisory
+http://www.movielabs.com/md/ratings/US/TVPG/2
+TVPG
+United States
+US
+All Children
+General Audience
+Directed to Older Children
+Directed to Older Children- Fantasy Violence
+Parental Guidance Suggested
+Parents Strongly Cautioned
+Mature Audience Only
+http://www.movielabs.com/md/ratings/-t.b.d.-/-t.b.d.-/0
+INAU
+Uruguay
+UY
+6
+9
+12
+15
+18
+TP
+http://www.movielabs.com/md/ratings/VE/RESORTE-Health/1
+RESORTE-Health
+Venezuela
+VE
+Salud Type-A
+Salud Type-B
+Salud Type-C
+Salud Type-D
+http://www.movielabs.com/md/ratings/VE/RESORTE-Language/1
+RESORTE-Language
+Venezuela
+VE
+Language Type-A
+Language Type-B
+Lenguaje Type-C
+http://www.movielabs.com/md/ratings/VE/RESORTE-Sexo/1
+RESORTE-Sexo
+Venezuela
+VE
+>Sexo Type-A
+>Sexo Type-B
+>Sexo Type-C
+>Sexo Type-D
+>Sexo Type-E
+http://www.movielabs.com/md/ratings/VE/RESORTE-Violencia/1
+RESORTE-Violencia
+Venezuela
+VE
+Violencia Type-A
+Violencia Type-B
+Violencia Type-C
+Violencia Type-D
+Violencia Type-E
+http://www.movielabs.com/md/ratings/VN/MCST/2
+MCST
+Viet Nam
+VN
+P
+0
+C13
+C16
+16+
+C18
+NYR
+http://www.movielabs.com/md/ratings/ZA/FPB/4
+FPB
+South Africa
+ZA
+A
+PG
+7-9-PG
+10
+10M
+10-12-PG
+13
+16
+18
+X18
+XX
+http://www.movielabs.com/md/ratings/ZZ/UNRATED/0
+UNRATED
+Global
+ZZ
+All Audiences
+UNRATED
+Adults
+PROSCRIBED
diff --git a/scripts/update-ratings b/scripts/update-ratings
new file mode 100755 (executable)
index 0000000..5e69223
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/python3
+
+import sys
+import urllib.request
+
+import bs4
+
+# Output is
+# URI (for DCP metadata)
+# Name/ID of rating system
+# Country[/Region]
+# Country code
+# Rating label
+
+
+with urllib.request.urlopen('https://www.movielabs.com/md/ratings/v2.4.8/CMR_Ratings_v2.4.8.xml') as f, open('ratings', 'w') as g:
+#with open('CMR_Ratings_v2.4.8.xml') as f, open('ratings', 'w') as g:
+    soup = bs4.BeautifulSoup(f.read(), 'xml')
+    for system in soup.find_all('mdcr:RatingSystem'):
+        print(system.URI.get_text(), file=g)
+        print(system.RatingSystemID.System.get_text(), file=g)
+        if system.AdoptiveRegion.SubRegion:
+            print(system.Region.RegionName.get_text().title() + "/" + system.AdoptiveRegion.SubRegion.get_text(), file=g)
+        else:
+            print(system.Region.RegionName.get_text().title(), file=g)
+        print(system.Region.country.get_text(), file=g)
+        for rating in system("Rating"):
+            print(rating.Descriptor.Label.get_text(), file=g)
+
index 2064c64459097facfaea26bb5f8a4f79f262d8a8..0ba9f2b8e8af3ee3033faeb1075b51018442e91a 100644 (file)
 */
 
 
+#include "exceptions.h"
 #include "rating.h"
+#include "util.h"
 #include <libcxml/cxml.h>
+#include <boost/algorithm/string.hpp>
 
 
+using std::string;
+using std::vector;
+using boost::algorithm::trim;
+using boost::optional;
 using namespace dcp;
 
 
+static vector<RatingSystem> rating_systems_list;
+
+
 Rating::Rating (cxml::ConstNodePtr node)
        : agency(node->string_child("Agency"))
        , label(node->string_child("Label"))
@@ -62,3 +72,66 @@ dcp::operator== (Rating const & a, Rating const & b)
 }
 
 
+vector<RatingSystem>
+dcp::rating_systems()
+{
+       return rating_systems_list;
+}
+
+
+void
+dcp::load_rating_list(boost::filesystem::path ratings_file)
+{
+       auto f = fopen_boost (ratings_file, "r");
+       if (!f) {
+               throw FileError ("Could not open ratings file", ratings_file, errno);
+       }
+
+       auto get_line_no_throw = [f, ratings_file]() -> optional<string> {
+               char buffer[512];
+               char* r = fgets(buffer, sizeof(buffer), f);
+               if (r == 0) {
+                       return {};
+               }
+               string a = buffer;
+               trim(a);
+               return a;
+       };
+
+       auto get_line = [f, ratings_file, &get_line_no_throw]() {
+               auto line = get_line_no_throw();
+               if (!line) {
+                       throw FileError("Bad ratings file", ratings_file, -1);
+               }
+               return *line;
+       };
+
+       optional<string> agency;
+
+       while (!feof(f)) {
+               if (!agency) {
+                       agency = get_line();
+               }
+               auto name = get_line();
+               auto country_and_region_names = get_line();
+               auto country_code = get_line();
+
+               RatingSystem system(*agency, name, country_and_region_names, country_code);
+               while (!feof(f)) {
+                       auto rating = get_line_no_throw();
+                       if (!rating) {
+                               /* End of the file */
+                               break;
+                       }
+                       if (rating->substr(0, 4) == "http") {
+                               /* End of the system */
+                               agency = rating;
+                               break;
+                       }
+                       system.ratings.push_back(dcp::Rating(*agency, *rating));
+               }
+
+               rating_systems_list.push_back(system);
+       }
+}
+
index 0fb912b31fc99163d2fe130db1734df374440715..cd6ce52064fea0a41386f4340ca07aa0ad2885e7 100644 (file)
@@ -69,6 +69,33 @@ public:
 extern bool operator== (Rating const & a, Rating const & b);
 
 
+class RatingSystem
+{
+public:
+       RatingSystem (std::string agency_, std::string name_, std::string country_and_region_names_, std::string country_code_)
+               : agency(agency_)
+               , name(name_)
+               , country_and_region_names(country_and_region_names_)
+               , country_code(country_code_)
+       {}
+
+       /** URI of the agency issuing the rating */
+       std::string agency;
+       /** Name of the rating system */
+       std::string name;
+       /** Country name, possibly followed by a slash and a region name */
+       std::string country_and_region_names;
+       /** Country code */
+       std::string country_code;
+
+       std::vector<Rating> ratings;
+};
+
+
+std::vector<RatingSystem> rating_systems();
+
+void load_rating_list(boost::filesystem::path ratings_file);
+
 }
 
 
index 7a5733c2d590178dcb6c807b7406ba840b56d94a..ed3fb772169f016f26f014bed2f91819d18f30a0 100644 (file)
  */
 
 
-#include "util.h"
-#include "language_tag.h"
-#include "exceptions.h"
-#include "types.h"
 #include "certificate.h"
-#include "openjpeg_image.h"
-#include "dcp_assert.h"
 #include "compose.hpp"
+#include "dcp_assert.h"
+#include "exceptions.h"
+#include "language_tag.h"
+#include "openjpeg_image.h"
+#include "rating.h"
+#include "types.h"
+#include "util.h"
 #include <openjpeg.h>
 #include <asdcp/KM_util.h>
 #include <asdcp/KM_fileio.h>
@@ -194,7 +195,10 @@ dcp::init (optional<boost::filesystem::path> given_resources_directory)
 
        asdcp_smpte_dict = &ASDCP::DefaultSMPTEDict();
 
-       load_language_tag_lists (given_resources_directory.get_value_or(resources_directory()) / "tags");
+       auto res = given_resources_directory.get_value_or(resources_directory());
+
+       load_language_tag_lists (res / "tags");
+       load_rating_list (res / "ratings");
 }
 
 
diff --git a/wscript b/wscript
index 71733e99ee1a4bd5b35935baee0176df57d4a2d1..1f5c30002f87f886a55a6241d1fe8ab5d28d67c2 100644 (file)
--- a/wscript
+++ b/wscript
@@ -262,6 +262,8 @@ def build(bld):
     for i in ['language', 'region', 'script', 'variant', 'extlang', 'dcnc']:
         bld.install_files('${PREFIX}/share/libdcp/tags', os.path.join('tags', i))
 
+    bld.install_files('${PREFIX}/share/libdcp', 'ratings')
+
     bld.add_post_fun(post)
 
 def dist(ctx):