Code Golf: analyse des résultats Google


16

Lorsque vous recherchez quelque chose sur google, dans la page de résultats, l'utilisateur peut voir des liens verts, pour la première page de résultats.

Dans la forme la plus courte possible, en octets, dans n'importe quelle langue, affichez ces liens vers stdout sous la forme d'une liste. Voici un exemple, pour les premiers résultats de la requête d'échange de pile:

Une capture d'écran

Contribution :

vous choisissez: l'URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) ou justestackexchange

Production :

french.stackexchange.com/, stackoverflow.com/, fr.wikipedia.org/wiki/Stack_Exchange_Network, en.wikipedia.org/wiki/Stack_Exchange,...

Règles :

  • Vous pouvez utiliser des raccourcisseurs d'URL ou d'autres outils de recherche / API tant que les résultats seront les mêmes que pour la recherche sur https://www.google.com .

  • Ce n'est pas grave si votre programme a des effets secondaires comme l'ouverture d'un navigateur Web afin que les pages cryptées Google html / js puissent être lues au fur et à mesure qu'elles sont rendues.

  • Vous pouvez utiliser des plugins de navigateur, des scripts utilisateur ...

  • Si vous ne pouvez pas utiliser stdout, imprimez-le à l'écran avec, par exemple. une alerte popup ou javascript!

  • Vous n'avez pas besoin de la ou des http de fin: //

  • Vous ne devez montrer aucun autre lien

  • Le code le plus court gagne!

  • Bonne chance !

EDIT: Ce golf se termine le 07/08/15.


Puisque vous utilisez google.fr, devons-nous également l'utiliser?
Beta Decay

Vous pouvez utiliser n'importe quel Google que vous souhaitez. Je suis français, j'ai donc utilisé .fr, mais vous pouvez utiliser .com ou .anything :) Peu importe
WayToDoor

Et les URL raccourcies, comme gogle.dec'est bien aussi?
Beta Decay

Vous pouvez utiliser des raccourcisseurs d'URL ou d'autres outils de recherche / API tant que les résultats seront les mêmes que pour la recherche sur google.com , alors oui
WayToDoor

6
Au cas où vous seriez tenté: rappelez- vous
Luis Mendo

Réponses:


17

Bash + grep + lynx, 38

Comme nous pouvons ouvrir un navigateur Web, j'utiliserai lynx:

lynx -dump $1|grep -Po '(?<=d:)[^&]+'

(Merci à @manatwork pour l' greputilisation au lieu de sed)

Nous passons l'URL entière en paramètre:

$ ./gr.sh "www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8"
http://stackexchange.com/
https://en.wikipedia.org/wiki/Stack_Exchange
https://twitter.com/stackexchange
https://play.google.com/store/apps/details?id=com.stackexchange.marvin
https://github.com/StackExchange/StackExchange.Redis
https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md
https://www.crunchbase.com/organization/stack-exchange
$ 

Ce qui donne la même liste que:

entrez la description de l'image ici


Eh bien, c'est pratique: D
Beta Decay

3
sedbien. sedlongue. Essayez GNU grep:grep -Po '(?<=d:)[^&]+'
manatwork

@manatwork Oui, bien sûr - merci!
Digital Trauma

1
Le titre de la réponse a-t-il été copypé? ;) Aucun de bash, lynxou sed(et maintenant grep) ne fait partie des coreutils.
manatwork

3
Je pense que vous pouvez aussi faire: lynx -dump $1|grep -Po 'd:\K[^&]+'(non testé)
Jarmex

4

Rubis, 91 77 octets

require'open-uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

Aurait été plus court sans tous les requires. ARGH !!! EDIT : Donc, il s'avère que je ne le fais pas besoin du deuxième besoin! Merci à @manatwork de l'avoir signalé.

Version plus ancienne (avec l'inutile require):

require'open-uri';require 'uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

Les règles permettent d'utiliser des options de ligne de commande tant que vous les comptez aussi: pastebin.com/PnpjnXji (Si vous pensez que c'est un style injuste, n'hésitez pas à utiliser uniquement la modification dans le bloc de code.)
manatwork

Voulez-vous vraiment le faire explicitement require'uri'? Dans 2.1.2 j'utilise le URImodule devient disponible après avoir exigé open-uri.
manatwork

@manatwork Merci! Mis à jour.
kirbyfan64sos

Juste pour ma curiosité: une raison de ne pas changer le bloc de code comme dans mon alternative pastebin? (Bien sûr, je suis curieux de savoir des raisons techniques, pas des raisons personnelles, si cela vous retient.)
manatwork

@manatwork J'en ai besoin, mais j'étais trop paresseux pour comprendre le nombre d'octets pour le moment. :)
kirbyfan64sos

4

Wolfram Language (Mathematica), 135

StringJoin/@(Cases[URLExecute["www.google.com/search",{"q"->#},"XMLObject"],XMLElement["cite",_,l_]:>l,-1]/.XMLElement["b",_,{s_}]:>s)&

plus lisible:

StringJoin/@(Cases[
    URLExecute["www.google.com/search",{"q"->#},"XMLObject"], 
    XMLElement["cite",_,l_]:>l,-1] /. 
    XMLElement["b",_,{s_}]:>s)

Les espaces sont-ils vraiment nécessaires? Sans eux, j'obtiens 136 octets .
kirbyfan64sos

pas nécessaire du tout ... je devrais vraiment resserrer ça ..
chuy

Pouvez-vous faire quelque chose comme cette réponse pour raccourcir cela?
Digital Trauma

3

Python 3, 141 octets

Nulle part près de la réponse de Digital Trauma, mais c'était amusant de travailler sur l'expression régulière: D

import re
print('\n'.join(map(lambda x:x[3:],re.findall('te>http[s]?://\w+\.[a-z]+[](/a-z\.)?]+',__import__("requests").get(input()).text))))

Pour l'entrée, http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8les sorties du programme:

https://en.wikipedia.org/wiki/
https://twitter.com/
https://play.google.com/store/apps/details?id...
https://www.crunchbase.com/organization/
https://www.facebook.com/
https://github.com/

Implémente la pointe de grc


Avez-vous vraiment besoin d'utiliser __import__?
ckjbgames

Utilisez également une [x for x in spam]construction au lieu de map. Cela vous fera économiser un bon nombre d'octets.
ckjbgames

2

Facteur, 31 octets

Il se trouve qu'il y a une bibliothèque pour cela.

[ google-search [ url>> ] map ]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.