Skip to content

Instantly share code, notes, and snippets.

@rafapolo
Last active December 21, 2015 05:48
Show Gist options
  • Save rafapolo/6259175 to your computer and use it in GitHub Desktop.
Save rafapolo/6259175 to your computer and use it in GitHub Desktop.
Automatizar a utilização dos 1TB de armazenamento do Flickr para quaisquer arquivos.
# encoding: utf-8
# autor: Rafael Polo
# data: 18.08.2013
# Prova de Conceito: É possível utilizar os incríveis 1024 gigabytes de armazenamento de imagens
# do Flickr pra hospedar o valioso Acervo do MakingOff através de esteganografia !
# Motivação: Usuários torrents têm sido preza fácil pra associações anti-pirataria.
# O Acervo hoje tem cerca de 18 TB de conteúdo distribuído, muitos já inacessíveis.
# Algumas contas no Flickr seriam suficientes pra distribuir todo conteúdo ainda acessível.
# compacta, separa e esconde pasta em diversas imagens
def esteganografia(path)
out_path = "#{path}/out"
# cria pasta temporária
system("mkdir #{out_path}") unless File.directory? out_path
puts "Compactando..."
# Flickr tem o limite de 200MB por imagem, usarei 100MB por imagem.
system("rar a -v100m #{out_path}/out.rar #{path}")
# concateno RAR no fim do JPEG
system("mkdir #{out_path}/images")
Dir["#{out_path}/*.rar"].each do |chunk|
puts "Escondendo #{chunk}" # usa frame.jpg padrão
system "cat #{path}/frame.jpg #{chunk} > #{chunk}.jpg"
end
end
def upload_to_flickr
# por hora fiz manualmente o upload das imagens em um novo Set de um novo Usuário
# http://www.flickr.com/photos/100332464@N03/sets/
end
# baixa, decodifica e descompacta um determinado Set do Flickr com arquivo escondido.
# assim, o ID do Set funciona como uma URL pro arquivo
def get_from_set(set_id)
# uso API com key do novo usuário (poderia ser qualquer uma válida)
require 'flickraw'
FlickRaw.api_key = '7fd9704ef650d1000263b1331277dd13'
FlickRaw.shared_secret = 'c9ee9d15766fcb03'
# pega as imagens das URLs de todas as imagens do Set dado
threads = []
flickr.photosets.getPhotos(:photoset_id => set_id).photo.each do |s|
chunk = FlickRaw.url_o flickr.photos.getInfo(:photo_id => s.id)
threads << Thread.new { system "wget #{chunk} -O #{s.title}" }
end
threads.each { |t| t.join }
system "unrar e -y out.part01.rar"
puts "Ok!"
end
# exemplo de uso
esteganografia '/Users/polo/Downloads/Der.Himmel.Uber.Berlin.-.Wings.of.Desire.DVDRip.XviD.MakingOff.Org'
# sobe
upload_to_flickr
# remonta
get_from_set 72157635116479848
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment