Чтение Google таблиц через PHP и вывод данных на HTML страницу

    4 комментария 6946

Google shits

Привет, друзья! В этой статье вы узнаете как работать с гугл таблицами через PHP? а именно получать из Google Shits данные и выводить их на странице сайта в HTML таблицу. Эта задача интересная и может применяться в реальных проектах. Примером может послужить обычный лендинг, на котором размещены цены товаров и они периодически меняются. Но лендинг, к примеру, не имеет админки и в штате компании нет вебмастера, которых бы мог изменять цены на сайте.

Телеграм-канал serblog.ru

Решением может быть как раз создание прайса в Google таблице. Если данные в ней будут обновлены, то автоматически цены изменятся и на сайте. Это очень удобно и сейчас максимально подробно объясню, как это реализовать с использованием языка PHP. Для начала в качестве примера создадим таблицу с неким набором данных. Пусть это будут мобильные телефоны.

Прайс лист на мобильные телефоны в гугл таблицах

Теперь необходимо предоставить доступ и отправить ссылку на редактирование Google таблицы для тех, кто будет это делать.

Редактирование гугл таблиц

Теперь сам PHP код, который поможет нам прочитать и вывести текст из гугл таблицы.

1
2
3
4
5
$id = 'Идентификатор документа. Его видно в ссылке';
$gid = 'Идентификатор листа. Первый лист всегда 0';
$csv = file_get_contents('https://docs.google.com/spreadsheets/d/' . $id . '/export?format=csv&gid=' . $gid);
$csv = explode("\r\n", $csv);
$array = array_map('str_getcsv', $csv);

Если мы сейчас распечатаем на странице переменную $array с помощью функции print_r, то увидим массив всего, что мы вносили в Google таблицу. Но нам нужно не просто его вывести, а красиво оформить в HTML таблице. И давайте ее создадим. Я буду использовать Bootstrap 4.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<table class="table">
  <thead class="thead-dark">
    <tr>
      <th scope="col"></th>
      <th scope="col">Марка</th>
      <th scope="col">Модель</th>
      <th scope="col">Цена</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">1</th>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  </tbody>
</table>

Теперь напишем цикл foreach, вернее их будет 2, но перед ними создадим счетчик, который будет итерироваться с каждым проходом цикла и это будет нумерация в таблице.

$i = 0;

И так как у нас нулевой элемент массива — это названия, которые мы уже прописали вручную, то просто удалим его.

unset($array[0]);
1
2
3
4
5
6
7
8
9
10
foreach ($array as $arr){
  $i++;
  $html .= '<tr>';
  $html .= '<td scope="row">'.$i.'</td>';
  foreach ($arr as $td) {
    $html .= '<td scope="col">'.$td.'</td>';
  }
  $html .= '</tr>';
}
echo $html;

В итоге вся табличка должна получиться такой:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<table class="table">
  <thead class="thead-dark">
    <tr>
      <th scope="col"></th>
      <th scope="col">Марка</th>
      <th scope="col">Модель</th>
      <th scope="col">Цена</th>
    </tr>
  </thead>
  <tbody>
    < ?php
    foreach ($array as $arr){
  $i++;
  $html .= '<tr>';
  $html .= '<td scope="row">'.$i.'</td>';
  foreach ($arr as $td) {
    $html .= '<td scope="col">'.$td.'</td>';
  }
  $html .= '';
}
echo $html;
    ?>
  </tbody>
</table>

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

html-table

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

$range = 'A1:C10';
$csv = file_get_contents('https://docs.google.com/spreadsheets/d/' . $id . '/export?format=csv&gid=' . $gid. '&range=' . $range);

В этом случае таблица будет читаться из диапазона от A1 до C10. Все остальное на страницу не попадет, поэтому можно в остальных ячейках писать какие-то комментарии.

Любая сумма на развитие сайта

4 комментария
  1. Mixa:

    Класс! Спасибо! А есть какие-либо ограничения по количеству запросов через API?

  2. Сергей:

    Я перевел своих клиентов на webjack, делает все то же самое, минимальный тариф дешевле.
    Можно получить месяц бесплатно по промокоду semen21, напишите его в чат техподдержки на сайте

  3. Дмитрий:

    А есть вариант убрать нумерацию строк по порядку?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *