Сбор данных из электронной почты с помощью Google App Engine - PullRequest
0 голосов
/ 12 мая 2011

Я довольно новичок в Google App Engine (и в python). Я внедряю систему, которая в основном будет анализировать входящую электронную почту и сохранять детали в хранилище данных. Теперь у меня это работает, но я чувствую, что должен быть лучший способ сделать это, чем я сейчас являюсь.

В основном, электронная почта, поступающая в систему, всегда выглядит следующим образом:

Order Details: Random Batch Name here

Order Status: 74 of 131 Shipped In Total

Message ID: 123456

Message Date: 21/04/2011 16:13:00

Mobile Number: 01234567890

Message: message would be here

Код, который я использую для разбора, выглядит так:

class LogSenderHandler(InboundMailHandler):
    def receive(self, message):

        # Get the body text from the e-mail
        plaintext_bodies = message.bodies('text/plain')
        for content_type, body in plaintext_bodies:
            body_text = body.decode().split('\n')

            # Loop through each line in the e-mail and discard a line if it is blank
            for line in body_text:
                if line != "":

                    # I'm sure there's a better way of doing this, just don't know how right now!
                    # Split the current line based on the ": " value and only let it be done once
                    splitline = line.split(': ', 1)

                    # Check to see which line we now have the details for and place value into the correct variable
                    if splitline[0] == "Order Details":
                        batch = splitline[1]
                    if splitline[0] == "Message ID":
                        messageID = splitline[1]
                    if splitline[0] == "Message Date":
                        messageDate = splitline[1]
                    if splitline[0] == "Mobile Number":
                        mobileNumber = splitline[1]
                    if splitline[0] == "Message":
                        theMessage = splitline[1]


        newNumber = SMSNumber( status = "Waiting",
                               batch = common.slugify(batch),
                               messageID = messageID,
                               messageDate = messageDate,
                               sentMessage = theMessage )

        newNumber._key_name = mobileNumber
        newNumber.put()

Есть ли лучший способ справиться с этим? Если у кого-нибудь есть вклад, он будет с благодарностью принят! :)

Привет

1 Ответ

0 голосов
/ 16 мая 2011

Более аккуратный подход заключается в переборе строк файла, разделении на двоеточие и добавлении строк к Map. Затем зачитайте соответствующие записи с карты и передайте их конструктору, указав значение по умолчанию, если его не было.

...