Showing posts with label curl. Show all posts
Showing posts with label curl. Show all posts

Apr 21, 2011

Rövidített URL feloldása

Tegnap az egyik hobbi projektem fejlesztése során belefutottam abba az esetbe, hogy nem elég a böngészőm címsorába bemásolni a rövidített - vélhetően izgalmas dolgokat tartalmazó - url-t, hanem programkódból is szükségem volt annak feloldására, kiterjesztésére. Nézzük is meg, hogy mire jutottam az általam kreált feladattal, milyen megoldásokat találtam (amennyiben tudtok jobb megoldást, api-t várom őket kommentekben).

A kiszemelt rövidített url, amely feloldásra vár legyen a következő: http://goo.gl/NOgUV Sebesség mérésként, pedig 5 egymás utáni futás átlagértékét veszem figyelembe.

Kezdetnek nézzünk egy nagyon egyszerű megoldást. A get_headers függvény segít nekünk úgy, hogy egy http kérést indítva a megadott url-re visszaadja nekünk a kapott válasz headerjét. A válaszból szimplán kivesszük a Location kulcs-hoz tartozó értéket és már kész is vagyunk (érdemes a függvény $format paraméterét 0-tól különböző értékre állítani, így kulcs-érték párokba szervezi a header tartalmat).
Futási idő: ~0.9s

Egy másik "brute force" módszer, hogy Curl-al lekérjük az oldalt, majd az átviteli információk-ból szűrjük le a számunkra szükséges url-t.
Futási idő: ~0.76s



Szerencsére rendelkezésre állnak különböző api-k is, melyekkel jóval gyorsabban jutunk eredményre. Ezek közül kettőre pillantunk rá: Google URL Shortener API, LongURL . Működésükről annyit, hogy egy megadott - paraméterezhetőséget biztosító - uri-ra kell ellátogatni, hogy feloldhassuk a rövidített url-t. A megfelelő url kiemenete valamilyen formában (json, xml...) a kiterjesztett url és néhány egyéb adat.
Php alól ezen adatok beolvasására lehetőségünk van például a file_get_contents vagy a fopen függvénnyel. Az említett függvényeknél viszont kreálhatunk egy gyorsabbat is, amennyiben lehetőségünk van a Curl használatára.



Végül, túllépve az adatok beolvasásán jöjjön a két api hívás:


Futási idő: ~0.26s


Futási idő: ~0.21s

A Google feloldója nyilván csak a Google által rövidített url-eket fogja tudni kiterjeszteni, ezzel szemben a LongURL API sok-sok domain-t ismer.