Kısaltılmamış Google Bağlantıları


10

Meydan okuma

Geçerli bir goo.glkısaltılmış bağlantı verildiğinde orijinal URL'yi çıktılayın.

Misal

goo.gl/qIwi3Ngibi bir şey verirdi https://codegolf.stackexchange.com/. Girdi için, https?://başında olmasını seçebilirsiniz, daha www.önce sahip olmayı seçebilirsiniz goo.glve ayrıca goo.glyalnızca URL'nin sonunu istiyorsanız, kurtulmayı da seçebilirsiniz . Giriş ve çıkış için uçtaki bir eğik çizgi isteğe bağlıdır. Böylece, girişiniz normal ifadeyle eşleşecektir (https?://)?(www\.)?(goo\.gl/)?[A-Za-z0-9]+/?. Çıktı için, çıktı alıp almayacağınızı, çıktı https?://alıp almayacağınızı www.ve bir eğik çizgi çıkıp çıkmayacağını seçebilirsiniz . Ancak, G / Ç biçimlendirmenizle tutarlı olmanız gerekir .

Sana ile tutarlı olması gerekmez diyecekler httpsvs. httpsürece sen bütün dahil olsun veya olmasın tutarlı olarak, çıkış için (ama giriş için tutarlı olmalıdır) https?://parçasını.

Test Durumları

Bunlar girişte hayır https://, hayır www., yok eğik çizgi ile yazılmıştır ; evet https://, hayır www.ve evet çıkışta eğik çizgi var.

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

Varsayımlar

  • Kısaltılmış bağlantının başka bir kısaltılmış bağlantıya işaret etmeyeceğini ve hedef sitenin durum kodunu döndüreceğini 2xxveya 4xx(yeniden yönlendirme yapılmayacağını) varsayabilirsiniz .

Buraya gidebilir ve bunun ters işlemini uygulamak için bir URL girebilirsiniz: https://goo.gl/


@HelkaHomba sabit
Pavel

3
Hava durumu veya notr önde gelen çıkış www.için fark yaratır. Çoğu durumda aynı sunucudur. Örneğin deneyin http://pks.mpg.deve http://www.pks.mpg.de. Birincisi çözülemezken ikincisi çözülebilir.
Golar Ramblar

@StephenS Yapıldı, öneri için teşekkürler.
HyperNeutrino

Yanıtlar:


11

CJam , 7 bayt

lg'"/5=

Test sürüşü

$ 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

Nasıl çalışır

lgSTDIN'den bir satır okur ve bu URL'ye bir GET isteği gönderir. Kısaltılmış URL, CJam'ın takip etmediği bir 301 yönlendirmesi yayınlar. İlk test durumu için, bu

<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>

yığını. Son olarak, '"/çift ​​tırnak işaretleri ayrılır ve 5=altıncı yığın alır. Çıktı örtük.


1
05AB1E ve Pyth'i denedim, ikisi de 301'i takip ediyor :(
Outgolfer Erik

3

Python 2 + istekleri, 44 bayt

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

requests.get(URL)belirtilen URL'ye bir GET isteği gönderir. Yanıt nesnesinin urlalanı, herhangi bir yönlendirmeden sonra nihai URL'yi içerir. Giriş için bir protokol (örn. http://) Gereklidir ve girişin tırnak içinde olması beklenir.


1
requestsyerleşik değildir, bu nedenle dil başlığına eklenmesi gerekir.
numbermaniac

1
lambda-3 bayt için ifade kullanın
ovs,

1
@numbermaniac Hatalı mesajlar, haklısın, üçüncü parti bir lib olduğunu unutmam için isteklere çok alıştım.
Mego

2

Bash , 28 24 bayt

curl -I $1|grep -oehtt.*

Çıktı, kabul edilebilir olduğunu düşündüğüm Windows tarzı bir satırsonu ile bitiyor.

Test sürüşü

$ 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

Nasıl çalışır

curl -Ibir HEAD isteği gönderir, böylece yalnızca belirtilen URL'nin HTTP üstbilgilerini alır. İlk test durumu için yazdırılır

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

veya benzeri. Çıktıya grep -oehtt.*, yalnızca belirtilen normal ifadeyle eşleşen parçaları, yani htt dizesini ve ardından satırın sonuna kadar herhangi bir miktarda karakteri görüntüleyen kanal verilir .


Bu nasıl çalışıyor?
Arjun

Bir açıklama ekledim.
Dennis

Hehe, iyi açıkladı! Bu şekilde yakında bash öğreneceğim :-D

Bu, joker karakter genişletmeyi gerçekleştirir, htt.*bu nedenle geçerli dizinde eşleşen hiçbir dosyanın olmadığını varsayar. Çoğu regexes için, bu sitede bir dosya eşleşme olasılığının iyi olacak kadar küçük olduğunu kabul ediyorum, ama bu durumda, kendim öyle düşünmüyorum. Linux çekirdeği kaynak kodu, örneğin htt.cve adlı dosyaları içerir htt.h. Bunu değiştirmek grep -oehtt.*bayt sayısını arttırmaz, ancak sorunlara neden olma olasılığını önemli ölçüde azaltır.
hvd

@hvd Genellikle programın başka türlü boş bir dizinde çalıştırıldığını varsayıyorum, ancak programı -oehtt.*daha güvenilir hale getirmek için güzel bir yol.
Dennis

2

PHP, 36 Bayt

İle giriş https://

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

get_headers

Location: Başlangıçta 25 bayt kaldırılmaması gerekir

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

Google HTTP Üstbilgisini değiştirirse, burada daha güvenli bir sürümdür

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

1

Python 2 , 43 bayt

Bağımlılığı yoktur ve şu anda diğer Python cevabından daha kısadır. shrug Girişi eşleşmelidirhttps?://goo\.gl/.*?/?

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

0

NodeJS, 60 bayt

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

Girdi biçimindedir http://goo.gl/<id>.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.