Diferencia entre revisiones de «Grupo Almacenamiento de votos(2014-15)»

De Wiki de EGC
Saltar a: navegación, buscar
(Prácticas)
 
(No se muestran 15 ediciones intermedias de 4 usuarios)
Línea 13: Línea 13:
 
* Miguel Ángel Núñez-Romero Olmo
 
* Miguel Ángel Núñez-Romero Olmo
 
* David Letrán González
 
* David Letrán González
* Cristina María Padilla Carrera
+
* Cristina Padilla Carrero
 
* Carlos López García
 
* Carlos López García
 
* Luis Pintado Lozano
 
* Luis Pintado Lozano
Línea 21: Línea 21:
 
*[[Iteración 2 (06/10/2014)]]
 
*[[Iteración 2 (06/10/2014)]]
 
*[[Iteración 3 (08/10/2014)]]
 
*[[Iteración 3 (08/10/2014)]]
 +
*[[Iteración 4 (27/10/2014)]]
  
 
== Prácticas ==
 
== Prácticas ==
 
*[[Práctica 1 (15/10/2014)]]
 
*[[Práctica 1 (15/10/2014)]]
 +
*[[Práctica 2 (22/10/2014)]]
 +
*[[Práctica 3 (30/10/2014)]]
  
 
== Subsistemas relacionados ==
 
== Subsistemas relacionados ==
Línea 29: Línea 32:
 
* Recuento: se deberá proporcionar la lista de todos los votos.
 
* Recuento: se deberá proporcionar la lista de todos los votos.
 
* Cabina de votación: recibimos del subsistema el voto cifrado para guardarlo en la base de datos.
 
* Cabina de votación: recibimos del subsistema el voto cifrado para guardarlo en la base de datos.
* Sistema de autenticación: comprobar que el votante es válido.
+
 
 +
==Recomendación de integración con nuestro subsistema ==
 +
* Cabina de votación:
 +
 
 +
Se ofrece un método para python que recibe un voto que será una cadena codificada y votacion_id que será el número de id de la votación. El método devolverá True si la operación ha tenido éxito y False en caso contrario.
 +
 
 +
<source lang="python">
 +
import urllib2,urllib,json
 +
 
 +
 
 +
def vote(voto,votacion_id):
 +
    data=[('vote',voto),('votation_id',votacion_id)]
 +
    data=urllib.urlencode(data)
 +
    path='http://php-egc.rhcloud.com/vote.php'
 +
    req=urllib2.Request(path,data)
 +
    response=urllib2.urlopen(req)
 +
    response_data = json.load(response)
 +
    result = False
 +
    if response_data['msg']==u'1':
 +
        result=True
 +
    return result
 +
</source>
 +
 
 +
* Recuento
 +
 
 +
Se ofrece un método en java que devuelve una lista de String con todos los votos de una votación. Para ello son necesarias las librerías org.json-20120521.jar y json-simple-1.1.1.jar
 +
 
 +
<source lang="java">
 +
import java.io.BufferedReader;
 +
import java.io.IOException;
 +
import java.io.InputStream;
 +
import java.io.InputStreamReader;
 +
import java.io.Reader;
 +
import java.net.URL;
 +
import java.nio.charset.Charset;
 +
import java.util.ArrayList;
 +
import java.util.List;
 +
 
 +
import org.json.JSONException;
 +
import org.json.simple.JSONArray;
 +
import org.json.simple.JSONObject;
 +
import org.json.simple.parser.JSONParser;
 +
import org.json.simple.parser.ParseException;
 +
 
 +
public class Votos {
 +
 
 +
public static List<String> getVotos(int votation_id) throws ParseException,IOException, JSONException {
 +
List<String> votos = new ArrayList<String>();
 +
String url = "http://php-egc.rhcloud.com/get_votes.php?votation_id=" + votation_id;
 +
JSONObject jsonObject = readJsonFromUrl(url);
 +
JSONArray votes = (JSONArray) jsonObject.get("votes");
 +
for (int i = 0; i < votes.size(); i++) {
 +
votos.add((String) votes.get(i));
 +
}
 +
return votos;
 +
}
 +
 
 +
private static JSONObject readJsonFromUrl(String url) throws IOException,
 +
JSONException, ParseException {
 +
JSONParser jsonParser = new JSONParser();
 +
InputStream is = new URL(url).openStream();
 +
try {
 +
BufferedReader rd = new BufferedReader(new InputStreamReader(is,
 +
Charset.forName("UTF-8")));
 +
String jsonText = readAll(rd);
 +
JSONObject json = (JSONObject) jsonParser.parse(jsonText);
 +
return json;
 +
} finally {
 +
is.close();
 +
}
 +
}
 +
 
 +
private static String readAll(Reader rd) throws IOException {
 +
StringBuilder sb = new StringBuilder();
 +
int cp;
 +
while ((cp = rd.read()) != -1) {
 +
sb.append((char) cp);
 +
}
 +
return sb.toString();
 +
}
 +
}
 +
 
 +
</source>
 +
