Code Golf: Analiza wyników Google

16

Podczas wyszukiwania czegoś w google na stronie wyników użytkownik widzi zielone linki dla pierwszej strony wyników.

W najkrótszej możliwej formie, w bajtach, w dowolnym języku, wyświetl te linki do standardowego wyjścia w formie listy. Oto przykład pierwszych wyników zapytania wymiany stosu:

Zrzut ekranu

Wejście :

wybierasz: URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) lub po prostustackexchange

Wynik :

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

Zasady:

  • Możesz używać skracaczy adresów URL lub innych narzędzi wyszukiwania / interfejsów API, o ile wyniki będą takie same jak w przypadku wyszukiwania na https://www.google.com .

  • Jest ok, jeśli twój program ma skutki uboczne, takie jak otwarcie przeglądarki internetowej, dzięki czemu można odczytać tajemnicze strony HTML / JS podczas renderowania.

  • Możesz używać wtyczek do przeglądarki, skryptów użytkownika ...

  • Jeśli nie możesz użyć standardowego wyjścia, wydrukuj go na ekranie za pomocą np. wyskakujące okienko lub alert javascript!

  • Nie potrzebujesz końcowych / lub początkowych http:

  • Nie powinieneś pokazywać żadnego innego linku

  • Najkrótszy kod wygrywa!

  • Powodzenia !

EDYCJA: Ten golf kończy się 07/08/15.

WayToDoor
źródło
Skoro używasz google.fr, czy my też musimy z tego korzystać?
Rozpad
Możesz użyć dowolnego google. Jestem Francuzem, więc użyłem .fr, ale możesz użyć .com lub .wszystko :) Nieważne
WayToDoor
A skrócone adresy URL, takie jak gogle.desą również w porządku?
Beta Decay
Możesz używać skracaczy URL lub innych narzędzi wyszukiwania / interfejsów API, o ile wyniki będą takie same jak w wyszukiwaniu w google.com , więc tak
WayToDoor
6
Jeśli masz ochotę: pamiętaj, że nie możesz parsować HTML z regex
Luis Mendo

Odpowiedzi:

17

Bash + grep + lynx, 38

Ponieważ możemy otworzyć przeglądarkę internetową, użyję lynx:

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

(Dzięki @manatwork za grepużycie zamiast sed)

Jako parametr przekazujemy cały adres URL:

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

Co daje tę samą listę co:

wprowadź opis zdjęcia tutaj

Cyfrowa trauma
źródło
Cóż, to się przydaje: D
Beta Decay
3
seddobry. seddługo. Spróbuj GNU grep:grep -Po '(?<=d:)[^&]+'
manatwork
@manatwork Tak, oczywiście - dzięki!
Cyfrowa trauma
1
Czy tytuł odpowiedzi został skopiowany? ;) Żaden z bash, lynxalbo sed(a obecnie grep) jest częścią coreutils.
manatwork
3
Wierzę, że możesz także: lynx -dump $1|grep -Po 'd:\K[^&]+'(niesprawdzone)
Jarmex
4

Ruby, 91 77 bajtów

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

Byłbym krótszy bez wszystkich requires. ARGH !!! EDYCJA : Okazuje się, że nie potrzebuję drugiego wymagania! Dzięki @manatwork za zwrócenie na to uwagi.

Starsza wersja (z bezużyteczna require):

require'open-uri';require 'uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}
kirbyfan64sos
źródło
Reguły zezwalają na korzystanie z opcji wiersza poleceń, o ile je również policzysz : pastebin.com/PnpjnXji (jeśli uważasz, że jest to niesprawiedliwy styl, możesz użyć tylko zmiany w bloku kodu.)
manatwork
Czy na pewno musisz to zrobić require'uri'? W 2.1.2 używam URImoduł staje się dostępny po wymaganiu open-uri.
manatwork
@manatwork Dziękujemy! Zaktualizowano
kirbyfan64sos
Tylko z mojej ciekawości: czy jest jakiś powód, aby nie zmieniać bloku kodu, jak w mojej alternatywie pastebin? (Oczywiście jestem ciekawy przyczyn technicznych, a nie osobistych, jeśli to cię powstrzymuje.)
manatwork
@manatwork Muszę, ale byłem zbyt leniwy, aby w tej chwili obliczyć liczbę bajtów. :)
kirbyfan64sos
4

Wolfram Language (Mathematica), 135

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

bardziej czytelny:

StringJoin/@(Cases[
    URLExecute["www.google.com/search",{"q"->#},"XMLObject"], 
    XMLElement["cite",_,l_]:>l,-1] /. 
    XMLElement["b",_,{s_}]:>s)
chuy
źródło
Czy miejsca są naprawdę potrzebne? Bez nich mam 136 bajtów .
kirbyfan64sos
wcale nie konieczne ... Naprawdę powinienem to zaostrzyć ...
chuy
Można zrobić coś jak to odpowiedź na skrócenie tego?
Cyfrowa trauma
3

Python 3, 141 bajtów

Nigdzie w pobliżu odpowiedzi Digital Trauma, ale fajnie było opracować 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))))

Do wprowadzania http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8wyjścia programu:

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/

Realizuje wskazówkę grc

Rozpad beta
źródło
Czy naprawdę potrzebujesz użyć __import__?
ckjbgames
[x for x in spam]Zamiast tego użyj konstrukcji map. To pozwoli ci zaoszczędzić sporo bajtów.
ckjbgames
2

Współczynnik, 31 bajtów

Zdarza się, że jest do tego biblioteka.

[ google-search [ url>> ] map ]
kot
źródło