User:Andre Castro/prototyping/1.2/traces: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
Line 1: Line 1:
=Trance=
About the project:
==Links==
==Links==
https://docs.google.com/Doc?docid=dcwxmjc8_17pr7bbsgz original text  
https://docs.google.com/Doc?docid=dcwxmjc8_17pr7bbsgz original text  
Line 8: Line 11:


database in:
database in:
http://pzwart3.wdka.hro.nl/~acastro/cgi-bin/traces-email-database.xml
http://pzwart3.wdka.hro.nl/~acastro/cgi-bin/traces-database.xml


==******part1******==
Form and email / date appending email-database.xml


* online form
==Part1 Form and email subscription into database==
 
* online form: where users subscribe their email address
 
* cgi receives email address appends it within the today's date node in traces-database.xml


* cgi receives email address and appends it to email-database.xml file


TO DO: date format not necessarily the best format - check others


http://pzwart3.wdka.hro.nl/~acastro/cgi-bin/traces_form_handler.cgi:  
http://pzwart3.wdka.hro.nl/~acastro/cgi-bin/traces_form_handler.cgi:  
Line 38: Line 41:
print "<H4>Your form was successfully added.<br />Shortly you will receive a message at %s </H4>" % (email)
print "<H4>Your form was successfully added.<br />Shortly you will receive a message at %s </H4>" % (email)


#APPEND EMAIL AND DATE TO XML FILE


#APPEND EMAIL AND DATE TO XML FILE
if os.path.exists('/home/acastro/public_html/cgi-bin/traces-database.xml'):
if os.path.exists('/home/acastro/public_html/cgi-bin/traces-database.xml'):
print  
#open file
doc = lxml.etree.parse('/home/acastro/public_html/cgi-bin/traces-database.xml')
entries = doc.find('entries') # find root element
node_today = '//date[@date="'+ str(today) + '"]'
#check if todays date element is present
if today not in doc.xpath('//@date'):
date = lxml.etree.SubElement(entries, "date", attrib={'date':today} )  #append date SubElement date
addrs = lxml.etree.SubElement(date, "address")#append grandchild
addrs.text = str(email)
doc.write('/home/acastro/public_html/cgi-bin/traces-database.xml', xml_declaration=True, encoding='utf-8') #write
else:
test = doc.xpath(node_today)
addrs = lxml.etree.SubElement(test[0], "address")#append grandchild
addrs.text = email
doc.write('/home/acastro/public_html/cgi-bin/traces-database.xml', xml_declaration=True,  encoding='utf-8') #write
 
else:   
else:   
#Create a new file
root = lxml.etree.Element('email-address')
root = lxml.etree.Element('email-address')
son = lxml.etree.SubElement(root, 'entries')
entries = lxml.etree.SubElement(root, 'entries')
dates = lxml.etree.SubElement(entries, "date", attrib={'date':today} )  #append date
addrs = lxml.etree.SubElement(dates, "address")#append grandchild
addrs.text = str(email)
tree = lxml.etree.ElementTree(root)
tree = lxml.etree.ElementTree(root)
tree.write('/home/acastro/public_html/cgi-bin/traces-database.xml', pretty_print=True, xml_declaration=True,encoding='utf-8')
tree.write('/home/acastro/public_html/cgi-bin/traces-database.xml', pretty_print=True, xml_declaration=True,encoding='utf-8')
tree.close()
tree.close()
#f = 'email-database.xml'
doc = lxml.etree.parse('/home/acastro/public_html/cgi-bin/traces-database.xml')
entries = doc.find('entries') # find root element
node_today = '//date[@date="'+ str(today) + '"]'
#check if todays date element is present
if today not in doc.xpath('//@date'):
date = lxml.etree.SubElement(entries, "date", attrib={'date':today} )  #append date SubElement date
addrs = lxml.etree.SubElement(date, "address")#append grandchild
addrs.text = str(email)
doc.write('/home/acastro/public_html/cgi-bin/traces-database.xml', xml_declaration=True,  encoding='utf-8') #write
else:
test = doc.xpath(node_today)
print lxml.etree.tostring(test[0])
addrs = lxml.etree.SubElement(test[0], "address")#append grandchild
addrs.text = email
doc.write('/home/acastro/public_html/cgi-bin/traces-database.xml', xml_declaration=True,  encoding='utf-8') #write


</source>
</source>


==******part2******==
==part2 and 3 Days calculations and sending emails==  
Days and Emails calculations


Other py script which:


* parse the email-database.xml (every day)
Script which parses xml database. Checks the dates and email address under each date.


Script which parses xml database. Checks the dates and email address under each dat3.
According the date decide what part of story will be told


According the date decide what part of story will be told
<b>WRITE MORE</b>


<source lang="python">
<source lang="python">
#! /usr/bin/python
#! /usr/bin/python
# coding: utf-8
# coding: utf-8
import lxml.etree, urllib2
import lxml.etree, re
#Script which parses xml database. Checks the dates and email address under each date
import smtplib, email.utils
from email.mime.text import MIMEText
f = ('traces-email-database.xml') # change to local
from datetime import *
#f = urllib2.urlopen('http://pzwart3.wdka.hro.nl/~acastro/cgi-bin/traces-email-database.xml') #ERROR! ??permissions
 
