У меня есть эта проблема, и я новичок в мире REST API. У меня есть сайт Wordpress, на котором я продаю компакт-диски, и мне приходится принимать все заказы дня и отправлять определенные данные (например, штрих-код/код, название альбома, объем продаж и т. д. и т. п.) на сервер. , отправляя эти данные с помощью вызовов REST API. Я никогда раньше им не пользовался, но пытаюсь этому научиться.
Итак, чтобы получить данные моего сайта Wordpress, я отправляю запрос GET с помощью API Wordpress и получаю файл JSON со всей необходимой информацией. Но из всей этой информации мне просто нужно экстраполировать часть, а затем отправить ее на этот сервер с помощью POST-запроса. (Сервер и API корейские и взяты из Hanteo Chart).
Основная проблема в том, что мне нужно написать скрипт для автоматизации всего процесса, и я не знаю, с чего начать. Взять один запрос из Wordpress, а затем отправить его на сервер, это легко, мне нужно только вручную вставить единственные необходимые данные, и все готово, но взять всю информацию из URL-адреса (для выполнения запроса GET) и отправить все, обработанное правильно для меня это сложно.
Я научился выполнять GET-запросы из Wordpress, поэтому с помощью этого URL-адреса я принимаю все свои заказы за день: https://example.com/wp-json/wc/v3/orders?consumer_key=ck_xxx&consumer_secret=cs_xxx&modified_after=2024-06-25T00:00:00&modified_before=2024-06-26T00:00:00&status=completed
Это возвращает файл JSON с большим количеством информации, в котором мне нужно взять всего несколько полей, например line_items, который представляет собой массив, содержащий все данные о продуктах заказа.
Мне жаль, что я не могу поделиться с вами всем файлом JSON (из-за конфиденциальных данных внутри), но я попытаюсь объяснить вам на примере.
Например: URL-адрес возвращает десять заказов, которые представляют собой дополнительные идентификаторы от 0 до 9. В каждом из этих идентификаторов (например, я беру идентификатор 0, то есть первый заказ) есть информация об этом конкретном заказе, такая как id_order, статус ( который, конечно, всегда полный), валюта, общая сумма и т. д. и т. п., и мне нужен line_items, который, в свою очередь, содержит 3 идентификатора заказанных продуктов. Таким образом, идентификаторы от 0 до 2. В идентификаторе продукта (в данном случае я беру первый продукт, поэтому идентификатор снова равен 0) мне нужно взять следующие атрибуты: ean, name (это название альбома), Product_id, количество и артикул.
Чтобы быть более понятным, у меня есть что-то вроде этого (я выделил жирным шрифтом интересующие меня атрибуты):
[
{
"id": 44412,
"parent_id": 0,
"status": "completed",
"currency": "EUR",
"date_created": "2024-06-21T14:25:07",
"date_modified": "2024-06-21T14:57:54",
"discount_total": "0.00",
"discount_tax": "0.00",
"shipping_total": "6.50",
"shipping_tax": "0.00",
"cart_tax": "0.00",
"total": "75.40",
"total_tax": "0.00",
...
...
"**line_items**": [
{
"id": 59401,
"**name**": "albumName",
"**product_id**": 38515,
"variation_id": 0,
"**quantity**": 1,
"tax_class": "",
"subtotal": "68.90",
"subtotal_tax": "0.00",
"total": "68.90",
"total_tax": "0.00",
"taxes": [],
"**sku**": "SEV53",
"price": 68.9,
"parent_name": null,
"**ean**": eanOfTheAlbum
}
... and here i have other data for other products, I show only the first one, so the one with id 0 in line_items, but I have to take the bold attributes for every products ...
],
}
]
Затем мне нужно выполнить запрос POST на сервер, отправив все эти данные (запрос POST сам по себе прост, как и запрос GET, я могу сделать один, но моя проблема заключается в отправке более одного данных за раз. ).
Проблема в том, как мне написать скрипт, который будет делать все это автоматически, например, каждый день в 23:00 (или 23:00)? Я не знаю, с чего начать, можно ли все это сделать в Wordpress или нет, а если нет, то какой язык программирования лучше и что-то в этом роде.
Заранее спасибо всем, кто ответит на этот вопрос, и извините за мой английский.
Предполагая, что вы используете систему Linux, вы можете выполнить анализ JSON в сценарии bash с помощью jq . Чтобы создать массив объектов только с нужными полями, вы можете использовать карту, которая будет выглядеть примерно так jq '.line_items | map({name, product_id, quantity, sku, ean})'
. Затем, изменив JSON так, чтобы он соответствовал вашей схеме API, и добавив учетные данные, вы можете передать результат в curl --json @- <api_endpoint>
( см. здесь ). Для автоматизации выполнения вы можете использовать cron / anacron. Ваш кронтаб выглядел бы так: 0 23 * * * /path/to/shell/script
, если бы вы хотели запускать скрипт в 23:00 каждый день.
Ого, спасибо! Не знал о jq, манипулировать файлом JSON очень легко. Действительно однострочная команда. Спасибо большое, попробую и сообщу. Разве я не должен передать ему в команде curl файл json, который я только что создал с помощью jq? Итак, @file.json вместо @-. А поскольку мне нужно добавить crontab в WordPress, можно ли безопасно отправить команду curl с учетными данными? Потому что мне нужно пройти аутентификацию с помощью токена перед отправкой данных на этот сервер.
Таким образом, команда Curl будет примерно такой: Curl --header "Content-Type: application/json", "Authorization:Bearer my_token_key" \ --request POST \ --json @myfile.json <api_endpoint>
@CuloAtomico Прочтите связанную документацию. @- сообщает Curl читать входные данные со стандартного ввода, а «@file.json» предназначен для локального файла. Нет проблем с конфиденциальностью, если вы используете HTTPS.
Обновлено: код jq необходимо немного изменить, чтобы он работал, и он выглядит так: jq ' .[] | .line_items | map({name, Product_id, Quantity, sku, ean}) 'Теперь все работает без проблем, еще раз спасибо!
Спасибо большое viv55 за корректировку по тексту!