Ich fühle mich glücklich

8

Schreiben Sie die kürzeste Funktion, die den Inhalt des ersten Ergebnisses einer Google-Suche zurückgibt ("Ich fühle mich glücklich").

Beispiel:

lucky('cat');

Könnte etwas zurückgeben wie:

<!DOCTYPE html>
<html>
  <head>
    <title>Cats are cool</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <h1>CAAAAAAAAAAATSSSSSSSSSS!!!!!!!!</h1>
    <p>
      Cats are so cool!
    </p>
  </body>
</html>
SteeveDroz
quelle

Antworten:

12

Bash, 46 Bytes

l()(wget -UM -qO- "gogle.de/search?btnI&q=$1")

Verwendet die tatsächliche Funktion " Ich fühle mich glücklich" , genau wie die anderen Antworten.

Gogle führt einige Benutzeragenten (einschließlich WGet, cURL und Java) auf eine schwarze Liste, aber M scheint einwandfrei zu funktionieren.

Dennis
quelle
Warum gibt gogle.dees überhaupt?
3
Tippfehler fangen. googl.dewürde auch funktionieren.
Dennis
2
@professorfish gogle.comexistiert auch. Leitet leider googl.co.ukauf eine zwielichtige Anzeigenseite weiter.
Beta Decay
@BetaDecay Seltsamerweise leitet es mich jedes Mal auf eine andere Seite weiter.
qwr
7

Ruby, 79/145

Ich habe den btnITrick für diese Lösung von @ rink.attendant.6 ausgeliehen. Vielen Dank an Beta Decay für die Verkürzung um 2 Zeichen.

require'open-uri'
f=->q{URI(URI.escape"http://gogle.de/search?btnI&q="+q).read}

Ich habe auch eine Lösung, die tatsächlich das erste Ergebnis von der Ergebnisseite erhält, nämlich 145 Bytes.

require'open-uri'
f=->q{open(URI.extract(URI(URI.escape"http://google.com/search?q=#{q}").read.split('class="r"')[1])[0].split("&amp;")[0]).read}
britishtea
quelle
5

PHP, 157 105/87 102/87 100/85

Verwenden von file_get_contents

<?php function l($q){return file_get_contents("https://google.ca/search?btnI&q=".rawurlencode($q));}

Ohne Leerzeichen im Suchbegriff sind es nur 87 Zeichen:

<?php function l($q){return file_get_contents("https://google.ca/search?q=$q&btnI");}

Originalversionen mit cURL

Ich nehme an, dass die kurze Array-Syntax unter PHP 5.4+ verwendet werden kann:

<?php function l($q){$ch=curl_init("https://google.ca/search?btnI=1&q=".rawurlencode($q));curl_setopt_array($ch,[19913=>1,52=>1]);return curl_exec($ch);}

Andernfalls sind es mit dem normalen Array-Initialisierer 162 weitere Zeichen:

<?php function l($q){$ch=curl_init("https://google.ca/search?btnI=1&q=".rawurlencode($q));curl_setopt_array($ch,[19913=>1,52=>1]);return curl_exec($ch);}

Version, die keine Leerzeichen im Suchbegriff zulässt : Keine URL-Codierung erforderlich (138):

<?php function l($q){$ch=curl_init("https://google.ca/search?q=$q&btnI=1");curl_setopt_array($ch,[19913=>1,52=>1]);return curl_exec($ch);}
Ungolfed mit Konstanten
<?php
function l($q){
$ch = curl_init("https://google.ca/search?btnI=1&q=" . rawurlencode($q));
curl_setopt_array($ch, array(
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_FOLLOWLOCATION => 1
  ));
return curl_exec($ch);
}
rink.attendant.6
quelle
Sie sollten ersetzen können "https://google.ca/search?q=".rawurlencode($q)."&btnI=1"mit"http://google.ca/search?btnI=1&q=".rawurlencode($q)
NinjaBearMonkey
Ich habe
Verwenden Sie SSL aus einem bestimmten Grund?
Dennis
Sie können ersetzen btnI=1mit btnI.
Beta Decay
4

C #, 183 180 178

Dies ist mein erstes Mal, dass ich Code in C # schreibe, sodass er wahrscheinlich verbessert werden könnte. Feedback ist willkommen!

string l(string q){return System.Text.Encoding.UTF8.GetString((new System.Net.WebClient()).DownloadData("https://google.ca/search?btnI&q="+System.Web.HttpUtility.UrlEncode(q)));}

Nicht minimiert

string l(string q) {
    return System.Text.Encoding.UTF8.GetString(
        (new System.Net.WebClient()).DownloadData(
            "https://google.ca/search?btnI&q=" + System.Web.HttpUtility.UrlEncode(q)
        )
    );
}
rink.attendant.6
quelle
1
Sie können einfach 'DownloadString' verwenden und das Codierungsbit vermeiden.
Geoff
3

CJam, 40 Bytes

Ich dachte, ich werde die gMethode endlich ausprobieren

{"gogle.de/search?btnI&q="\S/"%20"*+g}:F

Dies erzeugt eine Methode / einen Block, Fdie wie verwendet werden kann

{"gogle.de/search?btnI&q="\S/"%20"*+g}:F; "cats and dogs"F

So funktionieren Funktionen in CJam.

Funktioniert nicht im Online-Interpreter, daher müssen Sie den Java- Interpreter herunterladen und verwenden .

Beachten Sie, dass Google alle Anfragen mit dem Java-Benutzeragenten ablehnt, sodass Sie CJam mit einem zusätzlichen Flag starten müssen -Dhttp.agent=M

Optimierer
quelle
+1 für CJam und Sie, -1 für Google. Sie geben 403 zurück, wenn der User-Agent Java ist. Ich hoffe, @aditsu wird dies lösen.
Manatwork
@aditsu - Irgendwelche Pläne dafür?
Optimierer
2
Dies funktioniert nur, wenn Sie den Benutzeragenten fälschen, indem Sie z. B. -Dhttp.agent=Man den Java-Interpreter übergeben.
Dennis
2

Python 3 - 78

Wird der gogle.deKürze halber verwendet. Ausführen als f(query).

f=lambda x:__import__("requests").get("http://gogle.de/search?btnI&q="+x).text

Wenn Sie Leerzeichen in Ihrer Abfrage haben möchten, sind es 98 Zeichen.

f=lambda x:__import__("requests").get("http://gogle.de/search?btnI&q="+x.replace(" "," %20")).text
Beta-Zerfall
quelle