Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: В настоящее время эта функция требует доступа к сайту с помощью встроенного браузера Safari.
Ну да. Из подвала стук какой-то, а что за стук...Нужен пример запроса, сейчас непонятно нифига.
If the API key selected is a super user key, you may pass the user ID of the context user via the XF-Api-User header. If no user ID is passed, the context will default to a guest.
If the request is made with a super user key and you wish to bypass the context user's permissions, this may be done on a per-request basis by setting the api_bypass_permissions parameter to 1. (This can be passed via a query string or as part of the request body.)
многие вещи возможны, но мы сюда не гадать пришлиВозможно
def change_nickname(old_nickname, new_nickname):
find_user_url = f"{XENFORO_FORUM_URL}users/find-name"
headers = {
'Content-Type': 'application/json',
'XF-Api-Key': XENFORO_USER_API_KEY
}
params = {'username': old_nickname}
response = requests.get(find_user_url, headers=headers, params=params)
user_data = response.json()
if 'exact' in user_data and user_data['exact']:
user_id = user_data['exact']['user_id']
update_user_url = f"{XENFORO_FORUM_URL}users/{user_id}/"
data = {
'username': new_nickname
}
response = requests.post(update_user_url, headers=headers, data=json.dumps(data))
print(f"Response status code: {response.status_code}")
print(f"Response content: {response.content}")
update_response = response.json()
print(update_response)
if 'success' in update_response and update_response['success']:
return True, "Nickname changed successfully."
else:
if 'errors' in update_response:
error_message = update_response['errors'][0]['message']
return False, f"Failed to update nickname: {error_message}"
return False, "Failed to update nickname for an unknown reason."
else:
return False, "User not found."
update_user_url = f"{XENFORO_FORUM_URL}users/{user_id}/"
data = {
'username': new_nickname
}
response = requests.post(update_user_url, headers=headers, data=json.dumps(data))
print(f"Response status code: {response.status_code}")
print(f"Response content: {response.content}")
update_response = response.json()
print(update_response)
if 'success' in update_response and update_response['success']:
return True, "Nickname changed successfully."
else:
if 'errors' in update_response:
error_message = update_response['errors'][0]['message']
return False, f"Failed to update nickname: {error_message}"
return False, "Failed to update nickname for an unknown reason."
else:
return False, "User not found."
Возможно, ты хочешь что-то отредактировать в профиле пользователя.(скинь пример запроса)
Указывай в запросе XF-Api-User, либо ставь параметр api_bypass_permissions 1.
У Вас недостаточно прав для просмотра ссылок. Вход или Регистрация
If the API key selected is a super user key, you may pass the user ID of the context user via the XF-Api-User header. If no user ID is passed, the context will default to a guest.
Если очень хочется "срать жсонами", то можно установить мой плагин, которое "научит" движок читать JSON.Requests bodies must be sent using theapplication/x-www-form-urlencodedencoding or, if a file is being uploaded, themultipart/form-dataencoding.
Т.к. Вы не указываете явно какого-либо пользователя, то движок стандартно исполняет Ваш запрос "от имени гостя", у которого, естественно, нет прав на такие махинации. Именно если используется супер-ключ.If the API key selected is a super user key, you may pass the user ID of the context user via theXF-Api-Userheader. If no user ID is passed, the context will default to a guest.
api_bypass_permissions, если мы насильно меняем никнейм, либо указать контекстом пользователя, от кого меняем.#!/usr/bin/env python3
from requests import Session
class ForumManager:
def __init__(self, url, key, headers={}):
self._url = url
self._key = key
self._headers = headers
def _session(self):
session = Session()
session.headers.update({**{
'XF-API-Key': self._key
}, **self._headers})
return session
def find_user_by_name(self, name):
with self._session() as session:
return session.get(f'{self._url}users/find-name', params={'username': name}).json()['exact']
def edit_user(self, user_id, bypass_permissions=False, **kwargs):
with self._session() as session:
params = {
'api_bypass_permissions': 1 if bypass_permissions else 0
}
response = session.post(f'{self._url}users/{user_id}/', params=params, data=kwargs)
response.raise_for_status()
return response.json()['user']
manager = ForumManager('http://localhost/index.php?api/', 'mRi1HkG-0xSDEZ8kO703xPV909h3-_UL')
user = manager.find_user_by_name('Dummy')
print(f'Found user with ID {user["user_id"]}, changing username...')
edited_user = manager.edit_user(user['user_id'], True, username='Чебурекw')
print(f'Done, now user with ID {user["user_id"]} is named as {edited_user["username"]}')

Спасибо, я читал документацию, но половины не понял такая английский плохой, а русской документации xenforo нет. Еще раз спасибо.Ну вообще-то Ксен не поддерживает JSON в виде тела, о чём прямо в их документации сказано:У Вас недостаточно прав для просмотра ссылок. Вход или Регистрация
Если очень хочется "срать жсонами", то можно установить моё дополнение, которое "научит" движок читать JSON.
Так же в этой же документации указано очень важное замечание:
Т.к. Вы не указываете явно какого-либо пользователя, то движок стандартно исполняет Ваш запрос "от имени гостя", у которого, естественно, нет прав на такие махинации. Именно если используется супер-ключ.
Так что решение проблемы - добавить параметрapi_bypass_permissions, если мы насильно меняем никнейм, либо указать контекстом пользователя, от кого меняем.
Мне было очень больно читать Ваш код без вменяемой табуляции, так что я сделал свой, делающий похожую вещь, и немного более абстрагированный.
Посмотреть вложение 154144Python:#!/usr/bin/env python3 from requests import Session class ForumManager: def __init__(self, url, key, headers={}): self._url = url self._key = key self._headers = headers def _session(self): session = Session() session.headers.update({**{ 'XF-API-Key': self._key }, **self._headers}) return session def find_user_by_name(self, name): with self._session() as session: return session.get(f'{self._url}users/find-name', params={'username': name}).json()['exact'] def edit_user(self, user_id, bypass_permissions=False, **kwargs): with self._session() as session: params = { 'api_bypass_permissions': 1 if bypass_permissions else 0 } response = session.post(f'{self._url}users/{user_id}/', params=params, data=kwargs) response.raise_for_status() return response.json()['user'] manager = ForumManager('http://localhost/index.php?api/', 'mRi1HkG-0xSDEZ8kO703xPV909h3-_UL') user = manager.find_user_by_name('Dummy') print(f'Found user with ID {user["user_id"]}, changing username...') edited_user = manager.edit_user(user['user_id'], True, username='Чебурекw') print(f'Done, now user with ID {user["user_id"]} is named as {edited_user["username"]}')
Мы используем основные cookies для обеспечения работы этого сайта, а также дополнительные cookies для обеспечения максимального удобства пользователя.
Посмотрите дополнительную информацию и настройте свои предпочтения