# Script that:
# 1: parses xml database.  
doc = lxml.etree.parse(f)
# 2: Checks the dates and email address under each date  
# 3: Sends the corresponding email part
 
#CRON IT FOR 1 x per Day
 
   
   
# find dates
text_file = open('traces-text.txt', "r")
dates = doc.xpath('//date')
text = text_file.read() #CONTENT INTO VARIABLE !!!!


text_splited = text.split("\n\n@\n\n")




f = ('traces-database.xml') # ADD ABSOLUTE PATH
database = lxml.etree.parse(f)
dates = database.xpath('//date') # database find dates
#create the dictionary {date: [address, address]}
#create the dictionary {date: [address, address]}
dateDict = {}
dateDict = {}
for date in dates:
for date_subscription in dates:
    #print lxml.etree.tostring(date)
    date_is_attr = date.get("date")
date_is_attr = date_subscription.get("date")
    myAddrs = doc.xpath("//date[@date='{0}']/address/text()".format(date_is_attr))
myAddrs = database.xpath("//date[@date='{0}']/address/text()".format(date_is_attr))
    dateDict[date_is_attr] = myAddrs
dateDict[date_is_attr] = myAddrs
#print dateDict
 


#creat list of 19 day dates, today and before today
dates = []
for day in range(19):
date = date.today()
delta = timedelta(days= day)
subtract = date - delta
dates.append(str(subtract))


# compare the dates with the current
from datetime import *
import re
today = str(date.today())
yesterday = str(date.today()-timedelta(days=1))
beforeyesterday = str(date.today()-timedelta(days=2))


#checks the dates when emails were subscribe
#matchs them with the dates list
#sends the corresponding email part
for date in dateDict.keys():
print date
for i, value in enumerate(dates):


if str(date) == value:
email_addrs = dateDict[date] # list of receivers
print email_addrs
email_body =  "\n\n @ \n" + text_splited[i] + "\n @ "
# EMAIL - (MAKE IT UTF-8)
msg = MIMEText(email_body) #Create the message (simple ASCII)
msg['To'] = email.utils.formataddr(('Recipient', 'readers@traces.net'))
msg['From'] = email.utils.formataddr(('Traces', 'traces@noreply.net'))
msg['Subject'] = 'Traces @ part#' + str((i+1))
server = smtplib.SMTP('localhost')
server.set_debuglevel(False) # show communication with the server
try:
server.sendmail('traces@noreply.net', email_addrs, msg.as_string())
finally:
server.quit()


for date, addrs in dateDict.iteritems():
    #print date
    #print addrs
    print
    if str(date) == today :
        print "send first mail to:"
        for a in addrs :
            print a
    elif date == yesterday :
        print "send second mail to:"
        for a in addrs :
            print a
    elif date == beforeyesterday :
        print "send third mail to:"
        for a in addrs :
            print a
</source>
</source>


   
   
* check the dates
* see what section of the text needs to send to whom






==******part3 Email the sections******==
 
==Examples on sending email ==





Revision as of 02:35, 16 March 2012

Trance

About the project:

Links

https://docs.google.com/Doc?docid=dcwxmjc8_17pr7bbsgz original text

http://pzwart3.wdka.hro.nl/~slorusso/email-form.html

http://pzwart3.wdka.hro.nl/~acastro/cgi-bin/traces_form_handler.cgi


database in: http://pzwart3.wdka.hro.nl/~acastro/cgi-bin/traces-database.xml


Part1 Form and email subscription into database

  • online form: where users subscribe their email address
  • cgi receives email address appends it within the today's date node in traces-database.xml


http://pzwart3.wdka.hro.nl/~acastro/cgi-bin/traces_form_handler.cgi:

#!/usr/bin/python2.6
import cgi, cgitb, lxml.etree, datetime, os

today = datetime.datetime.now().strftime("%Y-%m-%d") #not sure is this is the best format

# Create instance of FieldStorage 
form = cgi.FieldStorage() 
# Get email from form 
email = form.getvalue('email') 


print "Content-Type: text/html"  
print                         
print "<TITLE>Form</TITLE>"
print "<H4>Your form was successfully added.<br />Shortly you will receive a message at %s </H4>" % (email)

#APPEND EMAIL AND DATE TO XML FILE

if os.path.exists('/home/acastro/public_html/cgi-bin/traces-database.xml'):
	#open file
	doc = lxml.etree.parse('/home/acastro/public_html/cgi-bin/traces-database.xml')
	entries = doc.find('entries') # find root element
	node_today = '//date[@date="'+ str(today) + '"]'
	 
	#check if todays date element is present
	if today not in doc.xpath('//@date'): 
		date = lxml.etree.SubElement(entries, "date", attrib={'date':today} )  	#append date SubElement date
		addrs = lxml.etree.SubElement(date, "address")#append grandchild
		addrs.text = str(email)
		doc.write('/home/acastro/public_html/cgi-bin/traces-database.xml', xml_declaration=True,  encoding='utf-8') #write
	else:
		test = doc.xpath(node_today)
		addrs = lxml.etree.SubElement(test[0], "address")#append grandchild
		addrs.text = email
		doc.write('/home/acastro/public_html/cgi-bin/traces-database.xml', xml_declaration=True,  encoding='utf-8') #write

