Я хотел бы создать очень простую страницу PHP для сайта, в которой будут отображаться данные о расписании / календаре, где каждый слот будет либо бесплатным, либо будет иметь какое-то назначение в нем.
Поскольку все данные на самом деле являются только одной таблицей, что-то вроде {month, day, hour, talk_name, talk_description}, я подумал, почему бы не использовать электронную таблицу Документов Google в качестве базы данных. Хорошо, основная причина в том, что я просто читаю книги о том, как использовать MySQL в PHP, поэтому я определенно не на уровне:
С другой стороны, каждый может использовать таблицы 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 } }
Таким образом, хотя это может быть не разумным или масштабируемым, да, вы можете это сделать. Попробуйте этот код:
<?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 (т. fgetcsv
output=csv
), извлеките его, а затем проведите по нему по строке, используя fgetcsv
.
Если таблица выглядит так:
Это даст следующие данные для рассматриваемого 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" }
Вы можете попробовать это просто для удовольствия. Но если вам нужен только общий календарь, используйте что-то вроде Google Calendar. Google Calendar API позволяет вам обновлять календарь из программы. И вы можете встраивать календарь на свой сайт с помощью Google Embeddable Calendar Helper.
Не так весело, как программирование с нуля, хотя … 😉
Я написал PHP с помощью рамки Zend для чтения электронных таблиц Google. Код доступен здесь http://www.geekzone.co.nz/hellonearthisman/6647
Проверьте эту страницу на довольно простой подход к использованию электронной таблицы 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 = "username@gmail.com"; $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" => "john@example.com", "comments" => "Hello world" ); if ($ss->addRow($row)) echo "Form data successfully stored using Google Spreadsheet"; else echo "Error, unable to store spreadsheet data"; ?>
У меня недостаточно комментариев, чтобы добавить комментарий выше, но новый метод экспорта листа в 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