Несанкционировано удаление твита с путем OAuth2.0 в учетной записи разработчика бесплатного уровня.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Несанкционировано удаление твита с путем OAuth2.0 в учетной записи разработчика бесплатного уровня.

Сообщение Anonymous »

Контекст
  • Я использую учетную запись разработчика Twitter/X бесплатного уровня.

    Признаюсь, вся суть OAuth меня смущает. У меня есть следующие пары "ключ-значение" в моем .env (значения удалены), и я не знаю, какие из них действительно необходимы, а какие нет.
    API_KEY=
    API_SECRET=
    ACCESS_TOKEN=
    ACCESS_TOKEN_SECRET=
    CLIENT_ID=
    CLIENT_SECRET=
    BEARER_TOKEN=
Проблема
Ниже приведена минимальная и (полу-) Полный пример клиента Twitter/X Flask. Он использует Tweepy и OAuth2.0 для авторизации в Twitter/X через URL-адрес аутентификации и поток обратного вызова, получает информацию авторизованного пользователя и получает последние 10 твитов авторизованных пользователей. Эти части работают должным образом.
Проблема в том, что когда я пытаюсь использовать процесс удаления (нажимая кнопку «Удалить» в примере), я получаю ошибку 401 Unauthorized.
Как это исправить, чтобы можно было удалять свои твиты?
from flask import Flask, jsonify, redirect, request, session, render_template_string
import tweepy
import os
from dotenv import load_dotenv

load_dotenv()

app = Flask(__name__)
app.secret_key = os.getenv("FLASK_SECRET_KEY", "supersecretkey")

CLIENT_ID = os.getenv("CLIENT_ID")
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
CALLBACK_URL = "http://127.0.0.1:5000/callback"

oauth2_handler = tweepy.OAuth2UserHandler(
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
redirect_uri=CALLBACK_URL,
scope=["tweet.read", "tweet.write", "users.read", "offline.access"],
)

@app.route("/", methods=["GET"])
def auth_redirect():
try:
auth_url = oauth2_handler.get_authorization_url()
return redirect(auth_url)
except Exception as e:
return jsonify({"error": str(e)}), 500

@app.route("/callback", methods=["GET"])
def callback():
try:
code = request.args.get("code")
if not code:
return jsonify({"error": "Missing authorization code"}), 400

access_token = oauth2_handler.fetch_token(request.url)
session["access_token"] = access_token
client = tweepy.Client(access_token["access_token"], wait_on_rate_limit=True)
user = client.get_me(user_auth=False)
tweets = client.get_users_tweets(id=user.data.id, max_results=10)
tweet_list = (
"".join(
[
f"""
[*]{tweet.text}

Delete


"""
for tweet in (tweets.data or [])
]
)
or "No tweets found.
"
)

return render_template_string(
f"""
Authorization Successful
User Information
  • ID: {user.data.id}
  • Username: {user.data.username}
  • Name: {user.data.name}
Last 10 Tweets
  • {tweet_list}
"""
)
except Exception as e:
return jsonify({"error": str(e)}), 500

@app.route("/delete_tweet/", methods=["POST"])
def delete_tweet(tweet_id):
try:
access_token = session.get("access_token")
if not access_token:
return jsonify({"error": "Access token not found"}), 400

client = tweepy.Client(
consumer_key=CLIENT_ID,
consumer_secret=CLIENT_SECRET,
access_token=access_token["access_token"],
wait_on_rate_limit=True,
)
response = client.delete_tweet(tweet_id)
if response.data:
return jsonify({"message": f"Tweet {tweet_id} deleted successfully"})
return jsonify({"error": "Failed to delete tweet"}), 500
except Exception as e:
return jsonify({"error": str(e)}), 500

if __name__ == "__main__":
app.run(debug=True)



Подробнее здесь: https://stackoverflow.com/questions/792 ... er-account
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»