studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones java google-spreadsheet http-post google-form

java - reales - libro de android studio en español pdf



Publicar datos en nuevas formas de Google (2)

Con la versión anterior (heredada) de los formularios de Google, fue posible publicar datos de forma programática en el formulario enviando un HttpPost a una url como esta:

https://spreadsheets.google.com/formResponse?formkey=[key]

y datos como este:

entry.1.single=data&entry.2.single=moredata

Con la nueva versión de los formularios de google (lanzada en enero de 2013, creo), la estructura de la url es diferente. Aquí hay un fragmento de la página "ver formulario en vivo"

<form action="https://docs.google.com/forms/d/1Ee330GpkMHX_0dKWmJb6ZPdm4FBhhqJSqBbgysEtq6M/formResponse" method="POST" ... <input type="text" name="entry.1566150510"

A partir de este fragmento de código, creo que podría publicar en una URL como esta:

https://docs.google.com/forms/d/[key]/formResponse

con datos como este:

entry.1566150510=data

Pero lo he intentado desde Java (Android) de esta manera:

public void postData() { // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); Log.i(myTag, "Inside postData()"); String fullUrl = "https://docs.google.com/forms/d/1Ee330GpkMHX_0dKWmJb6ZPdm4FBhhqJSqBbgysEtq6M/formResponse"; Log.i(myTag, "url = " + fullUrl); HttpPost httppost = new HttpPost(urlBase); try { // Add your data List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("entry.1566150510", "somedata")); UrlEncodedFormEntity data = new UrlEncodedFormEntity(nameValuePairs); Log.i(myTag, data.toString()); httppost.setEntity(data); Log.i(myTag, EntityUtils.toString(data)); // Execute HTTP Post Request ResponseHandler<String> responseHandler=new BasicResponseHandler(); String response = httpclient.execute(httppost, responseHandler); Log.i("DocsUploader", "response = " + response); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

y recibo 404, respuesta no encontrada.

¿Me estoy perdiendo algo obvio aquí, o Google acaba de eliminar la posibilidad de publicar en los nuevos formularios?


Considere hacer la actualización con google-apps-script (sospecho que será menos trabajo). Y continuará funcionando incluso si google realiza más ajustes.


Ok, algo sobre mi uso de HttpClient y HttpPost fue hecho incorrectamente. No sé exactamente en qué me equivoqué, pero ahora estoy usando esto y está funcionando correctamente:

public void postData() { String fullUrl = "https://docs.google.com/forms/d/1Ee330GpkMHX_0dKWmJb6ZPdm4FBhhqJSqBbgysEtq6M/formResponse"; HttpRequest mReq = new HttpRequest(); String response = mReq.sendPost(fullUrl, "entry.1566150510=data"); Log.i(myTag, response); }

Donde HttpRequest es una clase auxiliar creada por MattC y publicada como respuesta a esta pregunta: Publicación HTTP segura en Android .