XF 2.3 Добавление тем через код

Статус
В этой теме нельзя размещать новые ответы.
Версия XenForo
2.3

xakmika

Проверенные
Сообщения
155
Реакции
-7
Баллы
8,115
Ребят, у меня в json заготовленные темы, заголовок и описание, я добавил через код в таблицу xf_thread он добавился но на сайте нету его, и интернете искал и не нашёл нечего.


Python:
import mysql.connector
from mysql.connector import Error

# Данные для подключения к базе данных
db_config = {
    'host': ' ',       # Хост базы данных
    'database': ' ',            # Название базы данных
    'user': ' ',                   # Имя пользователя
    'password': ' ' # Ваш пароль
}

# Данные для добавления в таблицу xf_thread
thread_data = {
    'node_id': 36,
    'title': 'Новая тема с Python',
    'reply_count': 0,
    'view_count': 0,
    'user_id': 1,
    'username': 'admin',
    'post_date': 1731321980,
    'sticky': 0,
    'discussion_state': 'visible',
    'discussion_open': 1,
    'discussion_type': b'\x64\x69\x73\x63\x75\x73\x73\x69\x6f\x6e',
    'type_data': b'\x5b\x5d',
    'index_state': 'not_indexed',
    'first_post_id': 4,
    'first_post_reaction_score': 0,
    'first_post_reactions': b'\x5b\x5d',
    'last_post_date': 1731675980,
    'last_post_id': 7,
    'last_post_user_id': 1,
    'last_post_username': 'admin',
    'prefix_id': 4,
    'tags': b'\x5b\x5d',
    'custom_fields': b'\x5b\x5d',
    'vote_score': 0,
    'vote_count': 0,
    'featured': 0,
    'is_sticked': 0,
    'tg_ct_color': None,
    'tg_ct_end': None,
    'bump_thread_disabled': 0
}

def insert_thread():
    connection = None  # Инициализируем переменную для подключения
    try:
        # Устанавливаем соединение с базой данных
        connection = mysql.connector.connect(**db_config)

        if connection.is_connected():
            cursor = connection.cursor()

            # Запрос для добавления новой записи
            insert_query = """
                INSERT INTO xf_thread (node_id, title, reply_count, view_count, user_id, username, post_date, sticky,
                                       discussion_state, discussion_open, discussion_type, type_data, index_state,
                                       first_post_id, first_post_reaction_score, first_post_reactions, last_post_date,
                                       last_post_id, last_post_user_id, last_post_username, prefix_id, tags, custom_fields,
                                       vote_score, vote_count, featured, is_sticked, tg_ct_color, tg_ct_end, bump_thread_disabled)
                VALUES (%(node_id)s, %(title)s, %(reply_count)s, %(view_count)s, %(user_id)s, %(username)s, %(post_date)s,
                        %(sticky)s, %(discussion_state)s, %(discussion_open)s, %(discussion_type)s, %(type_data)s, %(index_state)s,
                        %(first_post_id)s, %(first_post_reaction_score)s, %(first_post_reactions)s, %(last_post_date)s,
                        %(last_post_id)s, %(last_post_user_id)s, %(last_post_username)s, %(prefix_id)s, %(tags)s,
                        %(custom_fields)s, %(vote_score)s, %(vote_count)s, %(featured)s, %(is_sticked)s, %(tg_ct_color)s,
                        %(tg_ct_end)s, %(bump_thread_disabled)s)
            """

            # Выполняем запрос с данными
            cursor.execute(insert_query, thread_data)

            # Подтверждаем изменения в базе данных
            connection.commit()

            print("Новая тема успешно добавлена!")

    except Error as e:
        print(f"Ошибка при работе с базой данных: {e}")
    finally:
        if connection and connection.is_connected():
            cursor.close()
            connection.close()
            print("Соединение с базой данных закрыто.")

if __name__ == "__main__":
    insert_thread()
 
Matew, не выходит, я выпустил токен для супер супер user

