LikeFriendsNo ano passado, por volta desta altura, lancei um pequeno brinquedo social, o LikeFriends. Depois do lançamento, nunca mais me preocupei com ele.

De alguns meses para cá, começaram-me a chegar queixas que não estaria a funcionar correctamente – não mostrava quaisquer likes em comum. Infelizmente, não tive vida pessoal nem profissional que me deixasse abordar este problema, para além da confirmação que, sim, estava partido.

Para quem não se interessa por questões técnicas, a única coisa que interessa é esta: está de novo a funcionar. Ide brincar. Quem estiver interessado, que fique por cá mais alguns minutos (e depois pode ir brincar).

O risco de usar APIs que não controlamos…

… é o dono poder mudá-las sem aviso prévio, quebrando o nosso trabalho.

Basicamente, foi o que aconteceu com o LikeFriends. A query que devolvia os likes em comum tinha o seguinte formato:

SELECT page_id
FROM page_fan
WHERE uid = :friend_id:
  AND page_id IN (
    SELECT page_id
    FROM page_fan
    WHERE uid1 = me()
  )

É consideravelmente trivial. Não nos esqueçamos que o FQL não suporta joins de tabelas (entre várias outras limitações), por isso tudo tem de ser feito com subqueries. Não é consideravelmente diferente da query para ir buscar todos os amigos do utilizador corrente. Só que deixou de funcionar. Não há nada na documentação do Facebook que indique porquê.

Depois de algumas experiências, a única coisa que se me ocorre é uma nova restrição ao nível das subqueries, em que estas não possam ser feitas à mesma tabela, que era o caso.

A forma que arranjei para resolver é mais simples, mais leve para os servidores do Facebook e até é mais elegante. Simplesmente, ao receber os meus próprios likes, construo de imediato uma string com os ids deles separados por vírgulas, e injecto essa string no IN da query:

SELECT page_id
FROM page_fan
WHERE uid = :friend_id:
  AND page_id IN (:my_likes:)

E é isto. Agora, sim, já podem ir brincar.

Partilhar no Sapo Links Partilhar no del.icio.us Partilhar no Digg Partilhar no Twitter Partilhar no StumbleUpon Partilhar no MySpace Partilhar no Facebook

Comentários Deixar um comentário

 Categorias
 Arquivo
 Projectos em Destaque
 Últimas Postas no Blog
 Últimos Comentários do Blog