• Главная»
  • Уроки»
  • PHP»
  • Работа с Google Docs средствами PHP (часть 1). Вывод списка документов

Этот урок связан с проектом Работа с Google Docs средствами PHP

Работа с Google Docs средствами PHP (часть 1). Вывод списка документов

sourse

Сегодня я бы хотел начать серию уроков, где я собрал свои наработки по взаимодействию с Google Docs. В первой части мы рассмотрим как подключиться к Google Docs через PHP и вывести список документов.

Для начала нам необходимо скачать библиотеку Zend_Gdata. Если ссылка устарела, то данную библиотеку можно всегда найти на странице скачивания Zend Framework. Так же, вам потребуется компонент Zend_XML, который вы можете найти в основной библиотеке.

Подключение к сервису Google Documents List

Для начала нам необходимо подключиться к сервису Google Documents List.

// импорт классов Zend Gdata
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Docs');
Zend_Loader::loadClass('Zend_Gdata_Docs_Query');

// подготовка данных
$user = 'имя_пользователя';
$pass = 'пароль';

// авторизация в Google Documents List
$service = Zend_Gdata_Docs::AUTH_SERVICE_NAME;
$httpClient = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
$gdClient = new Zend_Gdata_Docs($httpClient);

Сначала мы импортируем все необходимые Zend классы, которые понадобятся нам в дальнейшем (в серии данных статей).

Затем указываем имя учётной записи Google и пароль. Когда вы запустите данный скрип в первый раз, то вам на почту может прийти письмо о том, что Google отклонил запрос. Так же в данном письме будет письмо с инструкцией как разрешить сторонним сервисам подключаться к вашему Google аккаунту.

Следующие 3 строчки предназначены для авторизации. Далее с помощью объекта $gdClient мы сможем получать данные от Google сервиса.

Выборка документов всех видов

Для того чтобы вывести все документы, которые содержаться в вашем Google Docs выполните следующий код:

// ... подключение к сервису Google Documents List

echo "<h1>Документы всех форматов</h1>";
$feed = $gdClient->getDocumentListFeed();

echo "<ul>";
foreach ($feed->entries as $entry) {
    echo "<li>";
        echo "<a href=" . $entry->getAlternateLink()->href . ">";
            echo $entry->title;
        echo "</a>";
        echo "<br>";
        echo "ID: " . $entry->id->text . "<br>";
        echo "Опубликовано: " . $entry->published->text . "<br>";
        echo "Обновлено: " . $entry->updated->text . "<br>";

        echo "Авторы: ";
        foreach ($entry->author as $author) {
            echo "Имя: " . $author->name->text . "<br>";
            echo "Email: " . $author->email->text . "<br>";
        }
    echo "</li>";
}
echo "</ul>";

В данном листинге обратите внимание на вызов $gdClient->getDocumentListFeed(). Данный метод возвращает массив из объектов, которые ассоциируются с документами Google.

Выборка всех каталогов

Для исключительно названий папок, воспользуйтесь следующим кодом:

echo "<h2>Список папок</h2>";
$feed = $gdClient->getDocumentListFeed('https://docs.google.com/feeds/documents/private/full/-/folder');
echo "<ul>";
foreach ($feed->entries as $entry) {
    echo "<li>";
    echo "<a href=" . $entry->getAlternateLink()->href . ">";
    echo $entry->title;
    echo "</a>";
    echo "</li>";
}
echo "</ul>";

Выборка всех документов в каталоге Test

echo "<h2>Все документы в каталоге Test</h2>";

$folderOwnersEmailAddress = "email@gmail.com";
$folderName = "Test";
$folderCategory = '{http://schemas.google.com/docs/2007/folders/' . $folderOwnersEmailAddress . '}' . $folderName;
$queryUrl = 'https://docs.google.com/feeds/documents/private/full/-/' . urlencode($folderCategory);
$feed = $gdClient->getDocumentListFeed($queryUrl);

echo "<ul>";
foreach ($feed->entries as $entry) {
    echo "<li>";
    echo "<a href=" . $entry->getAlternateLink()->href . ">";
    echo $entry->title;
    echo "</a>";
    echo "</li>";
}
echo "</ul>";