Python:
import requests

# URL API
url = "https:// . /api/threads"

# Заголовки для запроса
headers = {
    "Authorization": f"Bearer токен",
    "Content-Type": "application/json"
}

# Данные для нового треда
data = {
    "node_id": 1,  # ID форума, где создается тред
    "title": "Тестовый тред",  # Заголовок треда
    "message": "Это тело первого поста в треде.",  # Текст сообщения
    "discussion_type": "discussion",  # Тип треда
    "prefix_id": 0,  # Префикс (если нужен, иначе оставляем 0)
    "tags": ["тест", "api"],  # Теги
    "custom_fields": {"example_field": "example_value"},  # Доп. поля, если требуются
    "discussion_open": True,  # Открыт ли тред
    "sticky": False,  # Закреплен ли тред
}

# Отправка POST-запроса
response = requests.post(url, json=data, headers=headers)

# Проверка ответа
if response.status_code == 200 and response.json().get("success"):
    thread = response.json().get("thread")
    print("Тред успешно создан!")
    print("ID треда:", thread.get("thread_id"))
    print("Ссылка на тред:", f"https:// . /threads/{thread.get('thread_id')}")
else:
    print("Ошибка при создании треда:", response.status_code)
    print("Ответ сервера:", response.text)

ошибка


Код:
Ошибка при создании треда: 401
Ответ сервера: {
    "errors": [
        {
            "code": "unauthorized",
            "message": "api_error.unauthorized",
            "params": []
        }
    ]
}
 
Последнее редактирование:
Matew,
Пишет что не верный или устарел, хотя токен выпущен не давно, чёт вообще всё запутанно с апи у xf
Код:
Ошибка при создании треда: 401
Ответ сервера: {
    "errors": [
        {
            "code": "api_key_not_found",
            "message": "API key provided in request was not found.",
            "params": []
        }
    ]

Matew,
Так сделал
Код:
# Заголовки для запроса
headers = {
    "XF-Api-Key": "Токен",
    "Content-Type": "application/json"
}
выводит

Код:
Ошибка при создании треда: 403
Ответ сервера: {
    "errors": [
        {
            "code": "do_not_have_permission",
            "message": "\u0423 \u0412\u0430\u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u043b\u0438 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.",
            "params": []
        }
    ]
}
Что за тренд?

Разобрался, вопрос закрыт

Python:
import requests

# URL API
url = "https:// . /api/threads"

# Заголовки для запроса
headers = {
    "XF-Api-Key": " ",
    "XF-Api-User": "1"
}

# Данные для нового треда
data = {
    "node_id": 30,  # ID форума, где создается тред
    "title": "Тестовый тред",  # Заголовок треда
    "message": "Это тело первого поста в треде.",  # Текст сообщения
    "discussion_type": "discussion",  # Тип треда
    "prefix_id": 0,  # Префикс (если нужен, иначе оставляем 0)
    "tags[]": ["тест", "api"],  # Теги (обратите внимание на формат списка)
    "custom_fields[example_field]": "example_value",  # Доп. поля, если требуются
    "discussion_open": True,  # Открыт ли тред
    "sticky": False,  # Закреплен ли тред
}

# Отправка POST-запроса
response = requests.post(url, data=data, headers=headers)

# Проверка ответа
if response.status_code == 200:
    try:
        response_json = response.json()
        thread = response_json.get("thread")
        if thread:
            print("Тред успешно создан!")
            print("ID треда:", thread.get("thread_id"))
            print("Ссылка на тред:", f"https:// . /threads/{thread.get('thread_id')}")
        else:
            print("Ответ API не содержит данных о треде:", response_json)
    except ValueError:
        print("Ошибка при обработке JSON ответа:", response.text)
else:
    print("Ошибка при создании треда:", response.status_code)
    try:
        print("Ошибка API:", response.json().get("errors"))
    except ValueError:
        print("Ответ сервера:", response.text)
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу