ad.watch - Investigando anúncios políticos no Facebook
Por Manuel Beltrán e Nayantara Ranganathan
RESUMINDO: Dois pesquisadores traçam seu processo de criação do projeto ad.watch, uma investigação em estilo pesquisa aberta sobre propaganda política no Facebook. Este estudo de caso rastreia a evolução do projeto – com suas revelações, obstáculos, técnicas e ferramentas – de um esforço limitado para um recurso crescente que facilita investigações sobre anúncios políticos em todo o mundo.
Foi assim que viemos a publicar ad.watch, (ads, na abreviação em inglês) publicados no Facebook e no Instagram.
Grande parte da publicidade na internet é personalizada, um método comumente referido como publicidade direcionada.
Anúncios direcionados usam informações psicológicas, comportamentais e outros tipos de informação sobre as pessoas para apresentar a cada um de nós uma mensagem diferente.
A diferença pode estar no conteúdo, design, entrega ou outras características. A personalização das mensagens é complementada com informação sobre a sua eficácia, permitindo o teste de suposições criadas durante o perfil psicológico ou comportamental.
Como os políticos hoje usam plataformas online para divulgar suas campanhas e promover suas mensagens, e essas plataformas entregam os anúncios com base em informações pessoais, a frase «o pessoal é político» ganhou uma dimensão totalmente nova. Os anúncios são personalizados de acordo com nossos dados pessoais e padrões de comportamento, e recebemos esses anúncios direcionados em nossas telas pessoais. No entanto, entender esses mecanismos não é simples. A infraestrutura de entrega de publicidade opera invisivelmente, com as plataformas fazendo grandes esforços para ofuscar seus mecanismos e estabelecendo muitas barreiras para entender como eles funcionam. Frequentemente, nem mesmo os anunciantes têm uma visão completa de quem seus anúncios alcançam ou por quê.
Somos Nayantara e Manuel e criamos ad.watch para entender os novos canais, através dos quais a propaganda é criada e circula online.
Rumo a ad.watch
No processo de encontrar respostas para nossas perguntas específicas sobre o período de silêncio, encontramos outras formas interessantes de ler os dados através do Tableau. Um dos principais desafios aqui foi entender como estruturar os dados. Como os dados que estávamos coletando estavam em vários arquivos, tínhamos que ter certeza de que os arquivos estavam «empilhados» da maneira certa.
Projetamos a coleta de dados de forma que houvesse limites de corte para os arquivos com base em seu tamanho. Isso significava que, se os dados de anúncios de um ator político fossem enormes (como os de Donald Trump), o arquivo conteria menos do que o número padrão de dados de anúncios de dez atores e, em vez disso, conteria apenas os dados de um político. Conseguimos controlar a estruturação dos dados por meio de muitas tentativas e erros, bem como com a ajuda dos fóruns da comunidade do Tableau e de vídeos do YouTube sobre a ferramenta. Por ser uma ferramenta de análise e visualização de dados tão popular, encontrar respostas para esses detalhes foi uma questão de explorar os fóruns já disponíveis.
Além das violações do período de silêncio, encontramos outros detalhes interessantes: a arquitetura das informações sobre anúncios políticos, as categorias de informações disponíveis e os dados que estavam faltando foram todos reveladores. Por exemplo, descobrimos que o Facebook definia o perfil das pessoas em binários de gênero masculino e feminino, apesar de permitir que os usuários se identificassem entre uma ampla gama de opções no lado do usuário. Essa foi uma visão interessante de como as coisas funcionam de forma diferente no nível da experiência do usuário em comparação com a infraestrutura de back-end projetada para o marketing.
Captura de tela: opções do menu suspenso que aparecem nas configurações da conta do Facebook depois que você escolhe definir seu sexo como “Personalizado”. Data de 29 de novembro de 2019. Fonte: Nayantara Ranganathan.*
Captura de tela: Segmentação de usuários do Facebook no binário de gênero, visível no processo de criação de anúncios ou impulsionamento de postagens. Data de 29 de novembro de 2019. Fonte: Nayantara Ranganathan.
Quando conseguimos descobrir as violações do período de silêncio, as eleições indianas estavam em andamento e as eleições para o Parlamento Europeu de 2019 estavam se aproximando. Nessa ocasião, também começamos a pesquisar dados sobre os partidos espanhóis para as eleições para o Parlamento Europeu e as eleições municipais e nacionais espanholas de 2019. Aos poucos, começamos a ampliar o escopo de nossa coleta e pesquisa de dados.
Embora agora estivéssemos coletando e explorando dados de anúncios do Facebook de vários contextos, não nos sentíamos à vontade para escrever histórias sobre países dos quais não tínhamos contexto ou conhecimento. Além disso, achávamos que, de certa forma, era incorreto fazer isso, mesmo que tivéssemos algum conhecimento dos lugares ou encontrado colaboradores de países diferentes.
Mas, embora permanecendo em nossa faixa, também queríamos tornar esses dados em outros países acessíveis. Decidimos que coletaríamos os dados disponíveis em todos os países, mas deixaríamos a análise e as investigações a cargo de quem estivesse interessado em fazê-las.
Entramos em contato com colegas e amigos em outras partes do mundo onde estavam ocorrendo eleições para ver se os dados que estávamos coletando poderiam ser úteis para eles diretamente ou se eles estavam interessados em defender a divulgação de dados semelhantes também nessas regiões. Por exemplo, nas Filipinas, o Facebook é um canal crucial para as campanhas de desinformação do governo Duterte. As Filipinas também são um dos mercados de trabalho para contratos de trabalho exploradores e traumáticos para moderação de conteúdo, inclusive para o Facebook. Falamos com um amigo e colega nas Filipinas para compartilhar o que havíamos feito e ficamos sabendo dos desenvolvimentos e preparativos de lá.
Quando decidimos começar a analisar os anúncios políticos globalmente, tivemos que considerar seriamente qual abordagem adotar, quais grupos ou pessoas já estavam trabalhando em projetos relacionados à publicidade política e quais lacunas poderíamos preencher. Sabíamos que o _**FBTrex, por exemplo, era uma ferramenta que ajudava os usuários a coletar metadados de publicações, incluindo anúncios políticos que apareciam em seus feeds de notícias, instalando uma extensão do navegador.
Dicas:
Rastreamento do Facebook Exposto (Facebook Tracking Exposed) (FBTrex) é um projeto cuja visão é que os indivíduos devem estar no controle de seus algoritmos. Entre outras coisas, o projeto oferece um plugin de navegador que coleta os metadados de todas as publicações públicas em sua linha do tempo e permite que você contribua com esses dados para um conjunto de dados públicos ou os mantenha privados para seu próprio uso. O FBTrex também permite que pesquisadores (e usuários) usem/reutilizem uma parte dos dados por meio de sua API.
A ProPublica criou uma ferramenta chamada Coletor de Anúncios Políticos (Political Ad Collector, que permite instalar um plug-in de navegador que coleta todos os anúncios políticos que você vê enquanto navega e os envia para um banco de dados que permite à ProPublica analisar melhor a natureza da segmentação de anúncios políticos.
O Who Targets Me é um projeto que também usa um plugin de navegador que você pode instalar para coletar todas as publicações patrocinadas em sua linha do tempo. O plug-in envia esses dados para um banco de dados global de crowdsourcing de anúncios políticos, compara as postagens patrocinadas com listas categorizadas de anunciantes políticos e tira conclusões sobre quem está direcionando você on-line.
Tínhamos nos familiarizado com os campos de informações que a API da biblioteca de anúncios do Facebook estava fornecendo, mas não conhecíamos os campos de informações que estavam disponíveis para os anunciantes segmentarem os usuários. Isso significava que, mesmo que soubéssemos que um determinado anúncio estava atingindo entre 1.000 e 10.000 pessoas em Delhi, não sabíamos se esses eram os parâmetros que o anunciante havia selecionado para segmentar os anúncios. Estávamos interessados em conhecer as opções disponíveis para administrar a segmentação, por assim dizer.
Assim, criamos páginas de partidos políticos fictícios e testamos a compra e a segmentação de anúncios. Criamos uma página para cada um e «impulsionamos» as postagens. O nível de detalhes disponível nesse lado da janela era, sem surpresa, muito maior do que as informações que estavam sendo reveladas em nome da transparência. Podíamos criar «públicos personalizados» especificando os tipos de «dados demográficos, interesses e comportamentos» que queríamos atingir. Também poderíamos inserir dados de pessoas que poderiam ter demonstrado interesse em nosso negócio ou campanha e o Facebook se ofereceria para exibir anúncios para um «público semelhante». Esses são métodos padrão de publicidade, mas estávamos prestes a descobrir que os campos disponíveis para segmentação pareciam bastante problemáticos e poderiam se prestar a todos os tipos de discriminação. Por exemplo, encontramos uma categoria chamada «Amigos de pessoas que comemoram o Ramadã».
Captura de tela: sugestões de segmentação ao criar um anúncio. Data: 29 de novembro de 2019. Fonte: Nayantara Ranganathan.
Estávamos cientes dos acontecimentos nos EUA, onde práticas de discriminação foram registradas e o Facebook foi responsabilizado. Também sabíamos que o Facebook havia se comprometido a não permitir a segmentação com base em raça e gênero quando se tratava de anúncios sobre emprego, moradia e crédito. Essas categorias confirmaram que esses problemas não foram resolvidos em outras partes do mundo. Por exemplo, a opção acima de «amigos de pessoas que comemoram o Ramadã» é uma categoria que pode ser facilmente usada para excluir muçulmanos em um momento em que o sentimento antimuçulmano na Índia está surgindo tanto no Estado quanto na sociedade em geral.
Captura de tela: Sugestões para excluir pessoas do direcionamento de um anúncio. Data: 29 de novembro de 2019. Fonte: Nayantara Ranganathan.
Publicando ad.watch
Decidimos coletar os dados de atores políticos em todo o mundo.
Conforme mencionado anteriormente, estávamos usando o Tableau para experimentos internos e para entender os dados. Nesse momento, descobrimos que o Tableau permitia a publicação on-line e, de fato, oferecia níveis de visualização relativamente dinâmicos e sofisticados.
Embora tenhamos começado a usar o software Tableau para nos ajudar a entender os dados, quando surgiu a questão da publicação, tivemos que pensar se queríamos tornar todo o projeto dependente de uma ferramenta proprietária e usada principalmente por departamentos de marketing para realizar análises de dados. Também tivemos que considerar se estávamos tornando nossa ferramenta vulnerável ao depender de um software proprietário que poderia decidir revogar o acesso a qualquer momento.
Exploramos outras alternativas de código aberto muito apreciadas, como o Rawgraphs e o Datawrapper. Entretanto, devido ao tamanho e às particularidades dos dados, essas alternativas foram descartadas. Algumas dessas alternativas não podiam analisar o conteúdo dos anúncios porque, às vezes, os anúncios continham caracteres de alfabetos não latinos. Por isso, decidimos usar o Tableau Public.
Observação:
Era intrigante entender por que muitos desses aclamados softwares de visualização gratuitos e de código aberto não conseguiam abrir nem mesmo pequenos trechos dos arquivos JSON.
Usamos um site chamado JSONLint que ajudou a «validar» os dados JSON, ou seja, nos ajudou a identificar se havia erros de formatação nos arquivos. Isso nos ajudou a descobrir que os erros de sintaxe identificados se deviam ao fato de que o campo com o texto frequentemente continha outros scripts além do script latino, além de emojis e caracteres incluídos em versões recentes do Unicode, o padrão para codificação de scripts em caracteres legíveis por máquina.
Então começamos a projetar nossas próprias interfaces visuais com o Tableau para navegar nos bancos de dados. Um dos problemas que encontramos ao usar o Tableau foi a quantidade de recursos de computação necessários para lidar com bancos de dados deste tamanho, que ultrapassavam os cinco gigabytes. Nossos computadores rodando através da máquina virtual eram muito lentos ou às vezes simplesmente incapazes de carregar os dados. Com os recursos financeiros limitados que tínhamos, comprar um computador mais poderoso não era uma opção.
Manoel
A universidade onde leciono fornece aos professores acesso a uma área de trabalho remota com um processador Intel Xeon com 20 GB de RAM. Essa acabou sendo uma ótima solução. Se não houvesse isso, teríamos que alugar um servidor virtual privado para a mesma finalidade. Uma área de trabalho remota pode ser acessada por meio do Remote Desktop Protocol (RDP). Esse é um protocolo que permite acessar e controlar um sistema que não está no mesmo local físico que você.
Usar o RDP do meu laptop nos permitiu começar a carregar os bancos de dados no Tableau e ter os recursos do meu terminal disponíveis para outras tarefas. Até tornou possível fechar meu laptop enquanto o RDP continuava a carregar.
Observação:
Tableau permite importar arquivos JSON de até 128 MB apenas, então tivemos para dividir os arquivos abaixo desse limite. Usamos um script Python simples chamado json-splitter para essa tarefa.
Foi um desafio encontrar o equilíbrio certo entre o que queríamos alcançar com o projeto. Por um lado, estávamos sentados sobre uma grande quantidade de dados relevantes para a política de muitos países e já havíamos encontrado problemas críticos no número limitado de países que analisamos. Havia uma certa vertigem sobre a profundidade do que mais poderia existir, o que incentivava nossa necessidade de divulgá-los. Como um projeto que expõe os mecanismos de uma tecnologia não amplamente compreendida, era importante apresentá-lo de uma forma que qualquer pessoa pudesse aprender e entender como funcionam os anúncios políticos. Ele precisava ser poderoso o suficiente para permitir que jornalistas e pesquisadores conduzissem suas investigações. E também precisava problematizar o funcionamento da infraestrutura dos anúncios do Facebook. A fusão de todos esses elementos levou algum tempo e exploramos diferentes iterações. Entre torná-lo compatível com dispositivos móveis ou baseado em desktop, optamos pelo desktop, pois ele permite uma experiência mais aprofundada. Enquanto nos aproximávamos da conclusão das interfaces que estavam prestes a dar luz ao ad.watch, a questão de como atualizar o banco de dados tornou-se mais iminente.
Se fôssemos despejar os dados diretamente para quem precisasse deles, talvez as atualizações não fossem tão relevantes, mas, como um recurso ativo, achamos que era mais importante estar sempre atualizado. Algumas semanas antes do lançamento do projeto online, participamos de um workshop do projeto Expondo o Invisível da Tactical Tech (para trabalhar, entre outras coisas, no início deste texto). Lá, recebemos ajuda de Wael Eskandar para desenvolver o núcleo inicial de um script Python que automatizaria a coleta de anúncios da API. Alguns dos desafios no desenvolvimento do script incluíam como fazer com que o Python incorporasse as modificações que estávamos introduzindo manualmente.
O próximo desafio foi fazer com que o script entendesse quando os anúncios de uma determinada consulta estavam concluídos para que o script pudesse passar para a próxima consulta. Ou como fazer com que os arquivos ficassem abaixo do limite do Tableau de 128 MB cada. Conforme observado anteriormente, o Facebook impôs limites às consultas automatizadas, então começamos a imitar o comportamento humano adicionando atrasos aleatórios entre as consultas. A partir de sua versão inicial, o script se tornou uma espécie de sistema precioso de coleta de dados, que aprimorávamos a cada dia. Ele também se tornou uma fonte de experimentação por meio da qual entendemos melhor como a API do Facebook funciona e experimentamos a coleta de outros dados além daqueles dos partidos políticos. Em um momento posterior, criamos um sistema de arquivos de texto com IDs de página que o script percorria e um arquivo separado com os códigos de país ISO de duas letras, para que ele pudesse coletar vários países de uma só vez. Esse novo sistema também nos permitiu fazer atualizações na lista de partidos políticos com mais facilidade.
Captura de tela: página inicial do site ad.watch. Data: 29 de novembro de 2019. Fonte: Manuel Beltrán.
O primeiro lançamento do ad.watch, em 26 de julho de 2019, foi feito com a coleta manual de dados, mas até então também havíamos aperfeiçoado o script a um nível que nos permitiu atualizar regularmente os dados, o que se mostrou extremamente valioso para a eficácia do projeto. Colocamos o site no ar e publicamos em nossas redes pessoais de mídia social para divulgar o projeto. Recebemos muitas reações positivas, inclusive de jornalistas que estavam usando os dados para entender os esforços de transparência de anúncios muito divulgados pelo Facebook, observando as tendências nas eleições de vários países.
Bifurcações na estrada
Verificação pelo Facebook
Quando estávamos tentando acessar os dados pela primeira vez e precisávamos passar pelo processo de verificação de identidade, percebemos que nós dois tínhamos que enfrentar processos de verificação bastante diferentes para obter acesso à plataforma de anúncios do Facebook.
Nayantara
Como alguém cuja «localização do país principal» era a Índia, tive que passar por uma etapa adicional para verificação de endereço. Isso envolvia escolher entre receber um código entregue em minha casa via correio ou visita de «alguém». A diferença de tempo entre as duas opções era significativo: o correio levaria três semanas, e a visita à minha casa aconteceria dentro de uma semana. Como queríamos dar continuidade ao processo o mais rápido possível e também ficamos impressionados pelo processo de visita domiciliar, decidimos por essa opção.
Captura de tela: processo de verificação em três etapas para acessar a Ad Library API. Data: 20 de abril de 2019. Fonte: Manuel Beltrán.
O que aprendemos no decorrer desse processo de identificação nos deixou boquiabertos.
Um dia após fazer o pedido de verificação, eu (Nayantara) recebi um telefonema de um homem que iria conduzir o processo. Ele disse que estava ligando sobre a verificação do Facebook e para perguntar se o dia seguinte era um bom momento para visitar.
Captura de tela: Informações de identidade do representante do OnGrid encarregado da verificação. Data: 23 de abril de 2019. Fonte: Nayantara Ranganathan
Todo esse episódio foi interessante por vários motivos, inclusive por mostrar como o aumento da tecnologia de identificação e dos negócios na Índia interagiu com grandes empresas de tecnologia, como o Facebook, que procuravam olhos e ouvidos na Índia, um exemplo perfeito de verificação de identidade como serviço.
Naquela ocasião, perguntei ao autor da chamada quem ele era e de qual empresa era. Ele hesitou um pouco e parecia que não esperava a pergunta. Quando descobrimos que ambos falávamos Kannada (idioma falado predominantemente pela população de Karnataka, no sudoeste da Índia), estabelecemos um tom de conversa mais familiar e confiável. Ele disse que trabalhava para uma empresa chamada OnGrid, e que seu nome era Umesh (nome alterado). Como ele estava falando com uma mulher na linha, percebi um tom estranho quando ele perguntou meu endereço e como chegar à minha casa. Ele também se mostrou mais solícito ao revelar detalhes sobre si mesmo.
Umesh me garantiu que eu não precisava estar em casa quando ele me visitasse e que, desde que houvesse alguém que confirmasse que eu morava lá, seria suficiente. Dois dias depois, Umesh chegou à minha casa para fazer a verificação. Ele tirou fotos da minha casa por fora, de um ponto de referência próximo a ela e pegou a assinatura da pessoa que mora comigo na casa (já que eu não estava em casa durante a visita).
Captura de tela: conversa no WhatsApp entre Nayantara e o representante da OnGrid. Data: 23 de abril de 2019. Fonte: Nayantara Ranganathan.
Naturalmente, ficamos curiosos sobre a empresa que era o provedora de serviços de verificação do Facebook. A OnGrid é uma empresa indiana que afirma estar permitindo que as pessoas na Índia «estabeleçam confiança instantaneamente» ou, em outras palavras, se envolvam em um comércio de informações de identificação. Eles oferecem tudo, desde «verificação de educação» até uma verificação de registros judiciais. Há dois anos, eles foram notícia por uma imagem assustadora que causou um arrepio coletivo na espinha das pessoas: um anúncio de reconhecimento de imagem não consensual usando a arquitetura de identificação biométrica nacional, Aadhaar. Como uma entidade separada, os termos de serviço e a política de dados da OnGrid são diferentes das políticas do Facebook sobre retenção de informações enviadas para fins de identificação.
Imagem: imagem agora deletada postada no Twitter por OnGrid. Data: 29 de novembro de 2019. Fonte: https://mashable.com/2017/02/14/india-aadhaar-uidai-privacy-security-debate/. Página arquivada aqui.*
As políticas do Facebook não mencionavam nada sobre a terceirização de alguns elementos do processo de verificação ou como as políticas de dados poderiam se alterar nesse caso. Isso possivelmente significava que os compromissos assumidos pelo Facebook para a exclusão de dados de identificação compartilhados com o Facebook não era algo que a OnGrid – enquanto atendia a necessidade de «verificação de última milha» – era obrigada a respeitar. De fato, o Facebook afirma excluir permanentemente os dados que coleta de usuários que passam pelo processo de verificação. A OnGrid, a empresa contratada pelo Facebook na Índia, por outro lado, retém esses dados para fornecer «serviços de identificação» a outras entidades. A OnGrid usa os dados das pessoas para criar seu banco de dados a fim de reutilizá-los e oferecê-los como serviço a outras entidades..
Após esse processo, finalmente concluí meu processo de verificação de endereço e tive acesso à API da biblioteca de anúncios.
Manoel
Como cidadão espanhol que mora na Holanda, meu processo de verificação de identidade foi muito mais simples e envolveu menos etapas. No entanto, após o envio, a aceitação final demorou cerca de dois dias para chegar, em comparação com a resposta instantânea que Nayantara recebeu nessa etapa, o que indica que o meu pode ter envolvido um ser humano no processo.
Esses episódios foram úteis para entender os diferentes processos de manuseio de dados em diferentes países, as vulnerabilidades criadas pelo envolvimento de agentes de verificação terceirizados e o fato escandaloso de que tudo isso era necessário para obter informações de interesse público que eram cruciais para entender como a mídia social poderia estar interferindo nos processos democráticos.
Incluir imagens e vídeo ou não?
Tínhamos um plano para visualizar os dados sobre os anúncios, mas os «visuais» do anúncio em si não podiam ser exibidos. Ou seja, as imagens ou o conteúdo de vídeo, que é o elemento que os usuários do Facebook e do Instagram devem ver, não podiam ser visualizados devido às peculiaridades da estruturação e da acessibilidade dos dados.
Os dados não foram fornecidos para download independentemente da dependência da API e, portanto, foi um desafio visualizá-los. Mas mesmo que conseguíssemos encontrar uma maneira de incorporar o link e apresentar os recursos visuais, havia outro problema: o URL com os recursos visuais incluía um «token de acesso» ativo. Esse é um token exclusivo e com limite de tempo que impede que o link seja útil após uma hora. Os links não seriam muito úteis sem o token de acesso do próprio visualizador.
Observação:
Esta é a aparência de um URL de instantâneo de anúncio:
https://www.facebook.com/ads/archive/render_ad/?id=251563729117836&access_token=EAAjPOWfPqZCgBAAJ0csteVNkFJcyxbQZA7m1xbJ8w3fzFRlm6apQ5cAnzsjBNOOJt4zSEE8IxB4k9HcKydhbcd7P4 SnNTBn82G7s>gyy5YXX8fmZC0hUGcpQMfZCp3uWaSWeX4urEcNPwB8SM01clzJSqRXPjjh8ZBguzXZC9sc9whaz0hE9MGEj889ztZBW2XNxVfitweUSkVrcKGiwePQQZB7uGBOa
Um token de acesso é o que vem depois de
access_token=
, e é a longo sequência de letras e números:EAAjPOWfPqZCgBAAJ0csteVNkFJcyxbQZA7m1xbJ8w3fzFRlm6apQ5cAnzsjBNOOJt4zSEE8IxB4k9HcKydhbcd7P4SnNTBn82G7sgyy5YXX8fmZC0hUGcpQMfZCp3uWaSWeX4urEcNP wB8S>M01clzJSqRXPjjh8ZBguzXZC9sc9whaz0hE9MGEj889ztZBW2XNxVfitweUSkVrcKGiwePQQZB7uGBOa
Consideramos a possibilidade de extrair imagens da biblioteca de anúncios usando um dos add-ons do navegador, como «Download All Images». Também havia muitos scripts em Python para ajudar a fazer isso. No entanto, o Facebook impede que todas essas técnicas de raspagem coletem os recursos visuais. Além disso, o Facebook também proíbe que os usuários façam esse tipo de raspagem em geral.
Captura de tela: Termos de Serviço do Facebook. Data: 8 de dezembro de 2019. Fonte: Manuel Beltrán.
Por um lado, era importante incluir os recursos visuais, pois eles têm um valor de lembrança para as pessoas que navegam nas interfaces. Por outro lado, nos perguntamos se não seria bom não distrair as pessoas com imagens, pois o aspecto mais importante a ser transmitido era que as imagens em si talvez não fossem tão especiais quanto os metadados sobre elas, como a segmentação.
No entanto, também tentamos usar o comando «wget» para fazer isso, mas não funcionou.
Por fim, encontramos uma solução alternativa usando os recursos disponíveis no Tableau para permitir que os usuários do ad.watch pudessem inserir seus próprios tokens de acesso e visualizar o conteúdo dos anúncios.
No entanto, após o lançamento, descobrimos algo chamado “Access Token Debugger”, em que era possível estender o tempo de vida ou a validade de cada token de acesso. Começamos então a usar tokens de acesso estendidos em nosso sistema de coleta de dados.
Captura de tela: Depurador de token de acesso. Data: 30 de novembro de 2019. Fonte: Manuel Beltrán.
Trabalhando com jornalistas
Ao trabalhar em conjunto com jornalistas para investigar histórias que surgiam a partir dos dados, muitos queriam ver os dados brutos. No entanto, o compartilhamento dos dados tinha um problema. Os dados continham o parâmetro "ad_snapshot_url"
, que continha nossos tokens de acesso pessoal, que descrevemos anteriormente.
Esse token de acesso é exclusivo para diferentes contas de desenvolvedor e é registrado nos dados retornados pelas consultas. Como estávamos tomando cuidado para não fazer nada que pudesse revogar nosso acesso à API, tivemos que removê-lo antes de compartilhar os dados. Mas a remoção do token de acesso dos dados de cada anúncio tinha que ser automatizada, pois tínhamos milhões de anúncios. Foi muito fácil encontrar a solução pesquisando no StackOverflow, e conseguimos usar uma ferramenta chamada SED (Stream Editor) que já está incluída no terminal do Linux.
sed -i -e 's/EAAjPOWfPqZCgBAAJ0csteVNkFJcyxbQZA7m1xbJ8w3fzFRlm6apQ5cAnzsj BNOOJt4zSEE8IxB4k9HcKydhbcd7P4SnNTBn82G7sgyy5YXX8fmZC0hUGcpQMfZCp3uWaSWeX 4urEcNPwB8SM01clzJSqRXPjjh8ZBguzXZC9sc9whaz0hE9MGEj889ztZBW2XNxVfitweUSkV rcKGiwePQQZB7uGBOa//g' US_20_1.json
Usando esses parâmetros, o SED procura em um arquivo de texto o conteúdo do token de acesso e o exclui. Essa ferramenta nos permitiu limpar facilmente os arquivos brutos de dados de forma automatizada e eficiente.
Como os dados que coletamos eram sobre os próprios anúncios e não envolviam os feeds de notícias pessoais dos usuários, não tivemos que lidar com a questão da proteção de dados pessoais.
Depois de publicar ad.watch
Manutenção, atualização e adaptação dos bancos de dados
Quando o projeto se tornou público, também se tornou imperativo que os dados fossem atualizados regularmente e que o banco de dados fosse mantido. Isso envolveu questões sobre a frequência das atualizações, se os dados deveriam ser coletados desde o início a cada vez e, caso contrário, como coletar os dados exatamente de onde havíamos parado.
Adicionamos mais países à medida que seus dados eram adicionados à API do Facebook. A Argentina e o Sri Lanka foram adicionados pouco antes das eleições nesses países, e os dados de Cingapura também foram divulgados. Não houve procedimentos de verificação para a Noruega e a Suíça, mas já conseguimos coletar os dados sobre esses países.
Manoel
Com o passar do tempo, após o lançamento, também trabalhei para ajustar os scripts que usamos para coletar os dados, para que a coleta fosse mais eficiente, com intervenção humana mínima para determinadas tarefas.
Resposta do Facebook:
Pouco depois do lançamento, o (ex) vice-presidente de anúncios do Facebook proferiu algumas palavras de incentivo ao projeto. Isso foi estranho, pois o projeto não tinha a intenção de ser uma «ferramenta de visualização», mas sim de desafiar a falta de acesso sistemático aos dados pelo Facebook.
O projeto é uma ação para destacar o conflito fundamental entre a infraestrutura de publicidade do Facebook e as condições necessárias para uma participação democrática significativa na mídia social. Com o aumento da individualização possibilitado pela publicidade direcionada no Facebook e a falha em abrir esses dados em todos os países em que opera, essas condições estavam sendo derrotadas repetidamente.
Por esse motivo, não queríamos que o Facebook cooptasse nosso projeto e o tornasse parte de sua história de sucesso em transparência.
Censura no Twitter
Começamos a notar algo peculiar dois dias após o lançamento do site. Alguns tweets feitos por outras pessoas sobre o projeto não estavam mais visíveis para nós. Era improvável que várias pessoas tivessem tweetado sobre o projeto e depois apagado seus tweets.
Logo percebemos que nossos próprios tweets sobre o projeto também estavam desaparecendo. Inicialmente, não notamos isso, pois ambos conseguíamos ver nossos próprios tweets. No entanto, acabamos percebendo que não podíamos mais ver os tweets um do outro.
Entendido como «shadowbanning», esse era um fenômeno do qual já tínhamos ouvido falar antes.
Isso se torna ainda mais difícil de detectar, pois os tweets continuam visíveis para o autor dos tweets, sem levantar suspeitas. Esse fenômeno era uma ocorrência regular que as pessoas observavam quando se tratava de tweets e contas de usuário relacionadas à Caxemira, por exemplo.
Decidimos abordar o problema imediatamente por meio de uma denúncia à equipe de suporte do Twitter. Um dia depois, ainda não tínhamos recebido resposta. Foi então que decidimos que valeria a pena solicitar apoio e ajuda para entender o que estava acontecendo. Publicamos o seguinte pedido de suporte.
Captura de tela: Tweet pedindo apoio sobre a censura. Data: 2 de agosto de 2019. Fonte: Nayantara Ranganathan.
A essa altura, descobrimos que não apenas os tweets haviam desaparecido, mas também era impossível publicar um tweet com o URL do projeto. Descobrimos que outras pessoas também estavam enfrentando esse problema.
Capturas de tela: Pessoas no Twitter nos alertando sobre a censura. Data: 4 de agosto de 2019. Fonte: Nayantara Ranganathan.
Foi bastante estranho que o URL do projeto também tenha sido bloqueado em Mensagens Diretas do Twitter.
Captura de tela: censura na janela de mensagem direta do Twitter. Data: 3 de agosto de 2019. Fonte: Nayantara Ranganathan.
Recebemos apoio de muitos amigos, colegas e desconhecidos na forma de documentação de mensagens de erro, conectando-nos e sugerindo pessoas que trabalham no Twitter para entrar em contato.
Enquanto isso, descobrimos que alguém que havia tentado publicar um link do projeto no LinkedIn também havia recebido uma mensagem de erro. Imaginamos que o URL poderia ter sido marcado em algum tipo de lista negra centralizada além das plataformas. De fato, esse foi o caso, pois descobrimos que uma das empresas de segurança que avalia URLs e cria listas de bloqueio - https://fortiguard.com/webfilter - de fato listou o ad.watch como spam com base no relatório de alguém. Entramos com um recurso junto a eles e recebemos uma resposta dizendo que eles o haviam reclassificado (curiosamente) como publicidade.
Captura de tela: resultados de uma pesquisa que classificou o ad.watch como spam. Data: 5 de agosto de 2019. Fonte: Nayantara Ranganathan.
Por fim, o Twitter removeu o shadowbanning, mas não nos deu nenhuma explicação. Nossa investigação continuou; alguém nos colocou em contato com uma pessoa que trabalhava no Twitter que parecia ansiosa para ajudar, mas isso não levou a lugar algum. Também exploramos a possibilidade de usar diferentes canais para tentar obter uma explicação sobre o motivo do bloqueio, inclusive por meio do uso do Direito à Explicação do European GDPR (General Data Protection Regulation). Teoricamente, o direito à explicação pode forçar o Twitter a informar o motivo da censura, se ela for algorítmica.
Principais conclusões
Desde as falhas técnicas nas ferramentas até as promessas sinceras nas diretrizes, aprendemos muito sobre o submundo da economia da informação, que é a venda de dados pessoais para marketing, e seu enorme impacto sobre as realidades sociopolíticas das pessoas. Além do Facebook, o projeto nos apresentou o ethos e o modus operandi das empresas que estão envolvidas na extração e monetização de dados sobre a vida das pessoas.
Esse projeto consistia em acreditar que uma pequena equipe de duas pessoas poderia, de alguma forma, desafiar uma entidade como o Facebook, com sua escala de recursos e poder de narrativa. Isso significava que estávamos constantemente sob o risco de que nosso acesso à API pudesse ser retirado, ou que nossos métodos fossem classificados como contrários aos termos de uso do Facebook, ou até mesmo que considerássemos que o Facebook tinha acesso a tantas informações confidenciais sobre nós que poderiam ser usadas de forma prejudicial. Essas coisas drásticas não aconteceram, mas no momento em que estávamos trabalhando no projeto antes de lançá-lo, carregávamos conosco todas essas possibilidades.
De modo geral, muitos fatores se uniram para a realização do projeto:
compreender as lacunas que existiam nesse meio
confiar que havia uma maneira de contornar as limitações quando as coisas não eram simples
procurar e se beneficiar de conselhos generosos de amigos
levar a sério a comunicação dos dados
Esses foram alguns aspectos que ajudaram, em retrospectiva.
A partir de janeiro de 2020, o projeto está tomando novos rumos: estamos trabalhando para tornar as informações sobre publicidade política nas mídias sociais mais facilmente digeríveis para diferentes grupos de pessoas em diferentes partes do mundo. Também estamos voltando à nossa meta inicial de criar um método para tornar os dados disponíveis para download para qualquer pessoa que deseje analisá-los por conta própria.
A manutenção e as atualizações dos bancos de dados também nos mantêm ocupados. Como os cenários políticos globais estão mudando e novos partidos e coalizões estão surgindo, recebemos contribuições de visitantes que nos enviam e-mails com novas páginas a serem adicionadas ao ad.watch.
Continuamos a documentar e atualizar o ad.watch com novas iterações do projeto. Visite-nos em ad.watch ou escreva para nós em info@ad.watch.
Todos os tokens de acesso no artigo foram modificados.
Publicado em abril de 2020
Traduzido para português em abril de 2024
Recursos
Artigos e guias
Ferramenta de anúncios do Facebook criada para combater a desinformação não funciona como anunciado do The New York Times (cópia arquivada da Wayback Machine disponível aqui). Um artigo sobre a biblioteca de anúncios do Facebook.
Cambridge Analytica Files, do The Guardian (cópia arquivada da Wayback Machine disponível aqui). Uma série de investigações sobre as controversas práticas de mineração de dados e marketing eleitoral da empresa de consultoria política Cambridge Analytica.
Novas mídias, novas violações: campanha eleitoral no Facebook viola o código de conduta, artigo do HuffingtonPost Índia (cópia arquivada da Wayback Machine disponível aqui).
Esta ferramenta permite que você veja os anúncios políticos direcionados do Facebook em todo o mundo, artigo da Vice (cópia arquivada da Wayback Machine disponível aqui).
Adolescentes expostos a anúncios políticos altamente carregados no Facebook e Instagram, artigo da Sky News (cópia arquivada da Wayback Machine disponível aqui).
The Influence Industry, da Tactical Tech (cópia arquivada da Wayback Machine disponível aqui). Um projeto de pesquisa que analisa as práticas de coleta, processamento e uso de dados pessoais de eleitores em eleições em todo o mundo.
Ferramentas e Bancos de Dados
Bash. Uma ferramenta/linguagem para se comunicar com os sistemas operacionais das distribuições Linux.
API da biblioteca de anúncios do Facebook. A API do Facebook que permite que determinados usuários pesquisem anúncios marcados como relacionados à política e questões de importância política.
Facebook Tracking Exposed. Um projeto que oferece um plug-in de navegador, que coleta os metadados de todas as postagens públicas em sua linha do tempo e permite que você contribua com esses dados para um conjunto de dados público ou mantenha-os privados.
JSON splitter. Uma ferramenta de linha de comando para dividir grandes arquivos JSON em arquivos menores.
JSON lint. Uma ferramenta que ajuda a validar (verificar) arquivos json e reformatá-los.
Political Ad Collector da ProPublica. Uma ferramenta que permite instalar um plug-in de navegador que coleta todos os anúncios políticos que você vê durante a navegação e os envia para um banco de dados que permite ao ProPublica analisar melhor a natureza da segmentação de anúncios políticos.
Remmina. Aplicativo que ajuda a conectar-se a computadores remotos usando protocolos como o Remote Desktop Protocol.
Sed. Um editor que permite realizar transformações básicas de texto no terminal.
Stackoverflow. Um fórum da web onde os desenvolvedores fazem e respondem perguntas.
Tableau. Um conjunto de aplicativos de software para visualização e análise de dados.
VirtualBox. Aplicativo que permite executar um sistema operacional diferente daquele instalado em seu computador.
Wget. Software para recuperar conteúdo de servidores da web.
Who Targets Me. Um projeto que usa uma extensão de navegador de plug-in de navegador para anúncios políticos de crowdsourcing, você pode instalá-lo para coletar todas as postagens patrocinadas em sua linha do tempo e ver quem está direcionando seu voto.
Glossário
term-api
API – significa interface de programação de aplicativos (Application Programming Interface em inglês), uma ferramenta de software que facilita a comunicação entre um usuário e um conjunto de dados, entre outras coisas. uma forma pela qual um plataforma pode tornar seus dados acessíveis a desenvolvedores externos gratuitamente ou sob algumas condições ou taxas. Por exemplo, a API da biblioteca de anúncios do Facebook permite que os usuários consultem dados de anúncios usando um conjunto particular de comandos desenvolvidos pelo Facebook.
term-extension
Extensão do navegador – também chamados de add-ons, são pequenos pedaços de software usado para estender as funcionalidades de um navegador da web. Estes podem fazer qualquer coisa, desde permitir fazer imagens de páginas da web que você visita a verificar e corrigir sua ortografia, ou bloquear anúncios nos sites.
term-plugin
Plugin do navegador - um software que pode ser adicionado aos navegadores para melhorar funcionalidades específicas.
term-fbpageid
Facebook Page ID - um número que identifica exclusivamente cada página do Facebook.
term-interface
Interface - (neste caso) um conjunto de visualizações interativas que permite que os usuários tenham uma representação gráfica dos dados.
term-iso
Código de país ISO - os códigos alfabéticos curtos criados e mantidos para cada país pela ISO: https://www.iso.org/obp/ui/#search.
term-json
JSON - JavaScript Object Notation, um formato popular para troca de dados. De acordo com o site JSON, é fácil para os humanos lerem e escrever e fáceis para as máquinas analisarem e gerarem.
term-query
Consulta/Requisição - uma lista de perguntas codificadas que um usuário pode inserir em programas e aplicativos para obter dados sobre uma questão ou assunto de interesse.
term-python
Python - uma linguagem de programação que permite aos desenvolvedores escrever vários programas, como aplicativos da Web, sites, ferramentas de análise de dados: https://www.python.org/.
term-pythoneditor
Editor Python - aplicativo para navegar, depurar, compilar e executar scripts na linguagem Python.
term-rdp
Remote Desktop Protocol (RDP) - um protocolo que permite acessar e controlar um sistema que não está no mesmo local físico que você.
term-shadowbanning
Shadowbanning - quando alguns tweets (ou contas) são despriorizados ou desaparecem das linhas do tempo e das contas sem um aviso de censura explícito.
term-targetads
Publicidade ou Anúncios direcionados – uma forma de publicidade que visa atingir ou serem mostrados apenas acertos grupos selecionados ou indivíduos com características particulares ou de áreas geográficas específicas, com base nos dados disponíveis sobre eles. Por exemplo, colocar anúncios de venda de bicicletas em contas do Facebook de jovens em Amsterdã.
term-terminal
Terminal - também chamado de interface de linha de comando (CLI, Command Line Interface), é um meio de interagir com um computador usando uma interface baseada em texto onde é possível inserir comandos em um programa de computador.
term-trendtopics
Trending topics - tópicos que são populares em determinados momentos.
term-unicode
Unicode - o padrão para codificar scripts com caracteres legíveis por máquina.
term-uniqueid
Identificadores únicos - (neste caso) códigos únicos que são criados e marcados em cada anúncio, para que possam ser rastreados, se necessário.
term-vps
Servidor Privado Virtual (VPS) - Do inglês Virtual Private Server, é uma máquina virtual, alugada como um serviço, por uma empresa de hospedagem na Internet.
term-virtualsoft
Software de virtualização - software que permite executar um Sistema Operacional diferente daquele instalado em seu computador sem a necessidade de efetivmento adicionar outro sistema operacional em seu dispositivo.
term-wget
Wget - uma ferramenta do projeto GNU para obter arquivos de servidores web. A ferramenta permite o transporte de arquivos através de mais de um protocolo.