Добрый день. Возникла проблема. Разрабатываем сейчас телеграмм бота на PHP, возникла необходимость выгружать данные из Google-таблицы в бота. Для этой выгрузки прекрасно подошел node.js, но теперь встала проблема в том, что нужно полученный массив данных обратно передать в PHP, была предпринята попытка загружать полученные данные в текстовый файл и потом в PHP от туда забирать данные. Но при тестировании бота возникает проблема, почему JS-скрипт не срабатывает (срабатывает только если напрямую запускать php-файл в терминале сервера). Да и вообще хранить данные в txt как-то не правильно. Поэтому хотелось бы передать из js в PHP массив, но к сожалению понятия не имею как можно это сделать. Для запуска скрипта js используем функцию shell_exec. Вот куски кода:
|
1 |
$file = "JSON/sheets.txt"; $table = 'copyright'; $result = shell_exec("node sheets.js $file $table");//выполнение файла получения из google-таблиц нужных данных. $result = file_get_contents($file); // при тестирование бота, он считывает этот файл. |
|
1 |
auth.authorize((err) => { if (err) { console.error("Ошибка авторизации:", err); return; } /*Создание подключения */ const sheets = google.sheets({ version: "v4", auth: auth }); /*Получение данных из таблицы */ sheets.spreadsheets.values.batchGet( { spreadsheetId: spreadsheetId, majorDimension: "COLUMNS", ranges: range, auth: auth, }, (err, response) => { //Обработка данных из таблицы if (err) { console.log("Ошибка:" + err); return; } const valueRanges = response.data.valueRanges; let messageText = 'Ваши заявки:'; valueRanges[0].values[0].map((_, index) => { let tempText = ''; let date = 'Дата:'; let name = '#Имя:'; let text = '#Обращение:'; tempText = tempText + date + valueRanges[0].values[0][index]; tempText = tempText + name + valueRanges[1].values[0][index]; tempText = tempText + text + valueRanges[2].values[0][index] + "n"; messageText += tempText; }); const pathToFile = argv[2]; //переменная из php fs.writeFileSync(pathToFile, messageText); } ); }); }) |
Необходимо PHP передать переменную messageText.
Дополнительно:
Содержание
Как вариант, напиши bash скрипт, который запускает node js и формирует файл, и уже этот скрипт запускай через shell_exec. А вообще в интернете много примеров как на php парсят гугл таблицы.
1) Вы можете сделать http запрос POST или GET к url по которому находится ваш php скрипт.
2) Если node.js и php находятся на одном сервере вы можете вызвать нужный php скрипт.
3) Вы можете использовать веб сокеты, настроив соединение между node.js и php.
4) Вы можете использовать общую директорию или базу данных в которую будете записывать данные, и оттуда забирать их с помощью php.
Я бы посоветовал 1 или 2 вариант.
Пример 1 варианта:
|
1 |
const axios = require('axios'); axios.post('http://example.com/your-php-script.php', { data: 'your data' }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); |
Получение данных в php:
|
1 |
$data = $_POST['data']; echo $data; |
Пример 2 варианта:
|
1 |
const { exec } = require('child_process'); const data = 'your data'; const command = `php /path/to/your-php-script.php "${data}"`; exec(command, (error, stdout, stderr) => { if (error) { console.error(`Error executing PHP script: ${error}`); return; } console.log(stdout); }); |
Получение данных в php:
|
1 |
$data = $argv[1]; echo $data; |
Ответы:
Пути полные укажи
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для передачи переменной из JavaScript (в данном случае в node.js) в PHP можно воспользоваться следующими способами:
1. Использование AJAX запроса:
Вы можете отправить AJAX запрос с помощью JavaScript из вашего node.js приложения на серверную часть, где PHP обработает этот запрос и получит переданную переменную. Например, в node.js:
js
var xhr = new XMLHttpRequest();
xhr.open('POST', 'your_php_script.php', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({ variable: 'value' }));
В вашем PHP скрипте (your_php_script.php) вы можете получить переданную переменную следующим образом:
php
$data = json_decode(file_get_contents('php://input'), true);
$variable = $data['variable'];
2. Использование формы:
Вы также можете создать форму в вашем HTML/JavaScript коде и отправить данные на серверную часть, где PHP сможет получить переменную. Например, в node.js:
jsdocument.getElementById('myForm').submit();
В вашем PHP скрипте (your_php_script.php) вы можете получить переданную переменную следующим образом:
php
$variable = $_POST['variable'];
Оба способа позволяют передать переменную из JavaScript (node.js) в PHP. Выберите тот, который лучше подходит для вашего конкретного случая.