Advertisement
jasvazquez

Update Google Drive form v2.0

Jul 24th, 2015
1,254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.80 KB | None | 0 0
  1. #!/usr/bin/python2
  2. # coding=UTF-8
  3.  
  4. #-------------------------------------------------------------------------------
  5. #
  6. # GoogleFormUpdater v2.0
  7. #
  8. # Autor: El Informático de Guardia [https://goo.gl/DlxXR]
  9. # Ayuda: Para más información consulta el artículo http://wp.me/pgnIv-1Pw
  10. #
  11. # VERSIONES
  12. # -------------------------------
  13. #
  14. #   2.0 Obtiene, a partir de la URL del formulario web, los campos a utilizar
  15. #       evitando tener que inyectar jQuery sobre el html.
  16. #       Edita el fichero CSV para incluir los nombres de los campos obtenidos
  17. #       en el paso anterior.
  18. #
  19. #   1.0 Versión inicial
  20. #
  21. # MEJORAS
  22. # -------------------------------
  23. #
  24. # IDEA  Pedir únicamente el ID del formulario
  25. #       (p.e. 1x3x3xxhDnzKmnYAtrBJYHV2AidJm5t6I) pudiendo nosotros
  26. #       rellenar el resto de la URL y evitar tener que mirar si utiliza
  27. #       formResponse o viewform
  28. # IDEA  Uso de la API de Google para acceder al formulario y obtener el CSV
  29. #       sin intervención del usuario.
  30. #
  31. #-------------------------------------------------------------------------------
  32.  
  33. import csv
  34. import requests
  35. #import urllib
  36. import urllib2
  37. from lxml import html as lxmlhtml
  38.  
  39. FICHERO_DATOS='./respuestas2.csv'
  40. URL_FORMULARIO="https://docs.google.com/forms/d/PON-AQUI-EL-ID-DEL-FORMULARIO/formResponse"
  41.  
  42. #-------------------------------------------------------------------------------
  43. # Obtiene los campos utilizados por el formulario web de Google Drive
  44. #-------------------------------------------------------------------------------
  45.  
  46. def getCampos():
  47.  
  48.     html = urllib2.urlopen(URL_FORMULARIO).read()
  49.  
  50.     tree = lxmlhtml.fromstring(html)
  51.     r= tree.xpath("//div[contains(@class,'ss-form-entry')]//*[@name]/@name")
  52.  
  53.     # Eliminamos nombres de campo duplicados (respetando orden de aparición)
  54.     r=[ii for n,ii in enumerate(r) if ii not in r[:n]]
  55.  
  56.     return 'Marca temporal,'+','.join(r) #+'"'
  57.  
  58. #-------------------------------------------------------------------------------
  59. # Simula el envío de datos al formulario web de Google Drive
  60. #-------------------------------------------------------------------------------
  61.  
  62. def setRespuestas():
  63.  
  64.     ifile  = open(FICHERO_DATOS, "rb")
  65.     reader = csv.reader(ifile)
  66.  
  67.     rownum = 0
  68.     for row in reader:
  69.         # Anotamos los nombres de los campos (como cabeceras) para futuros usos
  70.         if rownum == 0:
  71.             header = getCampos().split(",")
  72.         else:
  73.             colnum = 0
  74.             payload={}
  75.             for col in row:
  76.                 if colnum>0:
  77.                     payload[header[colnum]]=col
  78.                 colnum += 1
  79.  
  80.             f = requests.post(url=URL_FORMULARIO, data=payload)
  81.             if "Este contenido no ha sido creado ni aprobado por Google" in f.text:
  82.                     print "--"
  83.                     print "Error enviando los datos; revisa los nombres de los campos"
  84.                     print payload
  85.                     print "--"
  86.             else:
  87.                     print ".",
  88.         rownum += 1
  89.  
  90.     ifile.close()
  91.  
  92. setRespuestas()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement