You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook Graph API在Python代码中使用有效令牌仍报错的问题排查求助

Facebook Graph API在Python代码中使用有效令牌仍报错的问题排查求助

我现在在尝试用Python调用Facebook Graph API来获取用户的个人资料、帖子和照片。虽然我通过Graph API Explorer生成了一个有效的访问令牌,但在代码里运行时却一直报错,终端输出如下:

C:\Users\ferre\Projects\AutomateEverithingPython\AcessingAPIs>python exercio2.py
🕒 Iniciando execução em 2025-07-10 16:08:02
🔍 Obtendo perfil do usuário...
❌ Erro ao obter perfil: Unsupported get request. Object with ID 'me' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api
📝 Obtendo postagens...
❌ Erro ao obter postagens: Unsupported get request. Object with ID 'me' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api
🖼️ Obtendo fotos...
❌ Erro ao obter fotos: Unsupported get request. Object with ID 'me' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api
🏁 Execução concluída!
C:\Users\ferre\Projects\AutomateEverithingPython\AcessingAPIs>

这是我当前的代码:

import requests
import json
import facebook
from datetime import datetime

# Configurações
ACCESS_TOKEN = "EAA....Removed for security question"  # Substitua pelo novo token
BASE_URL = "https://graph.facebook.com/v13.0"

def get_user_profile():
    """Obtém informações básicas do perfil"""
    try:
        url = f"{BASE_URL}/me?fields=id,name,email&access_token={ACCESS_TOKEN}"
        response = requests.get(url)
        data = json.loads(response.text)
        if 'error' in data:
            print(f"❌ Erro ao obter perfil: {data['error']['message']}")
            return None
        return data
    except Exception as e:
        print(f"❌ Erro inesperado: {str(e)}")
        return None

def get_user_posts():
    """Obtém as postagens do usuário"""
    try:
        url = f"{BASE_URL}/me/posts?fields=id,message,created_time&access_token={ACCESS_TOKEN}"
        response = requests.get(url)
        data = json.loads(response.text)
        if 'error' in data:
            print(f"❌ Erro ao obter postagens: {data['error']['message']}")
            return None
        return data
    except Exception as e:
        print(f"❌ Erro inesperado: {str(e)}")
        return None

def get_user_photos():
    """Obtém as fotos do usuário"""
    try:
        url = f"{BASE_URL}/me/photos?fields=id,images&access_token={ACCESS_TOKEN}"
        response = requests.get(url)
        data = json.loads(response.text)
        if 'error' in data:
            print(f"❌ Erro ao obter fotos: {data['error']['message']}")
            return None
        return data
    except Exception as e:
        print(f"❌ Erro inesperado: {str(e)}")
        return None

def download_photo(photo_url, filename):
    """Baixa uma foto e salva localmente"""
    try:
        response = requests.get(photo_url)
        with open(filename, 'wb') as file:
            file.write(response.content)
        print(f"✅ Foto salva como {filename}")
    except Exception as e:
        print(f"❌ Erro ao baixar foto: {str(e)}")

if __name__ == "__main__":
    print(f"🕒 Iniciando execução em {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

    # 1. Obter perfil do usuário
    print("\n🔍 Obtendo perfil do usuário...")
    profile = get_user_profile()
    if profile:
        print("👤 Perfil do usuário:")
        print(f"ID: {profile.get('id')}")
        print(f"Nome: {profile.get('name')}")
        print(f"Email: {profile.get('email', 'Não disponível')}")

    # 2. Obter postagens
    print("\n📝 Obtendo postagens...")
    posts = get_user_posts()
    if posts and 'data' in posts:
        print(f"📚 Total de postagens: {len(posts['data'])}")
        for i, post in enumerate(posts['data'][:3], 1):  # Mostra apenas 3 postagens
            print(f"\n📌 Postagem {i}:")
            print(f"ID: {post.get('id')}")
            print(f"Data: {post.get('created_time')}")
            print(f"Mensagem: {post.get('message', 'Sem texto')[:50]}...")

    # 3. Obter fotos
    print("\n🖼️ Obtendo fotos...")
    photos = get_user_photos()
    if photos and 'data' in photos:
        print(f"📸 Total de fotos: {len(photos['data'])}")
        if photos['data']:
            first_photo = photos['data'][0]
            print("\n📷 Primeira foto:")
            print(f"ID: {first_photo.get('id')}")
            print(f"URL da imagem: {first_photo['images'][0]['source'][:50]}...")

            # 4. Baixar uma foto
            print("\n⬇️ Baixando foto...")
            photo_url = first_photo['images'][0]['source']
            download_photo(photo_url, "foto_facebook.jpg")

    print("\n🏁 Execução concluída!")

我有几个疑问想请教:

  • 为什么令牌在Graph API Explorer里能用,但在我的Python代码里就不行?
  • 是不是还有额外的应用设置需要配置?
  • 这会不会和令牌过期有关?(不过我刚生成的新令牌也立刻报错了)
  • 有没有办法调试令牌的验证过程?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 10:19:30