Codice Golf: analisi dei risultati di Google


16

Quando cerchi qualcosa su google, all'interno della pagina dei risultati, l'utente può vedere i collegamenti verdi, per la prima pagina dei risultati.

Nella forma più breve possibile, in byte, usando qualsiasi lingua, visualizza quei collegamenti a stdout sotto forma di un elenco. Ecco un esempio, per i primi risultati della query di scambio di stack:

Una cattura dello schermo

Input:

tu scegli: l'URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) o solostackexchange

Produzione :

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

Regole :

  • Puoi utilizzare abbreviazioni di URL o altri strumenti di ricerca / API purché i risultati siano gli stessi della ricerca https://www.google.com .

  • Va bene se il tuo programma ha effetti collaterali come l'apertura di un browser web in modo che le criptiche pagine html / js di Google possano essere lette mentre vengono visualizzate.

  • È possibile utilizzare plugin del browser, script utente ...

  • Se non è possibile utilizzare stdout, stamparlo sullo schermo con, ad es. un avviso popup o javascript!

  • Non è necessario il / i finale / i iniziale / i: //

  • Non dovresti mostrare nessun altro link

  • Vince il codice più corto!

  • In bocca al lupo !

EDIT: questo golf termina il 07/08/15.


Dal momento che stai usando google.fr, dobbiamo usare anche quello?
— Decadimento beta

Puoi usare qualsiasi google desideri. Sono francese, quindi ho usato .fr, ma potresti usare .com o .thingthing :) Non importa
— WayToDoor

E anche gli URL abbreviati gogle.devanno bene?
— Decadimento beta

Puoi utilizzare abbreviazioni di URL o altri strumenti di ricerca / API purché i risultati siano gli stessi della ricerca su google.com , quindi sì
— WayToDoor

Risposte:


17

Bash + grep + lynx, 38

Dal momento che possiamo aprire un browser Web, userò lynx:

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

(Grazie a @manatwork per l' greputilizzo anziché sed)

Passiamo l'intero URL come parametro:

$ ./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
$ 

Che fornisce lo stesso elenco di:

inserisci qui la descrizione dell'immagine


Bene, è utile: D
— Decadimento beta

3
sedbene. sedlungo. Prova GNU grep:grep -Po '(?<=d:)[^&]+'
— manatwork

@manatwork Sì, certo - grazie!
— Trauma digitale

1
Il titolo della risposta è stato copypasted? ;) Nessuno dei bash, lynxo sed(e ora grep) fa parte dei coreutils.
— manatwork

3
Credo che tu possa anche fare: lynx -dump $1|grep -Po 'd:\K[^&]+'(non testato)
— Jarmex

4

Rubino, 91 77 byte

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

Sarebbe stato più corto senza tutte le requires. ARGH !!! EDIT : Quindi, risulta, non ho bisogno del secondo requisito! Grazie a @manatwork per averlo sottolineato.

Versione precedente (con l'inutile require):

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

Le regole consentono l'uso delle opzioni della riga di comando fino a quando le conti anche tu: pastebin.com/PnpjnXji (Se ritieni che questo sia uno stile sleale, sentiti libero di usare solo la modifica nel blocco di codice.)
— manatwork

Sei sicuro di aver bisogno esplicitamente require'uri'? In 2.1.2 uso il URImodulo diventa disponibile dopo aver richiesto open-uri.
— arte

@manatwork Grazie! Aggiornato.
— Kirbyfan64sos,

Solo per mia curiosità: qualche motivo per non cambiare il blocco di codice come nella mia alternativa a pastebin? (Naturalmente, io sono curioso di motivi tecnici, non motivi personali, se questo ti trattengono.)
— manatwork

@manatwork Ho bisogno di, ma ero troppo pigro per capire il conteggio dei byte al momento. :)
— kirbyfan64sos

4

Wolfram Language (Mathematica), 135

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

più leggibile:

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

Gli spazi sono davvero necessari? Senza di essi, ottengo 136 byte .
— Kirbyfan64sos,

non è affatto necessario ... dovrei davvero stringere questo ..
— chuy

Puoi fare qualcosa come questa risposta per abbreviarla?
— Trauma digitale

3

Python 3, 141 byte

In nessun posto vicino alla risposta di Digital Trauma, ma è stato divertente elaborare la regex: 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))))

Per inserire http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8le uscite del programma:

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/

Implementa il consiglio di grc


Hai davvero bisogno di usare __import__?
— ckjbgames

Inoltre, utilizzare un [x for x in spam]costrutto anziché map. Ciò ti farà risparmiare un buon numero di byte.
— ckjbgames

2

Fattore, 31 byte

C'è una biblioteca per questo.

[ google-search [ url>> ] map ]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.