else:  
	#Create a new file
	root = lxml.etree.Element('email-address')
	entries = lxml.etree.SubElement(root, 'entries')
	dates = lxml.etree.SubElement(entries, "date", attrib={'date':today} )  	#append date
	addrs = lxml.etree.SubElement(dates, "address")#append grandchild
	addrs.text = str(email)
	tree = lxml.etree.ElementTree(root)
	tree.write('/home/acastro/public_html/cgi-bin/traces-database.xml', pretty_print=True, xml_declaration=True,encoding='utf-8')
	tree.close()

part2 and 3 Days calculations and sending emails

Script which parses xml database. Checks the dates and email address under each date.

According the date decide what part of story will be told

WRITE MORE

#! /usr/bin/python
# coding: utf-8
import lxml.etree, re
import smtplib, email.utils
from email.mime.text import MIMEText
from datetime import *

# Script that:
# 1: parses xml database. 
# 2: Checks the dates and email address under each date 
# 3: Sends the corresponding email part

#CRON IT FOR 1 x per Day

 
text_file = open('traces-text.txt', "r")
text = text_file.read() #CONTENT INTO VARIABLE !!!!

text_splited = text.split("\n\n@\n\n")


f = ('traces-database.xml') # ADD ABSOLUTE PATH
database = lxml.etree.parse(f)
 
dates = database.xpath('//date') # database find dates 
#create the dictionary {date: [address, address]}
dateDict = {}
for date_subscription in dates:
 
	date_is_attr = date_subscription.get("date")
	myAddrs = database.xpath("//date[@date='{0}']/address/text()".format(date_is_attr))
	dateDict[date_is_attr] = myAddrs
#print dateDict


#creat list of 19 day dates, today and before today 
dates = []
for day in range(19):
	date = date.today()
	delta = timedelta(days= day)
	subtract = date - delta	
	dates.append(str(subtract))
 


#checks the dates when emails were subscribe 
#matchs them with the dates list
#sends the corresponding email part
for date in dateDict.keys():
	print date
	for i, value in enumerate(dates):

		if str(date) == value:
			email_addrs = dateDict[date] # list of receivers
			print email_addrs
			email_body =  "\n\n			@		\n" + text_splited[i] + "\n			@		"		
			# EMAIL - (MAKE IT UTF-8)
			msg = MIMEText(email_body) #Create the message (simple ASCII)
			msg['To'] = email.utils.formataddr(('Recipient', 'readers@traces.net'))
			msg['From'] = email.utils.formataddr(('Traces', 'traces@noreply.net'))
			msg['Subject'] = 'Traces @ part#' + str((i+1))
			server = smtplib.SMTP('localhost')
			server.set_debuglevel(False) # show communication with the server
			try:
				server.sendmail('traces@noreply.net', email_addrs, msg.as_string())
			finally:
				server.quit()




Examples on sending email

  • multipart email - allows imgs attachments
import smtplib, email.utils
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

#Reference: http://docs.python.org/library/email-examples.html


# address list
addr = ['andrecastro@c-e-m.org', 'andrecastro83@gmail.com']#, 'silviolorusso@gmail.com']

msg = MIMEMultipart()
#msg = MIMEText('This is the b@dy of the message.') #Create the message (simple ASCII)
msg['To'] = email.utils.formataddr(('Recipient', 'readers@traces.net'))
msg['From'] = email.utils.formataddr(('Traces', 'traces@noreply.net'))
msg['Subject'] = 'Traces Multipart - test'

msg.attach( MIMEText('This is the b@dy of the email') )

#attach a picture
fp = open('animpnky_e0.gif', 'rb')
img = MIMEImage(fp.read())
fp.close()
msg.attach(img)


server = smtplib.SMTP('localhost')
server.set_debuglevel(False) # show communication with the server
try:
    server.sendmail('traces@noreply.net', addr, msg.as_string())
finally:
    server.quit()


  • text email - plain text
import smtplib, email.utils
from email.mime.text import MIMEText

# address list
addr = ['andrecastro@c-e-m.org', 'andrecastro83@gmail.com']
#, 'silviolorusso@gmail.com']

msg = MIMEText('This is the b@dy of the message.') #Create the message (simple ASCII)
msg['To'] = email.utils.formataddr(('Recipient', 'readers@traces.net'))
msg['From'] = email.utils.formataddr(('Traces', 'traces@noreply.net'))
msg['Subject'] = 'Traces plain - test '


server = smtplib.SMTP('localhost')
server.set_debuglevel(False) # show communication with the server
try:
    server.sendmail('traces@noreply.net', addr, msg.as_string())
finally:
    server.quit()