Перейти к содержанию

rest api


Рекомендуемые сообщения

Не понимаю как изменить customfields.
image.png.92b6541b70fcee29c26a6cd4be437aeb.png

$curl = curl_init($api_url . 'api' . $api_endpoint . '?key=' . $api_key);
								curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => TRUE,	CURLOPT_POST => 1, ));
								curl_setopt($curl, CURLOPT_POSTFIELDS, $new_fields);
								$response = curl_exec($curl);

Как $new_fields объявить, чтобы записать текст в hpp reload harward id?

Ссылка на комментарий
Поделиться на другие сайты

Что-то я не вижу api у customFieilds.

  Именно у дополнительных полей апи нету, изменить можно только значение дополнительного поле пользователя.

Ссылка на комментарий
Поделиться на другие сайты

Только что, siv1987 сказал:

Что-то я не вижу api у customFieilds.

image.thumb.png.a1b23648344df0544df40ff259c71142.png

Ссылка на комментарий
Поделиться на другие сайты

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

Я не очень разбираюсь что на скриншоте но на сколько понимаю это именно настройки

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, siv1987 сказал:

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

Я не очень разбираюсь что на скриншоте но на сколько понимаю это именно настройки

ты вообще не шаришь

Ссылка на комментарий
Поделиться на другие сайты

Возможно. Я просто недавно установил ипб. Возможно в РЕСТ апи и не шарю, но не трудно открыть сорсы апи и посмотреть какие методы там поддерживаются, тем более для такого профи как вы это как два пальца обсосать.

 

Ссылка на комментарий
Поделиться на другие сайты

    curl_setopt($curl, CURLOPT_POSTFIELDS, "customFields[2]=$hwid");
vse pasiba

Ссылка на комментарий
Поделиться на другие сайты

С самого начала конечно же спросить нормально "как изменить значение дополнительного поле у пользователя с %id" нельзя было, вместо этого приводить непонятный скриншот, а потом огрызаться на то, что не умеем правильно задавать вопросы. Учитесь спрашивать что вам нужно, а не показывать на тупом наборе данных еще и с скриншота "как сделать?". Откуда появилась это дебильная мода в программирование все приводить скриншотами. Школота их сует куда только можно, вместо того чтобы задать по человечески вопрос. Видимо такой нынче прогресс.

Ссылка на комментарий
Поделиться на другие сайты

//Функция получения данных пользователя
    function member_get($url, $api, $member_id, $apiKey) {
        $curl = curl_init($url . $api . $member_id); //'api/core/members/'
        curl_setopt_array($curl, array(
            CURLOPT_RETURNTRANSFER => TRUE,
            //CURLOPT_HTTPGET => TRUE,
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
            CURLOPT_USERPWD => "{$apiKey}:",
             
        ));

        $curl_exec = curl_exec($curl);
        curl_close($curl);
        return $curl_exec;
    }
//Функция изменения 
    function member_put($url, $api, $member_id, $apiKey, $parameter, $value) {
        $curl = curl_init($url . $api . $member_id); //'api/core/members/'
        curl_setopt_array($curl, array(
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_POST => true,
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
            CURLOPT_USERPWD => "{$apiKey}:",
            CURLOPT_POSTFIELDS => $parameter . "=" . $value

        ));
        $curl_exec = curl_exec($curl);
        curl_close($curl);
        return $curl_exec;
    }


$api = "api/core/members/";
$url = "http://mysite.ru"; 
$member_id = 25
$apiKey = "blablabla";

$customFields = member_get($url, $api, $member_id, $apiKey); //все данные пользователя в виде объекта
$customFieldsArr = json_decode($customFields, TRUE); //все данные пользователя в виде массива

member_put($url, $api, $member_id, $apiKey, "customFields[8]", 20); //поле с индексом 8 присваивается значение 20

 

Ссылка на комментарий
Поделиться на другие сайты

aplayer Очень не удобно когда когда имена полей отдельно от значений. А если там несколько значений? Почему массивом не отправить.

<?php

function request($api, $post=false){
	global $url, $apiKey;
	
	$curl = curl_init($url . $api);
	curl_setopt_array($curl, array(
		CURLOPT_RETURNTRANSFER => TRUE,
		CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
		CURLOPT_USERPWD => "{$apiKey}:",
	));
	if($post){
		curl_setopt_array($curl, array(
			CURLOPT_POST => true,
			CURLOPT_POSTFIELDS => $parameter . "=" . $value,
		));
	}
	
	$curl_exec = curl_exec($curl);
	curl_close($curl);
	return $curl_exec;
}

function member_get($member_id) {
	return request('api/core/members/'.$member_id);
}

function member_put($member_id, $fields) {
	return request('api/core/members/'.$member_id, $fields);
}

$url = "http://mysite.ru"; 
$apiKey = "blablabla";
$member_id = 5;

member_get($member_id); //все данные пользователя в виде json
member_put($member_id, array('customFields' => array(8 => 20))); //поле с индексом 8 присваивается значение 20

код писался на коленке.

CURLOPT_POSTFIELDS => $post,

вместо CURLOPT_POSTFIELDS => $parameter . "=" . $value,

Ссылка на комментарий
Поделиться на другие сайты

Еще добавлю комент к своим функциям

Надо проверять их значение на false. Оно должно возвратиться если сервер с rest api недоступен.

у меня скрипт выполнялся на одном сервере с форумом. Тоесть я считал, что если сервер с rest api недоступен то и скрипт не сможет выполниться. Сервер-то один. Однако оказалось что скрипт вполне может выполняться когда rest api недоступен. Не знаю как это происходит, но факт подтвержденный.

 

siv1987 я бы не стал выкладывать код слепленный на коленке. Информации по этим полям в интернете нет вообще. Я целый месяц ломал голову, как до этих полей добраться. Оно же имеет многоуровневую структуру. Однако ларчик просто открывался - надо в пост запросе указывать только последний элемент ветки.

Если ваш код не правильный, то вы введете в заблуждение много людей. Поиск в гугле по запросу customFieilds скорее всего будет выдавать эту страницу потому-что больше нигде эта проблема не обсудается.

 

А так да. Можно любым образом оптимизировать код.

мои функции сделаны с расчетом на одиночные удары.

 

 

Ссылка на комментарий
Поделиться на другие сайты

aplayer а я бы не стал выкладывать такой унылый код, ведь примеров в интернете очень мало. Скрипт слепленный на коленке по вашему примеру, и все там правильно. Просто есть небольшие синтаксические ошибки которые я заметил глазом после отправки сообщения. Для обычного программиста это не составит никаких проблем. Вы, я надеюсь, не предполагаете как ТС что я не знаком с REST api, и в частности с структурой IPS занимаясь разработкой модификаций еще с древней версии 2.3?..

Какая многоуровневая структура у обычного массива? Какой информации в интернете нет вообще? Достаточно открыть документацию, хотя бы на том же сркиншоте у ТСа есть вся необхадмая информация, из которой он не понял что customFieilds  это обычный массив в виде ид поле => значение. Вы считаете это сложной проблемой? Не понятно описание, можно открыть первоисточник - код апи, и наглядно посмотреть как работает функция, а конкретно эта переменная. Неужели это вы искали целый месяц?

Полно, ребята, перестаньте изучать php по видеоурокам Попова, а если что-то не понятно, лучше спросить у компетентных людей чем искать это месяцами. Я понимаю что вы хотели "*****" своими знаниями в предметной области, пологая что если вы ней копались целый месяц то это нечто сложное и известное только вам одному, но имею ничего против, но тут затронуто моя профессиональная честь. Я же потеряю уважение среди корешей разработчиков, надеюсь я еще не зашкварился здесь.

Ссылка на комментарий
Поделиться на другие сайты

48 минут назад, siv1987 сказал:

а если что-то не понятно, лучше спросить у компетентных людей чем искать это месяцами.

Как правило такие люди всегда в работе.

siv1987 не обращай внимания, тем, кто пользуется твоими плагинами, ты уже давно уже всё доказал, в интернете хейт это норма, тебе ли не знать.

PS: планируешь обновить плагин авторизации через ВК для 4.4?

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Respected сказал:

PS: планируешь обновить плагин авторизации через ВК для 4.4?

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

12 минут назад, Respected сказал:

Как правило такие люди всегда в работе. 

Но подсказать советом всегда смогут. Да и пару строчек кода накинут если требуется.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, siv1987 сказал:

Какая многоуровневая структура у обычного массива? Какой информации в интернете нет вообще? Достаточно открыть документацию, хотя бы на том же сркиншоте у ТСа есть вся необхадмая информация, из которой он не понял что customFieilds  это обычный массив в виде ид поле => значение.

Я тоже по началу въехать не мог. Когда мы делаем гет-запрос нам приходит json типа

customfields

___2

_____fields

__________2

_______________name

_______________value

__________3

_______________name

_______________value

 

Это массив элементами которого являются массивы. Не знаю как у вас называется эта структура, я называю его многоуровневый массив, может ошибаюсь.

А вот в пост-запросе нам надо отправить одномерный массив customfields[id]=value

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

Что там написано в документации? Array of custom fields as fieldId => fieldValue. Ну и как мне из этой строки понять, что массив должен иметь имя customfields и никак иначе?

 

Ссылка на комментарий
Поделиться на другие сайты

Документация в этом случае является первоисточником, не стоит полагаться на ответе от другого запроса. Там есть названия полей для запроса и описание их структуры. Все очень просто, name это string, group это id, а customFields это массив fieldId => fieldValue . Есть сомнения в описание типа запроса, всегда можно посмотреть в коде, при одном взгляде все становится предельно ясно.

            foreach ( \IPS\Request::i()->customFields as $k => $v )
            {
                $profileFields[ 'field_' . $k ] = $v;
            }


В случае "get" запроса возвращаются все дополнительные поля пользователя сгруппированные по ид группе полей. Да, в виде многомерного массива. Понятно что такая структура для запроса на запись лишняя. Такой ответ подходит только для GET запроса.

Ссылка на комментарий
Поделиться на другие сайты

18 часов назад, siv1987 сказал:

непонятный скриншот

Для понимания ситуации.

На этом скриншоте часть данных полученных при get-запросе к rest api:  api/core/members/$member_id

Скорее всего это страница исходного кода браузера на которой выведен результат print_r или var_dump  функции member_get();, которая приведена выше.

Ссылка на комментарий
Поделиться на другие сайты

zxcoikio rest api предназначены для удаленного управления форумом. Для локальных плагинов эти данные хранятся в таблице core_pfields_content

Ссылка на комментарий
Поделиться на другие сайты

В 01.03.2019 в 09:08, aplayer сказал:

Для понимания ситуации

Спасибо кэп, ты как всегда вовремя нас выручаешь.

Ссылка на комментарий
Поделиться на другие сайты

siv1987 слушай. Ты случайно не знаешь как поменять customFieilds через локальные api, которые не REST?

Через вызов типа \IPS\Member::i()->Set_customFields($member_id, customFields[id], $field_value) или что-то в этом роде?

А то мне кажется, что обращаться через curl к rest api на локальном сервере это моветон.

Как пользоваться \IPS\Db я уже разобрался, но вдруг получится так, что я буду трясти базу в то время как есть готовые api для решения моих задач.

 

 

Ссылка на комментарий
Поделиться на другие сайты

Форум использует запрос к бд для дополнительных полей. Отдельных методов нету.

$profileFields = ['member_id' => %member_id, 'field_%id' => 'new_value'];
\IPS\Db::i()->replace( 'core_pfields_content', $profileFields );

 

При большем желании можно написать плагин который добавит новый метод к \IPS\Member для обновления дополнительных полей.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...