== Alternativa de integración - API ==
 +
 
 +
{| border="1" style="border-collapse:collapse" class="wikitable sortable"
 +
|-
 +
! Método (URL)
 +
! Tipo
 +
! Descripción
 +
! Parámetros
 +
! Respuesta
 +
! Ejemplo
 +
|-
 +
| vote (http://php-egc.rhcloud.com/vote.php)
 +
| POST
 +
| Permite almacenar un voto para una determinada votación
 +
|
 +
*vote: voto codificado
 +
*votation_id: id de la votación
 +
| Json con un mensaje de respuesta que indica si la operación se ha resuelto correctamente. (el mensaje será 1 si todo salió bien y 0 en caso contrario)
 +
| {"msg":1}
 +
|-
 +
| get_votes (http://php-egc.rhcloud.com/get_votes.php)
 +
| GET
 +
| Devuelve la lista de votos de una determinada votación
 +
|
 +
* votation_id: id de la votación.
 +
| Json con la lista de votos y un campo "msg" que indica si la operación se realizó correctamente.
 +
| {"votes":["voto1","voto2"],"msg":1}

Revisión actual del 17:06 3 ene 2015

Descripción

Una base de datos de votos cifrados. Se almacenarán los votos sin información alguna del votante. Antes de añadir un nuevo voto a la base de datos, el almacenamiento tiene que verificar que el voto viene de un votante válido, por lo que deberá consultar al sistema de autenticación. Una vez almacenado el voto, debe notificar al sistema de autenticación que el usuario ya ha votado. Con el fin de llevar esto a cabo se tendrá una base de datos MySQL y se dispondrá de una interfaz en Java con la que acceder a ella para almacenar votos y para obtenerlos.

Historias de usuario: Como votante deseo almacenar mi voto con el fin de que quede almacenado de forma permanente y no sea susceptible a perderse.

Requisitos de información: Votos que almacenar

Miembros

  • Cristian Fernández Rivas
  • Miguel Ángel Núñez-Romero Olmo
  • David Letrán González
  • Cristina Padilla Carrero
  • Carlos López García
  • Luis Pintado Lozano

Iteraciones

Prácticas

Subsistemas relacionados

  • Recuento: se deberá proporcionar la lista de todos los votos.
  • Cabina de votación: recibimos del subsistema el voto cifrado para guardarlo en la base de datos.

Recomendación de integración con nuestro subsistema

  • Cabina de votación:

Se ofrece un método para python que recibe un voto que será una cadena codificada y votacion_id que será el número de id de la votación. El método devolverá True si la operación ha tenido éxito y False en caso contrario.

import urllib2,urllib,json


def vote(voto,votacion_id):
    data=[('vote',voto),('votation_id',votacion_id)]
    data=urllib.urlencode(data)
    path='http://php-egc.rhcloud.com/vote.php'
    req=urllib2.Request(path,data)
    response=urllib2.urlopen(req)
    response_data = json.load(response)
    result = False
    if response_data['msg']==u'1':
        result=True
    return result
  • Recuento

Se ofrece un método en java que devuelve una lista de String con todos los votos de una votación. Para ello son necesarias las librerías org.json-20120521.jar y json-simple-1.1.1.jar

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class Votos {

	public static List<String> getVotos(int votation_id) throws ParseException,IOException, JSONException {
		List<String> votos = new ArrayList<String>();
		String url = "http://php-egc.rhcloud.com/get_votes.php?votation_id=" + votation_id;
		JSONObject jsonObject = readJsonFromUrl(url);
		JSONArray votes = (JSONArray) jsonObject.get("votes");
		for (int i = 0; i < votes.size(); i++) {
			votos.add((String) votes.get(i));
		}
		return votos;
	}

	private static JSONObject readJsonFromUrl(String url) throws IOException,
			JSONException, ParseException {
		JSONParser jsonParser = new JSONParser();
		InputStream is = new URL(url).openStream();
		try {
			BufferedReader rd = new BufferedReader(new InputStreamReader(is,
					Charset.forName("UTF-8")));
			String jsonText = readAll(rd);
			JSONObject json = (JSONObject) jsonParser.parse(jsonText);
			return json;
		} finally {
			is.close();
		}
	}

	private static String readAll(Reader rd) throws IOException {
		StringBuilder sb = new StringBuilder();
		int cp;
		while ((cp = rd.read()) != -1) {
			sb.append((char) cp);
		}
		return sb.toString();
	}
}

Alternativa de integración - API

Método (URL) Tipo Descripción Parámetros Respuesta Ejemplo
vote (http://php-egc.rhcloud.com/vote.php) POST Permite almacenar un voto para una determinada votación
  • vote: voto codificado
  • votation_id: id de la votación
Json con un mensaje de respuesta que indica si la operación se ha resuelto correctamente. (el mensaje será 1 si todo salió bien y 0 en caso contrario) {"msg":1}
get_votes (http://php-egc.rhcloud.com/get_votes.php) GET Devuelve la lista de votos de una determinada votación
  • votation_id: id de la votación.
Json con la lista de votos y un campo "msg" que indica si la operación se realizó correctamente. {"votes":["voto1","voto2"],"msg":1}