Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   API - запрос - ответ (https://javascript.ru/forum/dom-window/80251-api-zapros-otvet.html)

oslayer 14.05.2020 08:14

API - запрос - ответ
 
Здравствуйте!
Есть вот такой сайт https://travelshift.com

Скрипт отправляет запрос вот сюда
https://travelshift.com/wp-content/t...i/?action=base
(если ввести запрос в окно браузера, будет видно что отдаёт запрос)

Соответственно приходит ответ, всё замечательно.

Вопрос в том что лежит в это папке (/api)?
https://travelshift.com/wp-content/t...avelshift/api/

Конечная цель сделать свой файл в папке /api но уже на своём сайте, что бы он отдавал аналогичные данные.

Либо подставить эти (уже запрошенные данные) в некий массив в скрипте который должен получить этот ответ
Пожалуйста помогите... у самого ума не хватает :(

laimas 14.05.2020 08:32

Цитата:

Сообщение от oslayer
Вопрос в том что лежит в это папке (/api)?

Серверный скрипт делающий запрос к базе и возвращающий ответ в формате json. А вообще обслуживать этот запрос клиента будет не один файл на сервере. То есть как бы понятно, что для этого на сервере не папка в которой лежит нечто, это сетевой путь?

oslayer 14.05.2020 08:38

Скрипт отправляет запрос именно по этому пути https://travelshift.com/wp-content/t...i/?action=base

Так как это wordpress, можно утверждать что ./api - это папка в которой лежит некий файл, который и отдаёт данные

Что именно отдаёт можно посмотреть вот здесь - https://travelshift.com/wp-content/t...i/?action=base

oslayer 14.05.2020 08:40

Цитата:

Сообщение от laimas (Сообщение 524219)
Серверный скрипт делающий запрос к базе и возвращающий ответ в формате json.

Нет, это JS который выполняется из браузера.

oslayer 14.05.2020 08:47

Если в ./api лежат некие php файлы которые запрашивают БД и отдают json, то в таком случае взять уже готовый ответ и скопировать его в другой файл в ./api что бы он отдавал идентичные данные, но уже без запроса в БД

laimas 14.05.2020 08:49

То что вы принимаете за папку, это не в контексте wordpress будет сказано, не обязательно должно быть папкой, это может быть таким же параметром запроса как и action=base. Просто сервер перенаправляет все запросы на роутер (а это уже не обязательно один файл в какой-то папке), который и определяет "что делать" серверу.

Цитата:

Сообщение от oslayer
Нет, это JS который выполняется из браузера.

Щелкните по своей ссылке, ответ:

{"config":{"global":{"news":"News","partners_websi te":"Get in touch",.....

это данные, а не JS скрипт, формат json, который на клиенте будет преобразован в js объект.

oslayer 14.05.2020 09:10

Цитата:

Сообщение от laimas (Сообщение 524225)
{"config":{"global":{"news":"News","partners_websi te":"Get in touch",.....

это данные, а не JS скрипт, формат json, который на клиенте будет преобразован в js объект.

Совершенно верно, это данные. Запрос на получение отправляет js скрипт, который выполняется из браузера.

Мне как раз надо каким то образом подпихнуть этому скрипту уже свой свой файл (или данные) идентичные тем которые приходят из ./api

oslayer 14.05.2020 09:23

Вот этот скрипт
https://travelshift.com/wp-content/t...eeb227e4057.js

Выполняется из браузера.

Функция выполняющая запрос по поиску ?action=base

laimas 14.05.2020 09:24

Цитата:

Сообщение от oslayer
Мне как раз надо каким то образом подпихнуть этому скрипту уже свой свой файл

Даже и не знаю с какой стороны начать. Wordpress, это CMS, а она в свою очередь имеет ядро, которое имеет много файлов и в разных каталогах. Например, есть класс, который обслуживает только запросы к базе, и это не один файл. Есть те, назначение которых только проверка и фильтрация входных данных. И т.д., и т.п. То есть, это сложная структура. Естественно есть и база данных, а к ней куча файлов для ее обслуживания - административный раздел.

Если у вас сайт использует также эту CMS и то, чего вам хочется, это работа его модуля из коробки, то все файлы-скрипты у вас есть, что каждый из них конкретно делает можете и разбираться, если в этом есть смысл. Если это работа модуля написанного по индивидуальному заказу, то что файлы для него в CMS добавлены вам может сказать только его автор.

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

laimas 14.05.2020 09:28

Цитата:

Сообщение от oslayer
Вот этот скрипт

Это js код, в нем запрос, вас интересующий, выполняет мизерная часть этого скрипта. И клиент никак не может управлять каталогами и данными на сервере. Откройте отладчик браузера, выберите в нем вкладку Сеть, сделайте запрос по этой ссылке. В нем вы увидите, что клиентский скрипт делает асинхронный запрос к серверу, а ответом его будет json. Забота клиента получив эти данные "расфасовать" их куда следует. Это все, что делает JS на клиенте, а что на сервере и какие файлы клиента не интересует, ему этого не нужно, у него иные задачи, да и сервер никогда не будет "афишировать" свою структуру.

oslayer 14.05.2020 09:34

Про wordpress всё понятно. тут дело в другом. этот сайт (travelshift) формируется динамически уже в браузере с помощью js.

т.е. вот эти данные, если вы посмотрите их внимательно служат как раз для формирования динамической страницы на стороне клиента с помощью js.(подозреваю что используется vue)

Мне нужно подпихнуть эти данные (они же отдаются в браузер, если ввести строку) в скрипт js который эти данные запрашивает.

что то типа локального подключения json файла. т.е. прямого указания - прочитать все данные из json файла, а возьму я эти данные не из базы wordpress, а введя ссылку в адресной строке и скопировав их в json

oslayer 14.05.2020 09:37

Цитата:

Сообщение от laimas (Сообщение 524229)
Сеть, сделайте запрос по этой ссылке. В нем вы увидите, что клиентский скрипт делает асинхронный запрос к серверу, а ответом его будет json. Забота клиента получив эти данные "расфасовать" их куда следует.

Вот мне и нужно расфасовать эти данные, но без запроса к бд wordpress, просто скопировав готовый ответ

laimas 14.05.2020 09:38

Вам что нужно именно эти данные? Ну так заберите их и поместите у себя на сайте как файл, затем запрашивайте их (для его получения и скриптов то не надо будет, хватит и Apach), декодируйте и делайте с ними чего хотите.

oslayer 14.05.2020 09:48

Да именно, эти данные. которые нужно подпихнуть этому скрипту.

Так вот и проблема в том что не знаю как и где это сделать... ума не хватает :(

Смог найти и понять что вот этот скрипт
https://travelshift.com/wp-content/t...eeb227e4057.js
получает все необходимые данные

Понимаю что в нём нужно заменить запросы к api , на запросы к готовым файлам.

?action=base - только в одном месте в этом файле.

Но как это сделать - не знаю. Там слишком сложная для меня структура :(

laimas 14.05.2020 09:52

Я не понимаю чего надо. Что из этих данных должно получится на клиенте мне не ведомо. Кому что "подпихнуть" я не в курсе, могу только сказать, что это должен быть клиентский сценарий, который точно знает структуру данных, ожидает именно их.

А сами данные, коли они нужны, после запроса по ссылке сохраните как имя_файла.json у себя на сервере, если этого будет достаточно.

oslayer 14.05.2020 09:55

Цитата:

Сообщение от laimas (Сообщение 524236)
Я не понимаю чего надо. Что из этих данных должно получится на клиенте мне не ведомо. Кому что "подпихнуть" я не в курсе, могу только сказать, что это должен быть клиентский сценарий, который точно знает структуру данных, ожидает именно их.

fetchCombinedBase: (E = Object(o.a)(regeneratorRuntime.mark((function t(e) {
                        var r, n, o, c, l, d, h;
                        return regeneratorRuntime.wrap((function (t) {
                            for (;;) switch (t.prev = t.next) {
                                case 0:
                                    return r = e.commit, n = e.rootState, o = "".concat(T, "?action=base"), t.next = 4, f.a.get(o, {
                                        responseType: "json"
                                    });
                                case 4:
                                    c = t.sent, l = c.data, d = [], h = n.ui.bp.mobilePortrait ? 512 : 1024, Object.keys(l).forEach((function (t) {
                                        var e = l[t];
                                        "config" == t ? r("i18n/setContent", {
                                            en: e
                                        }, {
                                            root: !0
                                        }) : "pages" == t || "extrapages" == t ? d = d.concat(e) : "blogposts" == t ? r("setBlogPosts", {
                                            posts: e
                                        }) : "trips" == t ? r("setTrips", {
                                            trips: e,
                                            imageQuality: h
                                        }) : "partners" == t ? r("setPartners", {
                                            partners: e
                                        }) : "social_feed" == t && r("setSocialFeed", {
                                            feed: e
                                        })
                                    })), r("setPages", {
                                        pages: d
                                    });


Вот этот кусок кода, который по моему мнению получает данные. Если это так, то здесь нужно заменить на получение из файла. Как это сделать я не знаю.

laimas 14.05.2020 10:06

Здесь ?action=base, это GET параметры запроса с ключом action и значением base. Запрос будет производится по указанному пути, если судить по примеру, то .../api/ и если нет перенаправления, то в каталоге должен быть индексный файл, который и будет обрабатывать этот запрос - ключ и его значение. В CMS же все сложнее. В данном скрипте адрес запроса формируется тут - o = "".concat(T, "?action=base"). Вы можете вместо этого переменной "o" указать любой свой путь (относительный или полный) просто к файлу хранящему эти данные.

oslayer 14.05.2020 10:16

Цитата:

Сообщение от laimas (Сообщение 524238)
Здесь ?action=base, это GET параметры запроса с ключом action и значением base. Запрос будет производится по указанному пути, если судить по примеру, то .../api/ и если нет перенаправления, то в каталоге должен быть индексный файл, который и будет обрабатывать этот запрос - ключ и его значение. В CMS же все сложнее. В данном скрипте адрес запроса формируется тут - o = "".concat(T, "?action=base"). Вы можете вместо этого переменной "o" указать любой свой путь (относительный или полный) просто к файлу хранящему эти данные.

Что то типа
o = "".concat(T, "/mydata.json")
так?

laimas 14.05.2020 10:20

Метод concat() объединяет текст из двух или более строк и возвращает строку из этих строк. То есть, если переменная T содержит путь к реальному каталогу на вашем сайте, то да, нужно только в этом каталоге сохранить эти данные под указанным именем.

oslayer 14.05.2020 10:32

буду пробовать


Часовой пояс GMT +3, время: 22:19.