Jump to content

rest api


zxcoikio
 Share

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?

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

Link to comment
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

 

Link to comment
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,

Link to comment
Share on other sites

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

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

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

 

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

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

 

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

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

 

 

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

Link to comment
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 и никак иначе?

 

Link to comment
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 запроса.

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

Link to comment
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 для решения моих задач.

 

 

Link to comment
Share on other sites

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

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

 

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...