Implemented first parsing of header and posttext.

This commit is contained in:
sv-ncp-3 root 2014-09-19 16:57:51 +02:00
parent 24cc46b455
commit 46175bc659
2 changed files with 50 additions and 2 deletions

View File

@ -1,11 +1,58 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
class IPTCMessage(object):
def __init__(self, raw):
self.raw = raw
self.length = len(self.raw)
print("Message: %s" % repr(self.raw))
if self.raw[0:1] != b'\x01' or self.raw[-1:] != b'\x04':
raise Exception("Not a valid IPTC message!")
(self.fullheader, leftover) = self.raw[1:-1].split(b'\x02', 2)
(self.text, self.posttext) = leftover.split(b'\x03', 2)
self.parseHeader()
self.parsePostText()
print("Header: " + repr(self.header))
print("Main text: " + self.text.decode("latin1"))
print("Post-text: " + repr(self.posttext))
print("Post-data: " + repr(self.postdata))
# print("Message: %s" % repr(self.raw))
def parseHeader(self):
fullheader = self.fullheader.decode("latin1")
parts = re.fullmatch('^([a-zA-Z]{1,3})([0-9]{3,4}) ([1-6]) ([a-zA-Z]{1,3}) ([0-9]{1,4}) (.{0,50})\r\n+(.{0,69})\r\n$', fullheader, re.MULTILINE | re.DOTALL)
if parts is None:
raise Exception("Header not conforming to IPTC structure.")
self.header = {
"source_id": parts.group(1),
"message_no": parts.group(2),
"priority": parts.group(3),
"category": parts.group(4),
"word_count": parts.group(5),
"optional": parts.group(6),
"keywords": parts.group(7)
}
def parsePostText(self):
posttext = self.posttext.decode("latin1")
# posttext = "191552 MEZ sep 14blafasel" # test string according to spec
parts = re.fullmatch('^([0-9]{6})( ([a-zA-Z]{3})(?= [a-zA-Z]))?( ([a-zA-Z]{3}) ([0-9]{2}))?(.{1,32})?$', posttext, re.MULTILINE | re.DOTALL)
if parts is None:
raise Exception("PostText not conforming to IPTC structure.")
self.postdata = {
"datetime": parts.group(1),
"timezone": parts.group(3), # skip one b/c "whole"-match
"month": parts.group(5), # skip one b/c "whole"-match
"year": parts.group(6),
"msg_separation": parts.group(7)
}
def getIPTC(self):
return self.raw
def getNewsML(self):
return '<?xml encoding="utf-8"?><result>Not yet implemented.</result>'
if __name__=='__main__':
print("Testmode!")

View File

