Code Golf: Analysieren von Google-Ergebnissen

16

Wenn Sie auf Google nach etwas suchen, werden dem Nutzer auf der Ergebnisseite grüne Links für die erste Ergebnisseite angezeigt.

Zeigen Sie die Links zu stdout in Form einer Liste in der kürzestmöglichen Form in Bytes und in einer beliebigen Sprache an. Hier ist ein Beispiel für die ersten Ergebnisse der Stapelaustauschabfrage:

Ein Screenshot

Eingabe:

Sie wählen: die URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) oder nurstackexchange

Ausgabe :

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

Regeln:

  • Sie können URL-Kürzel oder andere Suchwerkzeuge / APIs verwenden, sofern die Ergebnisse mit der Suche unter https://www.google.com übereinstimmen .

  • Es ist in Ordnung, wenn Ihr Programm Nebenwirkungen wie das Öffnen eines Webbrowsers hat, damit die kryptischen Google-HTML- / JS-Seiten beim Rendern gelesen werden können.

  • Sie können Browser-Plugins, User-Skripte verwenden ...

  • Wenn Sie stdout nicht verwenden können, drucken Sie es mit, z. eine Popup- oder Javascript-Warnung!

  • Du brauchst nicht die Endung / oder die Start-http (s): //

  • Sie sollten keinen anderen Link anzeigen

  • Kürzester Code gewinnt!

  • Viel Glück !

BEARBEITEN: Dieser Golf endet am 08.07.15.

WayToDoor
quelle
google.frMüssen wir das auch verwenden, da Sie es verwenden ?
Beta Decay
Sie können jedes beliebige Google verwenden. Ich bin Franzose, also habe ich .fr benutzt, aber du könntest .com oder .anything benutzen :) Egal
WayToDoor
Und verkürzte URLs wie gogle.desind auch in Ordnung?
Beta Decay
Sie können URL Shortener oder andere Suchmaschinen / APIs verwenden , solange die Ergebnisse die gleichen wie die Suche würde google.com , also ja
WayToDoor
6
Falls Sie in Versuchung sind: Denken Sie
Luis Mendo

Antworten:

17

Bash + Grep + Luchs, 38

Da wir einen Webbrowser öffnen können, verwende ich lynx:

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

(Danke an @manatwork für die grepVerwendung anstelle von sed)

Wir übergeben die gesamte URL als Parameter:

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

Welches gibt die gleiche Liste wie:

Bildbeschreibung hier eingeben

Digitales Trauma
quelle
Gut, das ist praktisch: D
Beta Decay
3
sedgut. sedlange. Probieren Sie GNU grep:grep -Po '(?<=d:)[^&]+'
manatwork 31.07.15
@manatwork Ja, natürlich - danke!
Digital Trauma
1
Wurde der Antworttitel kopiert? ;) Keiner von bash, lynxoder sed(und jetzt grep) ist Teil von coreutils.
Manatwork
3
Ich glaube, Sie können auch: lynx -dump $1|grep -Po 'd:\K[^&]+'(ungetestet)
Jarmex
4

Ruby, 91.77 Bytes

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

Wäre ohne all die requires kürzer gewesen . ARGH !!! EDIT : Also, stellt sich heraus, ich brauche nicht die zweite Voraussetzung! Vielen Dank an @manatwork für den Hinweis.

Ältere Version (mit dem Nutzlosen require):

require'open-uri';require 'uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}
kirbyfan64sos
quelle
Regeln erlauben die Verwendung von Befehlszeilenoptionen, solange Sie sie auch zählen: pastebin.com/PnpjnXji (Wenn Sie dies für unfair halten, können Sie nur die Änderung im Codeblock verwenden.)
manatwork
Müssen Sie das wirklich explizit tun require'uri'? In 2.1.2 Ich benutze das URIModul wird verfügbar, nachdem open-uri benötigt wird.
Manatwork
@manatwork Danke! Aktualisiert.
kirbyfan64sos
Nur aus Neugier: Gibt es einen Grund, den Codeblock nicht wie in meiner Pastebin-Alternative zu ändern? (Natürlich bin ich neugierig auf technische Gründe, nicht auf persönliche Gründe, wenn dich das
zurückhält
@manatwork muss ich, aber ich war zu faul, um die Anzahl der Bytes im Moment herauszufinden. :)
kirbyfan64sos
4

Wolfram Language (Mathematica), 135

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

besser lesbar:

StringJoin/@(Cases[
    URLExecute["www.google.com/search",{"q"->#},"XMLObject"], 
    XMLElement["cite",_,l_]:>l,-1] /. 
    XMLElement["b",_,{s_}]:>s)
chuy
quelle
Sind die Räume wirklich notwendig? Ohne sie bekomme ich 136 Bytes .
kirbyfan64sos
überhaupt nicht notwendig ... ich sollte das wirklich verschärfen ..
chuy
Können Sie so etwas wie diese Antwort tun , um dies zu verkürzen?
Digitales Trauma
3

Python 3, 141 Bytes

Nirgendwo in der Nähe von Digital Traumas Antwort, aber es hat Spaß gemacht, den regulären Ausdruck herauszufinden: 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))))

Zur Eingabe gibt http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8das Programm aus:

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/

Implementiert den Tipp von grc

Beta-Zerfall
quelle
Müssen Sie wirklich verwenden __import__?
ckjbgames
Verwenden Sie [x for x in spam]stattdessen auch ein Konstrukt map. Das spart Ihnen eine gute Anzahl von Bytes.
ckjbgames
2

Faktor 31 Bytes

Hierfür gibt es zufällig eine Bibliothek.

[ google-search [ url>> ] map ]
Katze
quelle