Используя Google Docs в качестве базы данных?

Я хотел бы создать очень простую страницу PHP для сайта, в которой будут отображаться данные о расписании/календаре, где каждый слот будет либо бесплатным, либо будет иметь какое-то назначение в нем.

Поскольку все данные фактически представляют собой только одну таблицу, что-то вроде {month, day, hour, talk_name, talk_description}, я подумал, почему не следует использовать таблицу документов Google в качестве базы данных. Хорошо, основная причина в том, что я просто читаю книги о том, как использовать MySQL в PHP, поэтому я определенно не на уровне:

  • создать приятный интерфейс администратора для управления событиями
  • сделать все это безопасным (я имею в виду, что все мое представление о безопасности - использовать .htaccess для папки администратора и сделать сайт доступным только для чтения в другом месте).

С другой стороны, каждый может использовать таблицы Google для редактирования таблицы, поэтому таким образом будут решены аспекты безопасности и аспекты пользовательского интерфейса.

Мой вопрос: как бы вы порекомендовали меня сделать это? Документы Google могут публиковаться в форматах XML и CSV. Могу ли я просто использовать fgetcsv для получения данных? Можете ли вы дать мне несколько простых примеров, как разобрать csv, и если бы это было эффективно (нормально, это будет меньше 50 просмотров в день), если бы я сделал что-то вроде этого (извините за абстрактный синтаксис)?

$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
  }
}

Ответ 1

Итак, хотя это может быть не разумно или масштабируемо, да, вы можете это сделать. Попробуйте этот код:

<?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);
}

В принципе, опубликуйте электронную таблицу как общедоступную, измените вывод на csv (из HTML по умолчанию), вручную отредактировав URL (т.е. output=csv), извлеките его и затем проведите по нему по строке, используя fgetcsv.

Если таблица выглядит следующим образом:

enter image description here

Это приведет к отображению следующих данных для csv:

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"
}

Ответ 2

Вы можете попробовать это просто для удовольствия. Но если вам нужен только общий календарь, используйте что-то вроде Google Calendar. API календаря Google позволяет обновлять календарь из программы. И вы можете встраивать календарь на свой сайт с помощью Google Embeddable Calendar Helper.

Не так весело, как программировать его с нуля, хотя...; -)

Ответ 4

Проверьте эту страницу на довольно простой подход к использованию электронной таблицы GDocs в виде CRUD DB. Использование следует за этим шаблоном, но вам нужно загрузите класс Zend и файл GDocs/PHP из github в первую очередь...

<?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";
?>

Ответ 5

У меня недостаточно комментариев, чтобы добавить комментарий выше, но новый метод экспорта листа в CSV действительно работает.

Ваш url как (публично) делится с листов:

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

Измените конец /edit?usp=sharing to /export?format=csv

Как

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

Источник: https://productforums.google.com/d/msg/docs/An-nZtjaupU/llWy4eYFywcJ