@ -10,12 +10,13 @@ TEST2 = b'\x01v2572 4 txx 25 1tvbr\r\nAP-APTN-1400Entertainmen\r\n\x02^AP-APTN-1
TEST3 = b'\x01v2595 4 txx 232 1tvkr\r\nAP-APTN-1330PrimeNews-Fi\r\n\x02^AP-APTN-1330 Prime News-Final<\r\n^Friday, 5 September 2014<\r\n\r\n^Prime News<\r\n\r\n++UK NATO 4 02:57 AP Clients Only\r\n^Reaction to NATO leaders decision to post several thousand troops in Eastern Europe<\r\n\r\nUK NATO 3 03:20 AP Clients Only\r\n^NATO chief announces formation of rapid reaction force<\r\n\r\n++Bosnia Mine 4 01:34 AP Clients Only\r\n^Mine official on rescued and missing miners; familes at mine<\r\n\r\nUkraine Donetsk 02:31 AP Clients Only\r\n^People of Donetsk not hopeful that ceasefire will happen<\r\n\r\nUkraine Mariupol 03:03 AP Clients Only\r\n^Fighting continuing around strategic port city, despite Minsk talks and hopes of ceasefire<\r\n\r\n++US Ebola 2 01:03 Access all outside North America/No Access Broadcast or Digital in North America\r\n^Infected missionary arrives at hospital in Nebraska for treatment<\r\n\r\nBosnia Mine Rescue 03:31 AP Clients Only\r\n^Rescuers begin pulling trapped workers out of collapsed mine<\r\n\r\nBosnia Mine 3 01:55 AP Clients Only\r\n^Injured miner tells of dramatic escape after gas explosion caused by quake<\r\n\r\nBelarus Talks 01:27 Part No Access Russia/EBU\r\n^Talks aimed at arranging a ceasefire in Ukraine get under way<\r\n\r\n++India Kashmir Flooding 2 02:00 AP Clients Only\r\n^Rescued residents and submerged houses in worst floods for years<\r\n\r\n++Bosnia Mine 5 02:30 AP Clients Only\r\n^Hospital spokesman comments on the condition of the rescued injured miners<\r\n\r\n\r\n\x08\r\n\x08B-u-l-l-e-t-i-n begins at 1330 GMT.\r\n\r\n\r\n\t \x03051001 sep 14EDT\r\n\x04'
DPATEST = b'bdt0534 3 vm 144 dpa 2777\r\n\nVorschau/Tagesvorschau/dpa/Wissen/\r\n\x02(Vorschau)\nTerminvorschau sieben - Wissen\ndpa-Terminvorschau f\xfcr Sonntag, 07. September 2014 =\r\n\n---------------------------------------------------------------------\r\nAuf www.dpa-news.de bieten wir Ihnen einen laufend aktualisierten\r\n\xdcberblick \xfcber die dpa-Topthemen des Tages. Auch Ihre Fragen und\r\nAnregungen beantworten wir dort online. Die Planung f\xfcr die n\xe4chsten\r\n14 Tage finden Sie jederzeit auf dem aktuellen Stand auf\r\nwww.dpa-agenda.de.\r\n---------------------------------------------------------------------\r\nRedaktion Wissen \r\nTel.: +49 30 285232261; E-Mail: wissen@dpa.com\r\n---------------------------------------------------------------------\r\nThemen und Termine Wissen\r\n\nNairobi - Schmelzende Sch\xf6nheiten: Klimawandel bedroht\r\n Ostafrikas Gletscher (zum UN-Klimagipfel in New\r\n York am 23. September)\r\n Der Schnee des Kilimandscharo ist weltber\xfchmt -\r\n und vom Klimawandel bedroht. Ganze \xd6kosysteme\r\n sind von den Gletschern der Berge Ostafrikas\r\n abh\xe4ngig.\r\n - KORR-Bericht Wiederholung des KORR-Berichts\r\n vom Samstag, bis 1200, ca. 60 Zl.\r\n +++ Kenia/Klima/Umwelt;Wissenschaft/ +++\r\n\n* Weitere Termine voraussichtlich ohne Berichterstattung\r\n\nCascais - * Europ\xe4ischer Kongress \xfcber Weltallforschung\r\n und Raumfahrtwissenschaft (bis 12.09.2014)\r\n\nM\xfcnchen - 1030 * Pk zur Er\xf6ffnung des Internationalen\r\n Kongresses der Lungenmediziner (bis 10.09.2014)\r\n mit Vorstellung der H\xf6hepunkte des Programms\r\n\n-------------------------------------------------------------------\r\n\ndpa kll yyzz s5 akn\r\n\r\n\x03051508 Sep 14\r\n\x7f\n\x7f'
DPATEST = b'\x01bdt0534 3 vm 144 dpa 2777\r\n\nVorschau/Tagesvorschau/dpa/Wissen/\r\n\x02(Vorschau)\nTerminvorschau sieben - Wissen\ndpa-Terminvorschau f\xfcr Sonntag, 07. September 2014 =\r\n\n---------------------------------------------------------------------\r\nAuf www.dpa-news.de bieten wir Ihnen einen laufend aktualisierten\r\n\xdcberblick \xfcber die dpa-Topthemen des Tages. Auch Ihre Fragen und\r\nAnregungen beantworten wir dort online. Die Planung f\xfcr die n\xe4chsten\r\n14 Tage finden Sie jederzeit auf dem aktuellen Stand auf\r\nwww.dpa-agenda.de.\r\n---------------------------------------------------------------------\r\nRedaktion Wissen \r\nTel.: +49 30 285232261; E-Mail: wissen@dpa.com\r\n---------------------------------------------------------------------\r\nThemen und Termine Wissen\r\n\nNairobi - Schmelzende Sch\xf6nheiten: Klimawandel bedroht\r\n Ostafrikas Gletscher (zum UN-Klimagipfel in New\r\n York am 23. September)\r\n Der Schnee des Kilimandscharo ist weltber\xfchmt -\r\n und vom Klimawandel bedroht. Ganze \xd6kosysteme\r\n sind von den Gletschern der Berge Ostafrikas\r\n abh\xe4ngig.\r\n - KORR-Bericht Wiederholung des KORR-Berichts\r\n vom Samstag, bis 1200, ca. 60 Zl.\r\n +++ Kenia/Klima/Umwelt;Wissenschaft/ +++\r\n\n* Weitere Termine voraussichtlich ohne Berichterstattung\r\n\nCascais - * Europ\xe4ischer Kongress \xfcber Weltallforschung\r\n und Raumfahrtwissenschaft (bis 12.09.2014)\r\n\nM\xfcnchen - 1030 * Pk zur Er\xf6ffnung des Internationalen\r\n Kongresses der Lungenmediziner (bis 10.09.2014)\r\n mit Vorstellung der H\xf6hepunkte des Programms\r\n\n-------------------------------------------------------------------\r\n\ndpa kll yyzz s5 akn\r\n\r\n\x03051508 Sep 14\r\n\x7f\n\x7f\x04'
class IPTCMessageTestCase(unittest.TestCase):
def testMessageParsing(self):
iptc = iptcmessage.IPTCMessage(DPATEST)
iptc = iptcmessage.IPTCMessage(TEST1)
self.assertGreater(iptc.length, 0)
if __name__=='__main__':