Implemented first parsing of header and posttext.
This commit is contained in:
parent
24cc46b455
commit
46175bc659
@ -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!")
|
||||
|
@ -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__':
|
||||
|
Reference in New Issue
Block a user