Dans de nombreux défis de traitement d'image , le message contient des images, qui doivent être enregistrées dans un fichier afin de pouvoir travailler sur le problème. Il s'agit d'une tâche manuelle particulièrement fastidieuse. Nous, les programmeurs, ne devrions pas être soumis à de telles corvées. Votre tâche consiste à télécharger automatiquement toutes les images contenues dans une question Code Golf.SE.
Règles
- Votre programme peut se connecter à n'importe quelle partie de
stackexchange.com
, mais ne peut pas se connecter à d'autres domaines, à l'exception des emplacements des images (c'est-à-dire, ne vous embêtez pas avec un raccourcisseur d'URL). - Un entier N est donné en entrée, sur la ligne de commande ou stdin.
- L'URL est garantie d'être un lien valide vers une question Code Golf.
http://codegolf.stackexchange.com/questions/N
- Chaque image affichée dans le corps de la question N doit être enregistrée dans un fichier sur l'ordinateur local. L'un des emplacements suivants est acceptable:
- Le répertoire courant
- Un répertoire saisi par l'utilisateur
- Votre programme ne doit pas enregistrer de fichiers autres que les images dans le corps de la question (par exemple, les avatars des utilisateurs ou les images contenues dans les réponses).
- Les images doivent être enregistrées avec la même extension de fichier que l'original.
Il s'agit d'un code-golf - écrivez le programme le plus court possible.
Critère de validité des réponses
Il existe différents cas de bord possibles avec plusieurs images du même nom, du texte avec le même nom que les éléments HTML, etc. Une réponse ne sera invalidée que s'il peut être démontré qu'elle échoue lors d'une révision d'une question publiée avant le 10 janvier 2015 .
Réponses:
Mathematica,
211210 octetsNon golfé:
C'est assez simple. J'ai mis en place un filtre pour l'API StackExchange, qui ne renvoie que le corps d'une question. Le code récupère les informations de la question avec ce filtre et les analyse comme JSON. Je sélectionne l'élément correct (le corps) et l'utilise
ImportString
pour analyser le code HTML et filtrer toutes les URL d'images.FileNameTake@#~Export~Import@#
télécharge ensuite chacune des images et la stocke dans le répertoire de travail actuel avec le même nom de fichier que celui de l'URL.Vous pouvez trouver le répertoire de travail actuel avec
Directory[]
.En principe, il existe une version beaucoup plus courte, car elle
ImportString
peut en fait télécharger tous les fichiers immédiatement, au lieu de simplement me donner les URL. Mais je perds ensuite des informations sur le type de fichier d'origine (car ils sont convertis enImage
objets lors du téléchargement), je ne peux donc les enregistrer que sous le même type (PNG, par exemple).la source
Javascript -
149161 octetsavec un espace
le script doit être exécuté à partir du site stackexchange pour fonctionner.
Va par défaut à la page actuelle si aucun numéro de question n'est spécifié dans l'invitela source
$('[src*="imgur"]',d)
je crois. J'aime que cela puisse être exécuté dans la console - une gratification instantanée.questions
peut être raccourciq
, mais il doit inclure lacodegolf.stackexchange.com
partie au lieu de compter sur la présence de cette page. @Josiah, il est possible d'inclure des images d'autres domaines dans les publications.#question .post-text img
peut être raccourci à.post-text:first img
ou.post-text:eq(0) img
.Python 2 - 241 octets
Assez simple, peut probablement être joué plus loin. Je recherche sur le site toutes les occurrences
img src=
entre la première occurrence depost-text
et/div
immédiatement après. Chaque URL d'image est ensuite lue et enregistrée dans le répertoire de travail.la source
[-9:]
quels - le nom est considéré comme les 9 derniers octets ( ) de l'URL de l'image, qui doit conserver son nom à 5 caractères et un.png
ou.jpg
etc. Il coupera les octets du nom de fichier si l'extension dépasse 3 caractères. .for
boucle une ligne.for p re.findall(...):f=open(...);f.write(...)
Mathematica, 195
Cela exporte les images de la même manière que Martin l'a fait dans sa solution Mathematica, lisez sa réponse pour plus d'informations à ce sujet. Cette approche est très différente de la sienne, au lieu d'analyser le résultat de l'API, j'analyse directement la page HTML. Ou plutôt, j'analyse le XML symbolique que Mathematica peut générer à partir du HTML.
la source
Python 2 -
398342334 octetsLe programme télécharge la page SE, extrait la partie post (l'élément div post-texte), trouve les URL qui se terminent par une extension d'image et les télécharge. Les images sont enregistrées comme
img<n>.<ext>
dans le répertoire courant.Ce programme téléchargera également des images fournies sous forme de lien, pas seulement des images intégrées. En donnant à chaque image un nom de fichier unique, les conflits de noms sont également évités.
la source
questions
parq
(dans l'URL).Bash - 86 octets
Rien de tout cela ne va pas arranger.
-np
empêche wget d'entrer dans les répertoires supérieurs (User Imgs)-A
ne prend que les fichiers dont l'extension correspond à la liste présentée.-r
est un téléchargement récursif.-l
empêche wget d'aller trop profondément.$1
est la question à saisir.la source
questions
parq
dans l'URL.Node.js,
251247 octetsPermet
request
de créer des HTTPGET
etcheerio
d'analyser le HTML. Les collisions de noms sont résolues en ajoutant l'index de l'image actuelle au nom de base de l'URL du fichier. Les images sont enregistrées dans le même répertoire que le fichier actuel.la source
Lua, 200 octets
Accepte le nombre comme argument de ligne de commande.
Suppose que tout
src=
attribut sera pour uneimg
balise car ce sont les seules balises avec dessrc
attributs que l'échange de pile permet (non?).Notez également le
.. ...
. Je suis particulièrement fier de celui-là.la source