Далее рассмотрим как выводить различные виды документов отдельно.

Выборка всех текстовых документов

echo "<h2>Все текстовые документы</h2>";
$feed = $gdClient->getDocumentListFeed('https://docs.google.com/feeds/documents/private/full/-/document');
echo "<ul>";
foreach ($feed->entries as $entry) {
    echo "<li>";
    echo "<a href=" . $entry->getAlternateLink()->href . ">";
    echo $entry->title;
    echo "</a>";
    echo "</li>";
}
echo "</ul>";

Выборка всех табличных документов

echo "<h2>Все табличные документы</h2>";
$feed = $gdClient->getDocumentListFeed('https://docs.google.com/feeds/documents/private/full/-/spreadsheet');
echo "<ul>";
foreach ($feed->entries as $entry) {
    echo "<li>";
    echo "<a href=" . $entry->getAlternateLink()->href . ">";
    echo $entry->title;
    echo "</a>";
    echo "</li>";
}
echo "</ul>";

Выборка всех презентаций

echo "<h2>Все презентации</h2>";
$feed = $gdClient->getDocumentListFeed('https://docs.google.com/feeds/documents/private/full/-/presentation');
echo "<ul>";
foreach ($feed->entries as $entry) {
    echo "<li>";
    echo "<a href=" . $entry->getAlternateLink()->href . ">";
    echo $entry->title;
    echo "</a>";
    echo "</li>";
}
echo "</ul>";

