Unshorten Google Links


10

Wyzwanie

Podając prawidłowy goo.glskrócony link, wyślij oryginalny adres URL.

Przykład

goo.gl/qIwi3Ndałby coś takiego https://codegolf.stackexchange.com/. W przypadku danych wejściowych możesz wybrać opcję https?://na początku, możesz wybrać opcję www.przed goo.gl, a także możesz pozbyć się tego, goo.gljeśli chcesz tylko końca adresu URL. Ukośnik na końcu jest opcjonalny dla wejścia i wyjścia. Tak więc twoje dane wejściowe będą pasować do wyrażenia regularnego (https?://)?(www\.)?(goo\.gl/)?[A-Za-z0-9]+/?. W przypadku danych wyjściowych możesz wybrać, czy chcesz wypisać https?://, czy nie www., i czy wypisać ukośnik końcowy. Jednak trzeba być zgodne z formatowania I / O .

Powiem, że nie musisz być spójny z httpsvs. httpdla danych wyjściowych (ale musisz być konsekwentny dla danych wejściowych), o ile jesteś zgodny z tym, czy uwzględnisz całą https?://część.

Przypadki testowe

Są one zapisywane bez wejściowego ukośnika; https://nie www., nie; tak https://, nie www.i tak końcowy ukośnik na wyjściu.

input -> output
goo.gl/HaE8Au -> https://codegolf.stackexchange.com/
goo.gl/IfZMwe -> https://stackoverflow.com/
goo.gl/JUdmxL -> https://chat.stackexchange.com/rooms/240/the-nineteenth-byte

Założenia

  • Możesz założyć, że skrócony link nie będzie wskazywał na inny skrócony link i że witryna docelowa zwróci kod statusu 2xxlub 4xx(brak przekierowań).

Możesz przejść tutaj i wprowadzić adres URL, aby zastosować odwrotną operację: https://goo.gl/


@HelkaHomba naprawiono
— Pavel

3
Pogoda lub notr na wyjście z wyprzedzeniem www.robi różnicę. W większości przypadków jest to ten sam serwer, do którego się odnosi. Spróbuj na przykład http://pks.mpg.dei http://www.pks.mpg.de. Pierwszego nie można rozwiązać, podczas gdy drugiego można.
— Golar Ramblar

@StephenS Gotowe, dziękuję za sugestię.
— HyperNeutrino

Odpowiedzi:


11

CJam , 7 bajtów

lg'"/5=

Testowe uruchomienie

$ alias cjam
alias cjam='java -jar ~/.local/share/cjam-0.6.5.jar'
$ cjam unshorten.cjam <<< goo.gl/HaE8Au; echo
https://codegolf.stackexchange.com/
$ cjam unshorten.cjam <<< goo.gl/IfZMwe; echo
https://stackoverflow.com/
$ cjam unshorten.cjam <<< goo.gl/JUdmxL; echo
https://chat.stackexchange.com/rooms/240/the-nineteenth-byte

Jak to działa

lgodczytuje wiersz ze STDIN i wysyła żądanie GET do tego adresu URL. Skrócony adres URL powoduje przekierowanie 301, którego CJam nie przestrzega. W przypadku pierwszego przypadku testowego popycha to

<HTML>
<HEAD>
<TITLE>Moved Permanently</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Permanently</H1>
The document has moved <A HREF="https://codegolf.stackexchange.com/">here</A>.
</BODY>
</HTML>

na stosie. Wreszcie '"/dzieli się na podwójne cudzysłowy i 5=otrzymuje szósty fragment. Wynik jest niejawny.


1
Próbowałem 05AB1E i Pyth, oba podążają za 301 :(
— Erik the Outgolfer

3

Żądania w języku Python 2 +, 44 bajty

from requests import*
print get(input()).url

requests.get(URL)wysyła żądanie GET na podany adres URL. Pole obiektu odpowiedzi urlzawiera końcowy adres URL, po przekierowaniach. Protokół (np. http://) Jest wymagany dla danych wejściowych i oczekuje się, że dane wejściowe będą w cudzysłowach.


1
requestsnie jest wbudowany, więc należy go dodać do nagłówka języka.
— numbermaniac

1
Użyj lambdawyrażenia dla -3 bajtów
— ovs

1
@numbermaniac Ups, masz rację, tak przyzwyczajam się do próśb, że zapominam, że to lib strony trzeciej.
— Mego

2

Bash , 28 24 bajtów

curl -I $1|grep -oehtt.*

Wyjście kończy się znakiem nowej linii w stylu Windows, który, jak zakładam, jest do przyjęcia.

Testowe uruchomienie

$ bash unshorten.sh 2>&- goo.gl/HaE8Au
https://codegolf.stackexchange.com/
$ bash unshorten.sh 2>&- goo.gl/IfZMwe
https://stackoverflow.com/
$ bash unshorten.sh 2>&- goo.gl/JUdmxL
https://chat.stackexchange.com/rooms/240/the-nineteenth-byte

Jak to działa

curl -Iwysyła żądanie HEAD, więc pobiera tylko nagłówki HTTP określonego adresu URL. W przypadku pierwszego przypadku testowego zostanie wydrukowane

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Sat, 13 May 2017 05:51:48 GMT
Location: https://codegolf.stackexchange.com/
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding

lub podobne. Dane wyjściowe są przesyłane potokowo do grep -oehtt.*, w którym są wyświetlane tylko części pasujące do określonego wyrażenia regularnego, tj. Ciąg htt, po którym następuje dowolna liczba znaków do końca wiersza.


Jak to działa?
— Arjun

Dodałem wyjaśnienie.
— Dennis

Hehe, dobrze wyjaśnione! W ten sposób wkrótce nauczę się bash :-D

Powoduje to rozwinięcie symboli wieloznacznych na, htt.*więc zakłada, że ​​w bieżącym katalogu nie ma żadnych pasujących plików. W przypadku większości wyrażeń regularnych zgodziłbym się na tej stronie, że możliwość dopasowania pliku jest na tyle mała, że ​​jest w porządku, ale w tym przypadku sam tak nie uważam. Kod źródłowy jądra systemu Linux zawiera na przykład pliki o nazwach htt.ci htt.h. Zmiana go na grep -oehtt.*nie zwiększa liczby bajtów, ale znacznie zmniejsza prawdopodobieństwo wystąpienia problemów.
— hvd

@hvd Zazwyczaj zakładam, że program działa w innym pustym katalogu, ale -oehtt.*jest to dobry sposób na zwiększenie jego niezawodności.
— Dennis

2

PHP, 36 bajtów

Wprowadź za pomocą https://

<?=substr(get_headers($argn)[7],10);

get_headers

25 bajtów, jeśli Location: na początku nie można ich usunąć

<?=get_headers($argn)[7];

jeśli Google zmieni nagłówek HTTP, tutaj jest bezpieczniejsza wersja

preg_match("#Location: \K.*#",join("\n",get_headers($argn)),$t);echo$t[0];

1

Python 2 , 43 bajty

Nie ma zależności i jest obecnie krótszy niż inna odpowiedź w języku Python. wzruszenie ramion Dane wejściowe muszą być zgodnehttps?://goo\.gl/.*?/?

lambda s:urlopen(s).url
from urllib import*

0

NodeJS, 60 bajtów

u=>require("http").get(u,r=>console.log(r.headers.location))

Dane wejściowe są w formacie http://goo.gl/<id>.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.