[ubuntu-cl] algoritmo votacion
Cristian Barahona G.
cristianvirtual en gmail.com
Jue Ago 19 22:26:34 BST 2010
Ubunteros
tal como me habia comprometido, diseñe un método de votación "ashi
shuper loco por ser" que espero nos sea de utilidad, se los explico y
luego abajo copio el código:
(el script fue bautizado por Alvaro Olivares como HugoChavez)
1.- tenemos una lista de los mails de los ubunteros de ubuntu-cl
2.- un script python q ejecutaré localmente, genera un md5 aleatorio q
de engrupido llamaré "token", este es almacenado en una base de datos y
enviado por mail, entonces cada ubuntero recibirá en su mail un token
único
3.- el ubuntero entra a una página web pone su token y marca sus votos
4.- al final del periodo hacemos publica la lista de tokens y sus votos,
así el conteo será publico y cada uno podrá asegurarse q sus votos están
correctos en el "cobarde anonimato" jajaja
problemas de mi propuesta:
- como los tokens salen desde mi mail, en el fondo yo si podría saber
quien voto por cada quien
- lo programe yo
les adjunto los script para q los corrijan, mejoren, agreguen jquery, se
rían... q se yo
(la base de datos esta en una tabla por facilidad de uso y paja)
################################################################
import sys
import smtplib
import mimetypes
import hashlib
import random
import MySQLdb
from email.MIMEText import MIMEText
from email.Encoders import encode_base64
de = 'cristianvirtual en gmail.com'
psw = '**********'
def enviar_email(para,codigo):
mensaje = MIMEText("""votar en http://cristianvirtual.org\ntu codigo
de votacion es: %s""" % codigo)
mensaje['From'] = de
mensaje['To'] = para
mensaje['Subject'] = "Votacion concilio"
mailServer = smtplib.SMTP('smtp.gmail.com',587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(de, psw)
mailServer.sendmail(de, para, mensaje.as_string())
mailServer.close()
def guardar_key(codigo):
try:
mycon = MySQLdb.connect(host = "**********",
user = "**********",
passwd = "**********",
db = "**********")
mycursor = mycon.cursor()
except MySQLdb.Error, e:
print "wateo %d: %s" % (e.args[0], e.args[1])
sys.exit(1)
try:
mycursor.execute("INSERT INTO ubunteros VALUES (%s,0)",
(codigo,))
mycon.commit()
except MySQLdb.OperationalError, reason:
print "wateo MySQLdb: %s" % reason
sys.exit(1)
mycon.rollback()
mycon.close()
def listado_emails():
lista_emails = open('ubunteros.emails','r')
for mail in lista_emails.readlines():
m = hashlib.md5()
m.update(str(random.random()))
enviar_email(mail.strip(),m.hexdigest())
guardar_key(m.hexdigest())
lista_emails.close()
listado_emails()
################################################################
<?php
if ($_POST['votar'] && $_POST['token'] !='') {
$conexion = mysql_connect("**********", "**********",
"**********");
mysql_select_db("**********", $conexion);
$query = "SELECT token, ya_voto FROM ubunteros WHERE
token='".$_POST['token']."' AND ya_voto=0";
$rs = mysql_query($query, $conexion) or die(mysql_error());
$tot = mysql_num_rows($rs);
if ($tot == 1) {
echo "se supone q hago el insert y todo eso";
$q = "UPDATE ubunteros SET ya_voto=1,
op1=".$_POST['op1'].", op2=".$_POST['op2'].", op3=".$_POST['op3'].",
op4=".$_POST['op4'].", op5=".$_POST['op5']." WHERE
token='".$_POST['token']."'";
mysql_query($q, $conexion) or die(mysql_error());
echo "voto emitido, los resultados... el 25";
} else {
echo "<p>Este token ya voto, no existe o se esta
tratando de avivar</p>";
}
} else { ?>
<form action="concilio_ubuntu.php" method="POST">
<table>
<tr>
<td>Token:</td>
<td><input type="text" name="token"/></td>
</tr>
<tr>
<td>Ubuntero 1:</td>
<td>SI <input type="radio" name="op1" value="1"/>
NO<input type="radio" name="op1" value="0" checked /></td>
</tr>
<tr>
<td>Ubuntero 2:</td>
<td>SI <input type="radio" name="op2" value="1"/> NO<input
type="radio" name="op2" value="0" checked /></td>
</tr>
<tr>
<td>Ubuntero 3:</td>
<td>SI <input type="radio" name="op3" value="1"/> NO<input
type="radio" name="op3" value="0" checked /></td>
</tr>
<tr>
<td>Ubuntero 4:</td>
<td>SI <input type="radio" name="op4" value="1"/> NO<input
type="radio" name="op4" value="0" checked /></td>
</tr>
<tr>
<td>Ubuntero 5:</td>
<td>SI <input type="radio" name="op5" value="1"/> NO<input
type="radio" name="op5" value="0" checked /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="votar"
value="Votar"/></td>
</tr>
</table>
</form>
<? } ?>
################################################################
--
Cristian Barahona G.
http://www.cristianvirtual.org
Más información sobre la lista de distribución Ubuntu-cl