APIでサイト全体のユーザーの全投稿を削除?

これを達成するにはどうすればよいですか?どうすればよいのかよくわかりません…

以下を参照しました。

https://www.postman.com/api-evangelist/workspace/discourse/documentation/35240-c739e2a5-3ddf-4ffc-90e9-7dd579e8a55d?entity=request-35240-b041dc53-b653-4c46-b067-aee2b0a5cb46

しかし、理解できません。また、理解できない主な点は、各ランダムIDを取得し、削除のために送信するにはどうすればよいかということです。各IDは異なるため…

「Lola、APIを使用してユーザーのDiscourseの投稿をすべて削除するにはどうすればよいですか?」

「いいね!」 2

ちなみに、API経由で一括削除する方法はないと思います。投稿を1つずつ削除するスクリプトを作成する必要があると思います。投稿数によっては、レート制限が問題になる可能性があります。

Lola、Discourseの投稿を一括削除するスクリプトの書き方を教えてください。

ところで、なぜAPIを使ってこれを実行するのですか?

コマンドラインからrakeタスクとしても実行できると思います。

「いいね!」 4

ありがとうございます。今日中に試してみます!それで、その「rake」の件は一般ユーザーでもできますか?スタッフではない一般ユーザーとして、すべて実行したいのですが。

これです。

以下のPythonスクリプトを実行したところ:

import requests
# Configuration
discourse_base_url = 'https://forums.mysite.me/'
api_key = 'eb4065d1dergrgh45h45h54h45reg4g70cbeb274bf7f87'
api_username = 'username'
target_username = 'targetusername'

# Headers for API requests
headers = {
    'eb4065d1dergrgh45h45h54h45reg4g70cbeb274bf7f87': api_key,
    'B': api_username
}

def get_user_posts(username):
    """Fetch posts by a specific user."""
    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):
    """Delete a specific post."""
    url = f'{discourse_base_url}/posts/{post_id}.json'
    response = requests.delete(url, headers=headers)
    return response.status_code == 200

def main():
    # Fetch user posts
    posts = get_user_posts(target_username)

    # Delete each post
    for post in posts:
        post_id = post.get('id')
        if delete_post(post_id):
            print(f'Successfully deleted post {post_id}')
        else:
            print(f'Failed to delete post {post_id}')

if __name__ == '__main__':
    main()

ターミナル/コンソールで次のようなメッセージが表示されました:

Failed to delete post 73
Failed to delete post 71
Failed to delete post 69
Failed to delete post 60
Failed to delete post 47

作成したAPIキーを2つ試しました。1つは自分だけが使用できるもの、もう1つはすべてのユーザーが使用できるものです。どちらの場合も、グローバルオプションを使用しました。結果は同じでした。

すみません、これは声を出して笑ってしまいました。今日の朝に必要でした、ハハ。

「いいね!」 2

それはうまくいきません。APIリクエストでも同様です。ある時点を超えると、ユーザーは自分の投稿を削除できなくなります。

通常、ユーザーがフォーラムに関与したくない場合に、すべての投稿を匿名化するのが最善の選択肢です。これにより、ユーザー名はランダムなものに変更され、投稿がユーザーと関連付けられなくなります。

「いいね!」 1

@Lilly 削除された返信を見ました。では、自分や他の管理者ユーザーで機能させることについてはどうですか?スクリプトを使用したときの結果を含めるように、上記の投稿を編集したことに気づいたかどうかはわかりません。

@blake さんにも同じことが言えますね、笑。

これは現時点ではテスト用です。

ブレイクがすでに回答したため、削除しました。

投稿 ID に対して、この curl リクエストを試すことができます。

curl -i -sS -X DELETE "http://localhost:4200/posts/<post-id>.json"  \
-H "Content-Type: multipart/form-data"  \
-H "Api-Key: key"  \
-H "Api-Username: username"

異なるエラーが返されるかどうかを確認するために、しかしおそらく「An Error Occurred」と表示されるだけでしょう :frowning:

ユーザーが投稿を削除することに関するサイト設定を調整できるようです。また、「すべての投稿を削除」ボタンがどこかにある可能性もあるようです。

「いいね!」 1

上記のcurlコマンドを試しています。

curl -X GET "https://forums.mysite.me/posts.json?username=targetusername" \
-H "Api-Key: eb4065d56u7u6u65u54y54uy566575w4yer343434ac8a770cbeb274bf7f87" \
-H "Api-Username: AdminUsername"

実行して投稿を取得できましたが、その後これが出力されました。

C:\Users\User>-H "Api-Key: eb4065d56u7u6u65u54y54uy566575w4yer343434ac8a770cbeb274bf7f87"
'-H' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

C:\Users\User>-H "Api-Username: AdminUsername"
'-H' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

これは正常ですか、それともなぜ発生しているのですか?

入力されたcurlコマンドは、上記のものと同じではありません。

Windowsのcmdターミナルを使用しているようですが、行を区切る\\が問題を引き起こしている可能性があります。それらを削除して、すべてを1行にすることができます。

スラッシュなしで試しましたが、すべてを1行にまとめたら直りました。ありがとうございます!

すみません、Lillyが共有した方でした。

ユーザーの投稿を一括削除するエンドポイントがあるようです。

管理ダッシュボードのユーザーページにあるこのボタンでトリガーされます。

「いいね!」 2

では、post-idを手動で入力する代わりに(その時点では、実際のサイトにアクセスして削除ボタンを押すのと同じことですよね?)、各投稿で自動的に入力するにはどうすればよいですか?

おお、それは素晴らしい!では、URLは次のようになりますか?
http://mysite.com/admin/users/79/delete_posts_batch
それとも、この「79」は何ですか?ユーザーのプロフィールにアクセスしたときに取得するユーザーIDですか?

はい、それはユーザーIDです。そして、それはPUTリクエストです。削除された投稿の数が返されます。

ああ、そうしないのですか?

curl -i -sS -X DELETE "http://forums.mysite.com/admin/users/0/delete_posts_batch"  \
-H "Content-Type: multipart/form-data"  \
-H "Api-Key: eb4065d45745678u564754y4545y545445674y34545y50cbeb274bf7f87" \
-H "Api-Username: AdminUsername"

DELETEではなくPUTリクエストです。また、ここにはフォームパラメータはありません。

管理者が削除を実行する場合、ユーザーの「すべての投稿を削除」を実行する管理者操作があります。

これを行うには、まず他の設定を調整する必要がある場合があります(「すべての投稿を削除」の最大数)。

これがあなたのサイトの実際のAPIキーではないことを願っています。以前にも述べたように、あなたのサイトが何であるかを特定するのは非常に簡単です。

このキーは無効になったと考え、ローテーションすることを検討してください。

「いいね!」 2

そのフォームの行を完全に削除すればいいのですか?

編集:行を残しておき、「DELETE」を「PUT」に変更したところ、うまくいきました。

API を使用した投稿の削除が、次のボディを持つ 403 エラーで失敗しています: {“errors”:[“You are not permitted to view the requested resource.”],“error_type”:“invalid_access”}

修正方法について何かアイデアはありますか?