Em muitos desafios de processamento de imagem , a postagem contém imagens, que devem ser salvas em um arquivo para poder solucionar o problema. Esta é uma tarefa manual especialmente tediosa. Nós, programadores, não devemos ter que ser submetidos a essa labuta. Sua tarefa é baixar automaticamente todas as imagens contidas em uma pergunta do Code Golf.SE.
Regras
- Seu programa pode se conectar a qualquer parte
stackexchange.com
, mas não a outros domínios, exceto os locais das imagens (ou seja, não se preocupe com um encurtador de URL). - Um número inteiro N é dado como entrada, na linha de comando ou stdin.
- O URL é garantidamente um link válido para uma pergunta do Code Golf.
http://codegolf.stackexchange.com/questions/N
- Cada imagem exibida no corpo da pergunta N deve ser salva em um arquivo no computador local. Qualquer um dos seguintes locais é aceitável:
- O diretório atual
- Uma entrada de diretório pelo usuário
- Seu programa não deve salvar outros arquivos além das imagens no corpo da pergunta (por exemplo, avatares de usuários ou imagens contidas nas respostas).
- As imagens devem ser salvas com a mesma extensão de arquivo que o original.
Este é um código de golfe - escreva o programa mais curto possível.
Critério de validade para respostas
Existem vários casos possíveis de borda com várias imagens com o mesmo nome, texto com o mesmo nome que os elementos HTML etc. Uma resposta será invalidada apenas se for demonstrado que falha em alguma revisão de uma pergunta postada antes de 10 de janeiro de 2015 .
Respostas:
Mathematica,
211210 bytesUngolfed:
É bem direto. Eu configurei um filtro para a API StackExchange, que retorna apenas o corpo de uma pergunta. O código recupera as informações da pergunta com esse filtro e as analisa como JSON. Seleciono o elemento correto (o corpo) e uso
ImportString
para analisar o HTML e filtrar todos os URLs da imagem.FileNameTake@#~Export~Import@#
em seguida, baixa cada uma das imagens e as armazena no diretório de trabalho atual com o mesmo nome de arquivo que o URL.Você pode descobrir o diretório de trabalho atual com
Directory[]
.Em princípio, há uma versão muito mais curta, porque
ImportString
pode realmente baixar todos os arquivos imediatamente, em vez de apenas me fornecer os URLs. Mas, então, perco informações sobre o tipo de arquivo original (uma vez que elas são convertidas emImage
objetos no download), para que eu possa salvá-las todas apenas do mesmo tipo (por exemplo, PNG).fonte
Javascript -
149161 bytescom espaço em branco
O script deve ser executado no site stackexchange para funcionar.
O padrão será a página atual se nenhum número de pergunta for especificado no promptfonte
$('[src*="imgur"]',d)
acredito que sim . Eu gosto que isso possa ser executado no console - gratificação instantânea.questions
pode ser reduzido paraq
, mas deve incluir acodegolf.stackexchange.com
parte em vez de depender de estar nessa página. @ Josiah, é possível incluir imagens de outros domínios nas postagens.#question .post-text img
pode ser reduzido para.post-text:first img
ou.post-text:eq(0) img
.Python 2 - 241 bytes
Bem simples, provavelmente pode ser ainda mais jogado. Pesquisei no site todas as ocorrências
img src=
entre a primeira ocorrênciapost-text
e a/div
seguinte imediatamente. Cada URL da imagem é então lido e salvo no diretório de trabalho.fonte
[-9:]
) do URL da imagem, que deve manter o nome de 5 caracteres e um.png
ou.jpg
etc. Ele cortará os bytes do nome do arquivo se a extensão tiver mais de 3 caracteres .for
loop em uma linha.for p re.findall(...):f=open(...);f.write(...)
Mathematica, 195
Isso exporta imagens da mesma maneira que Martin em sua solução Mathematica, leia sua resposta para obter mais informações sobre isso. Essa abordagem é muito diferente da dele, em vez de analisar o resultado da API, analiso a página HTML diretamente. Ou melhor, analiso o XML simbólico que o Mathematica pode gerar a partir do HTML.
fonte
Python 2 -
398342334 bytesO programa baixa a página SE, extrai a parte da postagem (o elemento div pós-texto), localiza URLs que terminam em uma extensão de imagem e os baixa. As imagens são salvas como
img<n>.<ext>
no diretório atual.Este programa também fará o download de imagens fornecidas como um link, não apenas imagens incorporadas. Ao atribuir a cada imagem um nome de arquivo exclusivo, conflitos de nome também são evitados.
fonte
questions
porq
(na URL).Bash - 86 bytes
Nada será resolvido.
-np
impede que o wget entre nos diretórios superiores (User Imgs)-A
apenas captura arquivos com a extensão correspondente à lista apresentada.-r
é um download recursivo.-l
impede que o wget seja profundo demais.$1
é a pergunta a agarrar.fonte
questions
porq
no URL.Node.js,
251247 bytesUsa
request
para criar HTTPGET
echeerio
analisar o HTML. As colisões de nomes são resolvidas adicionando o índice da imagem atual ao nome da base do URL do arquivo. As imagens são salvas no mesmo diretório que o arquivo atual.fonte
Lua, 200 bytes
Aceita o número como um argumento de linha de comando.
Supõe que qualquer
src=
atributo será para umaimg
tag, pois essas são as únicas tags comsrc
atributos permitidos pela troca de pilhas (certo?).Observe também o
.. ...
. Estou particularmente orgulhoso disso.fonte