Привет, друзья! В этой статье вы узнаете как работать с гугл таблицами через PHP? а именно получать из Google Shits данные и выводить их на странице сайта в HTML таблицу. Эта задача интересная и может применяться в реальных проектах. Примером может послужить обычный лендинг, на котором размещены цены товаров и они периодически меняются. Но лендинг, к примеру, не имеет админки и в штате компании нет вебмастера, которых бы мог изменять цены на сайте.
Решением может быть как раз создание прайса в 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); |
$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> |
<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, но перед ними создадим счетчик, который будет итерироваться с каждым проходом цикла и это будет нумерация в таблице.
И так как у нас нулевой элемент массива — это названия, которые мы уже прописали вручную, то просто удалим его.
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; |
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> |
<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. И более того, если они будут обновляться, а так же добавляться новые, то изменения автоматически произойдут и на сайте, что очень удобно.
И еще один нюанс. В большинстве случаев нет необходимости читать все таблицу целиком, а лишь небольшой диапазон и мы можем его задать. Это позволить освободить память и увеличить скорость чтения.
$range = 'A1:C10';
$csv = file_get_contents('https://docs.google.com/spreadsheets/d/' . $id . '/export?format=csv&gid=' . $gid. '&range=' . $range); |
$range = 'A1:C10';
$csv = file_get_contents('https://docs.google.com/spreadsheets/d/' . $id . '/export?format=csv&gid=' . $gid. '&range=' . $range);
В этом случае таблица будет читаться из диапазона от A1 до C10. Все остальное на страницу не попадет, поэтому можно в остальных ячейках писать какие-то комментарии.
Класс! Спасибо! А есть какие-либо ограничения по количеству запросов через API?
На сколько мне известно при данном методе ограничений нет.
Я перевел своих клиентов на webjack, делает все то же самое, минимальный тариф дешевле.
Можно получить месяц бесплатно по промокоду semen21, напишите его в чат техподдержки на сайте
А есть вариант убрать нумерацию строк по порядку?
Осталось понять как яблочная система может видеть это. В настоящее время- айпады/апйфоны- не видят.Пустой лист
Странно. Вы уверены, что дело именно в устройстве?