Lilly
(Lillian )
04.Апрель.2024 05:01:27
3
Кстати, я не думаю, что существует способ массового удаления через API. Мне кажется, вам нужно написать скрипт, который будет перебирать каждый пост для удаления. В зависимости от количества постов могут возникнуть проблемы с ограничениями скорости запросов.
Лола, как написать скрипт для массового удаления постов в Discourse?
Lola the Coding Assistant Bot:
Для выполнения пакетной обработки при удалении постов в Discourse можно использовать язык скриптов, например Python. Ниже приведен пример скрипта, демонстрирующий автоматизацию удаления постов конкретного пользователя. Этот скрипт:
Получает посты конкретного пользователя.
Проходит по списку постов.
Удаляет каждый пост индивидуально.
Пример скрипта на Python
import requests
# Конфигурация
discourse_base_url = 'http://yourdiscourse.example.com'
api_key = 'your_api_key'
api_username = 'your_admin_username'
target_username = 'targetUser'
# Заголовки для запросов к API
headers = {
'Api-Key': api_key,
'Api-Username': api_username
}
def get_user_posts(username):
"""Получение постов конкретного пользователя."""
posts = []
url = f'{discourse_base_url}/posts.json?username={username}'
response = requests.get(url, headers=headers)
if response.status_code == 200:
posts_data = response.json()
posts = posts_data.get('latest_posts', [])
return posts
def delete_post(post_id):
"""Удаление конкретного поста."""
url = f'{discourse_base_url}/posts/{post_id}.json'
response = requests.delete(url, headers=headers)
return response.status_code == 200
def main():
# Получение постов пользователя
posts = get_user_posts(target_username)
# Удаление каждого поста
for post in posts:
post_id = post.get('id')
if delete_post(post_id):
print(f'Пост {post_id} успешно удален')
else:
print(f'Не удалось удалить пост {post_id}')
if __name__ == '__main__':
main()
Пояснения
Конфигурация : Укажите базовый URL вашего экземпляра Discourse, ключ API, имя пользователя API и целевое имя пользователя, чьи посты вы хотите удалить.
Функция get_user_posts : Получает посты указанного пользователя. При необходимости измените URL или параметры в зависимости от настроек вашего Discourse.
Функция delete_post : Удаляет пост по его ID.
Функция main : Организует процесс, сначала получая посты пользователя, а затем удаляя каждый из них.
Важные замечания
Ограничения скорости запросов : Учитывайте ограничения скорости запросов API Discourse. Если вы удаляете большое количество постов, рассмотрите возможность добавления задержек между запросами.
Разрешения : Убедитесь, что ваш ключ API имеет необходимые разрешения для удаления постов.
Тестирование : Протестируйте скрипт в безопасной среде перед запуском в рабочей среде.
Этот скрипт предоставляет базовую структуру. В зависимости от ваших конкретных потребностей вам, возможно, придется изменить конечные точки API, параметры или добавить обработку ошибок и ведение журналов.
Кстати, зачем вы используете API для этого?
Я думаю, это также можно сделать с помощью задачи rake из командной строки.