Jump to content
Sign in to follow this  
zxcoikio

rest api

Recommended Posts

Не понимаю как изменить 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?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
1 минуту назад, siv1987 сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
//Функция получения данных пользователя
    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

 

Share this post


Link to post
Share on other sites

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,

Share this post


Link to post
Share on other sites

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

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

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

 

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

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

 

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

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

 

 

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
48 минут назад, siv1987 сказал:

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

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

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

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

Share this post


Link to post
Share on other sites
2 минуты назад, Respected сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
2 часа назад, siv1987 сказал:

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

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

customfields

___2

_____fields

__________2

_______________name

_______________value

__________3

_______________name

_______________value

 

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

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

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

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

 

Share this post


Link to post
Share on other sites

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

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


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

Share this post


Link to post
Share on other sites
18 часов назад, siv1987 сказал:

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

 

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×