2011-02-18 21 views
11

Me gustaría crear una página PHP muy simple para un sitio, que mostraría un calendario/calendario como datos, donde cada ranura sería libre o tendría alguna cita en ella.usando Google Docs como base de datos?

Como todos los datos son en realidad solo una tabla, algo así como {month, day, hour, talk_name, talk_description}, pensé por qué no usar una hoja de cálculo de Google Docs como base de datos. OK, la razón principal es que sólo estoy leyendo libros sobre cómo utilizar MySQL en PHP, por lo que definitivamente no estoy en un nivel para:

  • crear una bonita interfaz de administración para la gestión de los eventos
  • hacer que todo sea seguro (me refiero a toda mi idea sobre la seguridad es utilizar .htaccess para una carpeta de administrador y hacer que el sitio sea de solo lectura).

Por otro lado, todo el mundo podría usar Google Spreadsheets para editar la tabla, de esta manera se resolverían tanto los aspectos de seguridad como los de la UI.

Mi pregunta es ¿cómo me recomendarías para hacer eso? Google Docs puede publicar en formatos XML y CSV. ¿Puedo usar fgetcsv para obtener los datos? ¿Puede darme algunos ejemplos simples de cómo analizar el csv, y si sería eficiente (vale, será menos de 50 visitas al día), si hiciera algo como esto (lo siento por la sintaxis abstracta)?

$source_csv = fgetcsv(...); 

get_talk_name(x,y,z) { 
    for all rows in $source_csv { 
    if (month == x && day == y && hour == z) return talk_name 
    } 
} 

get_talk_desc(x,y,z) { 
    for all rows in $source_csv { 
    if (month == x && day == y && hour == z) return talk_name 
    } 
} 
+0

No lo recomendaría, si alguna vez quiere hacerlo * correctamente * bien puede comenzar a aprender ahora. –

+0

@zsero tiene que ser php, porque puedes usar JavaScript y YQL para lograr esto y es bastante directo. – kjy112

+0

http://tutorialzine.com/2010/08/dynamic-faq-jquery-yql-google-docs/ – kjy112

Respuesta

22

Por lo tanto, si bien podría no ser conveniente o escalable, sí, usted puede hacerlo. Prueba este código:

<?php 
$url = "https://spreadsheets.google.com/pub?hl=en&hl=en&key=0AupgXsRU8E9UdC1DY0toUUJLV0M0THM4cGJTSkNSUnc&output=csv"; 
$row=0; 

if (($handle = fopen($url, "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     echo "<p> $num fields in line $row: <br /></p>\n"; 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
     } 
    } 
    fclose($handle); 
} 

Básicamente, publicar la hoja de cálculo como pública, cambiar la salida a CSV (del HTML predeterminado) modificando manualmente la dirección URL (es decir, output=csv), ir a buscar, y luego iterar sobre línea por línea usando fgetcsv.

Si la hoja de cálculo tiene el siguiente aspecto:

salida

enter image description here

Esta voluntad lo siguiente para el csv en cuestión:

array(2) { 
    [0]=> 
    string(4) "Name" 
    [1]=> 
    string(5) "Value" 
} 
array(2) { 
    [0]=> 
    string(3) "Foo" 
    [1]=> 
    string(5) "13123" 
} 
array(2) { 
    [0]=> 
    string(3) "Bar" 
    [1]=> 
    string(3) "331" 
} 
+0

+1 con el uso de php y google doc = D – kjy112

+0

¡GUAU, una solución tan buena! ¡Gracias por la solución y la explicación detallada! Para escapar de las comas, puedo usar la función 'SUBSTITUTE (texto, texto de búsqueda, texto nuevo, aparición)' en Google Docs. + Referencia la hoja original a una nueva hoja "limpia" y exporta solo la "limpia". – zsero

+0

¡cuidado con los apóstrofes! Estoy usando fgetcsv para importar datos, y los apóstrofes se están rompiendo, independientemente de si escapo o htmlspecialchars. – roberthuttinger

2

Puede intentar esto solo por diversión. Pero si solo necesitas un calendario comunal, usa algo como Google Calendar. El Google Calendar API le permite actualizar su calendario desde un programa. Y puede insertar un calendario en su sitio web usando Google Embeddable Calendar Helper.

No es tan divertido como la programación desde cero, aunque ... ;-)

+0

No es realmente un calendario, y lo más importante, creo que es realmente divertido resolver este problema mientras se aprende un poco de PHP. – zsero

0

Check out this page for a pretty straightforward approach to using a GDocs spreadsheet as a CRUD DB. Uso sigue este patrón, pero hay que descargar una clase Zend, y un archivo de GDocs/PHP desde GitHub primera ...

<?php   // Zend library include path 
set_include_path(get_include_path() . PATH_SEPARATOR . "$_SERVER[DOCUMENT_ROOT]/ZendGdata-1.8.1/library"); 
include_once("Google_Spreadsheet.php"); 
    $u = "[email protected]"; 
    $p = "password"; 
    $ss = new Google_Spreadsheet($u,$p); 
    $ss->useSpreadsheet("My Spreadsheet"); 
       // if not setting worksheet, "Sheet1" is assumed 
       // $ss->useWorksheet("worksheetName"); 
$row = array 
    ("name" => "John Doe", "email" => "[email protected]", "comments" => "Hello world"); 
if ($ss->addRow($row)) echo "Form data successfully stored using Google Spreadsheet"; 
    else echo "Error, unable to store spreadsheet data"; 
?> 
0

Todavía no he decidido representante suficiente para agregar un comentario anterior, pero el nuevo método de exportar una hoja a CSV funciona.

Su URL como (públicamente) compartida a partir de láminas:

https://docs.google.com/spreadsheets/d/9999999999999/edit?usp=sharing

cambiar el final /edit?usp=sharing to /export?format=csv

igual:

https://docs.google.com/spreadsheets/d/99999999999999/export?format=csv

Fuente: https://productforums.google.com/d/msg/docs/An-nZtjaupU/llWy4eYFywcJ

Cuestiones relacionadas