В следующей части рассмотрим как реализовать поиск по названию, загружать документы в Google Docs и удалять их.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Станислав Протасевич
Урок создан: 3 Сентября 2014
Просмотров: 20707
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 4 Сентября 2014 14:50
    xzoner
    Скажите, а будут статьи с использованием Zend Framework версии 2+
    • 4 Сентября 2014 16:48
      stas.protasevich
      Zend Gdata является отдельным компонентом и пока что есть только в составе ZF1.
  • 18 Сентября 2014 15:38
    lhornet
    Подскажите пожалуйста, как в Google Docs таблицы средствами PHP сохранять данные форм на сайте? Заранее благодарен, Алексей.
    • 18 Сентября 2014 16:51
      stas.protasevich
      Затронем эту тему в будущих уроках
  • 18 Сентября 2014 17:50
    lhornet
    Если возможно, в будущем уроке опишите пож-та подробно процесс создания spreadseet, формы для нее и авторизации для соединения с google docs. С чем может быть связана подобная проблема - <br /> <b>Fatal error</b>: Uncaught exception 'Zend_Gdata_App_AuthException' with message 'Authentication with Google failed. Reason: BadAuthentication' in /var/www/user/data/www/seam.ua/ZendGdata/library/Zend/Gdata/ClientLogin.php:175 Stack trace: #0 /var/www/user/data/www/seam.ua/gsubmitclicknew.php(35): Zend_Gdata_ClientLogin::getHttpClient('###', '###', 'wise') #1 {main} thrown in <b>/var/www/user/data/www/seam.ua/ZendGdata/library/Zend/Gdata/ClientLogin.php</b> on line <b>175</b><br />. Как ее можно устранить? Спасибо.
    • 18 Сентября 2014 21:54
      stas.protasevich
      Неправильно указан логин или пароль от учётной записи Google. Либо настройки приватности Google запрещают удалённую авторизацию. Посмотрите информацию об этом в первом уроке.
  • 19 Сентября 2014 10:54
    lhornet
    Либо настройки приватности Google запрещают удалённую авторизацию - я вот тоже так думаю. Как разрешить удаленную авторизацию?
    • 19 Сентября 2014 23:00
      stas.protasevich
      Вот тут: https://www.google.com/settings/security/lesssecureapps
  • 23 Сентября 2014 12:45
    lhornet
    Разобрался с проблемой, если кому будет полезно напишу что не получилось. Но прежде всего я хотел бы поблагодарить автора статьи - Станислава Протасевича, который не просто мне помог разобраться с проблемой, а консультировал до того момента пока я полностью не решил проблему. Итак по гугл доксу: 1. Если вы размещаете скрипт на сервере на нем должен быть включен протокол ssl, т.к. вы авторизуетесь удаленно с другого адреса; 2. В самом аккаунте гугл должен быть включен доступ к аккаунту во вкладке безопасность. 3. Таблица и форма должна быть создана с помощью spreadsheet и имена полей с которых принимаются данные должны четко соответствовать полям в форме гугл докс. 4. Если вы сохраняете дату и referer, то они должны быть в кавычках. ($FormData["date"] = $datetime->format("Y/m/d H:i:s"); $FormData["referer"] = $_SERVER['HTTP_REFERER'];). Это конечно очевидно, но может быть причиной ошибок. 5. Если появляется ошибка вроде (Fatal error: Uncaught exception 'Zend_Gdata_App_HttpException' with message 'Expected response code 200, got 400 Запись пустых строк невозможна; выполните операцию удаления.) происходит как правило из-за того что указана запись в первую строку таблицы которая уже занята записью. Лично мне помогло убрать из скрипта - $worksheetID = "od6". Соотвественно отсюда тоже - $insertedListEntry = $spreadsheetService->insertRow($FormData, $spreadsheetKey); 6. В случае если ошибка выпадает - (Fatal error: Uncaught exception 'Zend_Gdata_App_AuthException' with message 'Authentication with Google failed. Reason: BadAuthentication' in ...) это происходит скорее всего по таким причинам. Во первых нужно проверить правильность логина пароля и $spreadsheetKey. Второе к доступ аккаунту должен быть включен(пункт 2). Третье как правило гугл распознает такое подключение как взлом вашей учетки и блокирует всяческое проникновение к ней. В результате в учетке возникает ошибка (оформлена красным цветом) "Ваша учетную запись пытались пытались взломать. Это были вы?" тут нужно нажимать да. В противном случае если это не поможет нужно создавать новую учетную запись, мне помогло именно это. 7. Проверять работу лучше сначала на локальном веб-вервере (на к-ром тоже должнен быть включен модуль ssl), и когда полностью будет готово загружать это все на сервер. У меня по началу работало по разному пока я не разобрался с ошибками. Также рекомендую всем на момент отладки включить режим отображение всех ошибок - error_reporting(E_ALL); ini_set('display_errors', 1);
  • 24 Сентября 2014 18:29
    SP86
    Здравствуйте. Подскажите пожалуйста по поводу "Выборки всех документов в каталоге". Как правильно задать ссылку не пойму почему именно http://schemas.google.com/docs/2007/folders/ У меня файлы выводит по группам (текстовые таблицы и т.д.) но все файлы из определенного каталого (тоже назвал test) не выводит. Как можно это исправить. Спасибо.
  • 25 Сентября 2014 16:02
    SP86
    Уже разобрался. Я просто не указал gmail-почту этого аккаунта перед выводом документов из нужного мне каталога
  • 7 Апреля 2015 15:17
    askripka
    Галку Разрешить на https://www.google.com/settings/security/lesssecureapps поставил, все равно не работает:
    Fatal error: Uncaught exception 'Zend_Gdata_App_AuthException' with message 'Authentication with Google failed.
    Reason: BadAuthentication' in /***/www/Zend/Gdata/ClientLogin.php:175
    Stack trace: #0 /***/www/test2.php(25): Zend_Gdata_ClientLogin::getHttpClient(***, ***, 'writely') #1 {main} thrown in /***/www/Zend/Gdata/ClientLogin.php on line 175
    
    Данная библиотека уже не работает? Или где искать причину
    • 3 Октября 2016 16:58
      av2222
      Здравствуйте. Вы нашли рабочее решение?
  • 3 Октября 2016 16:57
    av2222
    Здравствуйте. У меня тож. не работает и тоже "Разрешить" на https://www.google.com/settings/security/lesssecureapps установлено. Так библиотека актуальна?
    Fatal error: Uncaught exception 'Zend_Gdata_App_HttpException' with message 'Expected response code 200, got 401 <HTML> <HEAD> <TITLE>Authorization required</TITLE> ... 
^ Наверх ^