Trabalho em um projeto que possui páginas do facebook como uma de suas fontes de dados. Ele importa alguns dados periodicamente, sem a GUI envolvida. Em seguida, usamos um aplicativo da web para mostrar os dados que já temos.
Nem todas as informações são públicas. Isso significa que eu tenho que ter acesso aos dados uma vez e depois mantê-los. No entanto, não conheço o processo e ainda não encontrei um bom tutorial sobre isso. Eu acho que preciso de um access_token
, como posso obtê-lo do usuário, passo a passo? O usuário é administrador de uma página do facebook, ele precisará adicionar algum aplicativo FB nosso à página?
EDIT: Obrigado @phwd pela dica. Fiz um tutorial sobre como obter um token de acesso permanente à página, mesmo que offline_access
não exista mais.
EDIT: Acabei de descobrir que é respondido aqui: Token de acesso FB de longa duração para o servidor obter informações da página do FB
Respostas:
Seguindo as instruções descritas na documentação de tokens de página extensível do Facebook, consegui obter um token de acesso à página que não expira.
Sugiro usar o Graph API Explorer para todas essas etapas, exceto onde indicado de outra forma.
0. Crie um aplicativo do Facebook
Se você já possui um aplicativo , pule para a etapa 1.
Você não precisa alterar suas permissões nem nada. Você só precisa de um aplicativo que não desapareça antes de concluir seu token de acesso.
1. Obter token de acesso de curta duração do usuário
O token que aparece no campo "Token de acesso" é o seu token de acesso de curta duração.
2. Gere token de acesso de longa duração
Seguindo estas instruções dos documentos do Facebook, faça uma solicitação GET para
digitando o ID e o segredo do seu aplicativo e o token de curta duração gerado na etapa anterior.
Você não pode usar o Graph API Explorer . Por alguma razão, ele fica preso a essa solicitação. Eu acho que é porque a resposta não é JSON, mas uma string de consulta. Como é uma solicitação GET, você pode simplesmente acessar o URL no seu navegador.
A resposta deve ser assim:
"ABC123" será seu token de acesso de longa duração. Você pode colocá-lo no depurador do token de acesso para verificar. Em "Expira", deve ter algo como "2 meses".
3. Obter ID do usuário
Usando o token de acesso de longa duração, faça uma solicitação GET para
O
id
campo é o ID da sua conta. Você precisará dele para o próximo passo.4. Obter token de acesso à página permanente
Faça uma solicitação GET para
A resposta JSON deve ter um
data
campo no qual há uma matriz de itens aos quais o usuário tem acesso. Localize o item da página da qual você deseja o token de acesso permanente. Oaccess_token
campo deve ter seu token de acesso permanente. Copie-o e teste-o no Depurador de Tokens de Acesso . Em "Expira", deve dizer "Nunca".fonte
message: "(#100) Tried accessing nonexisting field (accounts) on node type (Page)", type: "OAuthException", code: 100
vá para o FB Access Token Debugger e teste seu long_lived_access_token. Consistentemente eu vi que depois de alguns minutos, se você voltar e verificar novamente o long_lived_access_token o FB acesso token Debugger, então, indicam que esse símbolo é permanente (expirar: never)(#100) Tried accessing nonexisting field (accounts) on node type (Page)
erro .. incapaz de prosseguir com a etapa 5 ... Ainda assim, obrigado ... LE: confira a última parte da resposta fornecida pelo @Vlasec. Você pode obter o token de acesso permanente consultando / {pageId}? Fields = access_token & access_token = {long_lived_access_token} para corrigir o problema.https://graph.facebook.com/v2.7/{page_id}?fields=access_token&access_token={long_lived_access_token}
Aqui está minha solução usando apenas o Graph API Explorer e o Access Token Debugger :
(Testado com a API versão 2.9-2.11, 3.0-3.1)
fonte
Além das etapas recomendadas na resposta do Vlasec , você pode usar:
/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
fonte
Eu criei um script PHP para facilitar. Crie um aplicativo . No Graph API Explorer, selecione seu aplicativo e obtenha um token de usuário com a permissão manage_pages e publish_pages. Encontre o ID da sua página na parte inferior da página Sobre. Preencha os vars de configuração e execute o script.
fonte
Outra resposta do PHP para facilitar a vida. Atualizado para a API Graph do Facebook 2.9 . Apenas preencha e carregue.
Adendo: (alternativa)
No Gráfico 2.9, você pode pular grande parte do aborrecimento de obter um token de acesso longo clicando em Estender token de acesso na parte inferior da ferramenta Depurador de token de acesso , depois de depurar um token de acesso curto. Armado com informações sobre
pageid
elonglivedtoken
, execute o php abaixo para obter um token de acesso permanente.Embora o segundo código poupe bastante aborrecimento, eu recomendo executar o primeiro código php, a menos que você esteja com muita pressa, porque faz uma verificação cruzada do pageid e do userid. O segundo código não funcionará se você escolher o token do usuário por engano.
fonte
Graph API Explorer
no campo Aplicativo antes de poder solicitar um token.v2.9
segunda chamada e isso funcionou para mim. WierdTentei estas etapas: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer
Obter token de acesso à página permanente
Uma dica, só funcionou para mim quando o idioma da página é o inglês .
fonte
Se você estiver solicitando apenas dados da página, poderá usar um token de acesso à página. Você precisará autorizar o usuário apenas uma vez para obter o token de acesso do usuário; estenda a validade para dois meses e solicite o token para a página. Isso tudo é explicado no cenário 5 . Observe que o token de acesso à página adquirido é válido apenas enquanto o token de acesso do usuário for válido.
fonte
Ao obter o token de acesso permanente, eu segui acima de 5 etapas, como o Donut mencionou. No entanto, na quinta etapa, ao gerar o token de acesso permanente, ele retorna o token de acesso de longa duração (válido por 2 meses) e o token de acesso permanente (que nunca expira). o que notei é que a versão atual da API do Graph é a V2.5. Se você está tentando obter o token de acesso permanente com a V2.5, está dando um token de acesso de longa duração.Tente fazer uma chamada de API com a V2.2 (se você não conseguir alterar a versão no api explorer gráfico, pressione a chamada de API https: //graph.facebook.com/v2.2/ {account_id} / accounts? access_token = {long_lived_access_token} na nova guia da V2.2), então você receberá o token de acesso permanente (que nunca expira)
fonte
Além dos métodos mencionados, vale ressaltar que, para aplicativos servidor a servidor, você também pode usar este formulário de token de acesso permanente: app_id | app_secret Esse tipo de token de acesso é chamado de App Token. Geralmente, ele pode ser usado para chamar a API do Graph e consultar nós públicos no back-end do aplicativo. É mencionado aqui: https://developers.facebook.com/docs/facebook-login/access-tokens
fonte
Graças a @donut, consegui obter o token de acesso que nunca expira em JavaScript.
e então eu usei o token de acesso salvo assim
Espero que alguém possa aparar esse código porque é meio confuso, mas foi a única maneira que eu consegui pensar.
fonte
Se você possui o aplicativo do facebook, pode tentar com o id do aplicativo e o segredo do aplicativo.
Gostar :
não será necessário alterar o token com frequência.
fonte
Limite de solicitação de aplicativo atingido (nº 4) - API do FB v2.1 e superior
Essa resposta me levou à "resposta definitiva para nós" e, por isso, está muito relacionada, então estou anexando-a aqui. Embora esteja relacionado ao exposto acima, é diferente e parece que o FB simplificou o processo.
Nossas contagens de compartilhamento em nosso site pararam de funcionar quando o FB passou a API para a v 2.1. No nosso caso, já tínhamos um aplicativo FB e NÃO estávamos usando o login do FB. Então, o que precisávamos era obter um FB APP Token para fazer os novos pedidos. A partir de 23 de agosto de 2016.
Selecione a versão da API e, em seguida, use GET e cole o seguinte:
Você vai querer pegar seu ID do aplicativo e seu segredo na sua página do aplicativo. Página principal do desenvolvedor do FB Apps
Execute a consulta do gráfico e você verá:
Onde
e será o ID do aplicativo na página do aplicativo FB e o Hash do aplicativo FB gerado que você acabou de receber.Em seguida, teste seu novo token de acesso à APP: testador do FB Access Token
Você deve ver, colando o
no testador de token, um único token baseado em aplicativo sem data / hora de vencimento.No nosso caso, estamos usando o FB js sdk, então alteramos nossa chamada para ser assim (observe que APENAS obtém a contagem de compartilhamentos e não a contagem de compartilhamentos e comentários combinada como costumava ser) :
Agora está funcionando corretamente. Foram necessárias muitas pesquisas e um relatório oficial de erros com o FB para confirmar que precisamos começar a fazer solicitações tokenizadas à API do FB. Além disso, solicitei que eles (FB) adicionassem uma pista ao código de erro (nº 4) que menciona a solicitação tokenizada.
Acabei de receber outro relatório de um de nossos desenvolvedores de que nossa contagem de comentários do FB também está quebrada devido à nova necessidade de solicitações tokenizadas, portanto atualizarei isso de acordo.
fonte
Muitos desses exemplos não funcionam, não tenho certeza se é por causa de 2.9v saindo, mas eu estava batendo minha cabeça. De qualquer forma, peguei a versão @ dw1 e a modifiquei um pouco com a ajuda do vídeo do @KFunk e consegui isso trabalhando para mim na versão 2.9. Espero que isto ajude.
fonte
Em abril de 2020, meus tokens de página anteriormente permanentes começaram a expirar entre 1 e 12 horas. Comecei a usar tokens de usuário com a
manage_pages
permissão para atingir o objetivo anterior (pesquisar os eventos de uma página). Esses tokens parecem ser permanentes.Criei um script python com base nas informações encontradas nesta postagem, hospedadas em github.com/k-funk/facebook_permanent_token , para acompanhar quais parâmetros são necessários e quais métodos de obtenção de um token permanente estão funcionando.
fonte
Encontrei esta resposta que se refere a esta ferramenta que realmente ajudou muito.
Espero que esta resposta ainda seja válida quando você ler isso.
fonte