;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Ricardo Feltrin

Exclusivo: Cerco ao Pornhub reduz pirataria de pornô até no Brasil

Pornhub levou uma rasteira do jornalismo  - Imagem: Getty
Pornhub levou uma rasteira do jornalismo Imagem: Imagem: Getty

Colunista do UOL

18/12/2020 00h09

O Pornhub, um dos maiores sites de pornografia no mundo, está sendo obrigado a retirar vídeos de sua plataforma desde a semana ada.

Uma reportagem do "NY Times" comprovou que o site pornô vinha disseminando conteúdo com menores de idade e de violência sexual —inclusive de estupros.

A reportagem caiu como uma bomba e afastou imediatamente "parceiros" do site como a Mastercard e a Visa, atingindo-o no bolso.

Desde a semana ada o site já teria retirado do ar mais de 8 milhões de vídeos —ou quase metade de seu acervo.

Não foi revelado quantas contas publicadoras de conteúdo ilegal foram deletadas, mas a decisão do Pornhub provocou algo impensável: reduziu por uma semana o "" de pirataria de conteúdo erótico no Brasil e em todo o mundo.

O site também está exigindo verificação de conta para permitir "" e só contas verificadas poderão prover conteúdo. Até quando? Ninguém sabe.

No entanto, a coluna obteve alguns números no Brasil.

Segundo Clayton Nunes, CEO da Brasileirinhas —maior produtora de conteúdo adulto no país—, antes do escândalo sua equipe pedia exclusão (por meio de notificação) de 500 vídeos diários da plataforma Pornhub.

Eram vídeos da Brasileirinhas pirateados e "subidos" no site de forma clandestina. Quase todo esse conteúdo está baixado em streaming.

Fato histórico no mundo erótico

Desde a última segunda-feira (14), afirma Nunes, esse número tem sido ZERO.

Ele detalhou ainda mais os números, de quantos vídeos de propriedade da Brasileirinhas foram identificados em outros sites:

XVideos - 732 vídeos/dia (em média)

XHamster - 521 vídeos/dia

SpankBang - 313 vídeos/dia

Pornub - 0

Segundo o CEO, isso jamais havia acontecido e é algo que sites "colegas" e legalizados de outros países também estão vendo.

O motivo da queda, diz ele, é que os "piratas" que ora estão sendo punidos por postarem vídeos com estupros ou com menores são os mesmos que também postam conteúdo sexual "regular" —embora igualmente ilegal e pirateado.

Para Nunes é importante que a pressão cresça também sobre outros sites, como o XVideos —o maior site de pornografia gratuita do mundo.

Os "piratas" criam vários canais em vários sites para conseguir monetização: os "hospedeiros" (Pornhub etc) remuneram os canais de acordo com sua audiência. Mas, parece que agora a situação não será tão simples.

Site faz varredura 24 horas

A Brasileirinhas tem uma equipe dedicada a ar 24 horas por dia "varrendo" a rede atrás de conteúdo seu pirateado e postado ilegalmente nesses sites.

Também tem um escritório de advocacia dedicado a combater os "piratas" reticentes na esfera jurídica.

Em entrevista a esta coluna, o CEO diz que muita gente considera esse trabalho como "enxugar gelo".

"Mas não há outra alternativa a não ser notificar os sites que abrigam pirataria."

Normalmente os sites tiram rapidamente os vídeos após a notificação, mas como há descontrole no "" de conteúdo, em questão de dias (ou às vezes só de horas) o conteúdo já volta ao site.

Dessa vez, porém, não está sendo assim.

No entanto, mesmo ele não tem esperança de que essa situação se mantenha.

Os piratas cedo ou tarde dão um jeito de voltar ao jogo.

Ricardo Feltrin no Twitter, Facebook, Instagram e site Ooops