WordPress – zisťovanie štatistík návštevnosti – nedokumentované API

Pravidelní čitatelia tohto blogu možno vedia, že už dlhší čas pracujem na programe pre správu blogov založených na systéme WordPress. A včera sa mi prakticky nedopatrením podarilo objaviť nedokumentované možnosti zisťovania štatistík návštevnosti.

Začnem trochu okľukou – pred niekoľkými dňami som na svojom mobilnom telefóne HTC HD2 prešiel na operačný systém Google Android 2.3. Medzi inými som si stiahol aj aplikáciu WordPress for Android, aby som mal svoj blog neustále po ruke. Trochu ma ale prekvapilo, že táto aplikácia (z dielne samotného WordPress-u) dokáže zobrazovať aj štatistiky návštevnosti blogu. Prekvapilo ma to hlavne preto, že presne túto funkciu som chcel vo svojej aplikácii použiť aj ja, no nedokázal som nájsť nijaké API (Application Programming Interface), ktoré by mi to umožňovalo.

Môj “workaround”

Problém som teda vyriešil pomocou HTML scrapingu – moja aplikácia sa prihlásila do webového administračného rozhrania blogu, tam načítala stránku so štatistikami a následne analyzovala jej HTML kód. Ide o veľmi škaredé a hrubé riešenie, ale fungovalo. Jednou z jeho najväčších nevýhod však bola rýchlosť – tento postup zabral na mojom internetovom pripojení približne 16,5 sekundy (priemer z piatich meraní).

Hľadá sa endpoint

Ale späť k aplikácii pre Android. Ak oficiálna WordPress aplikácia dokáže zobraziť štatistiky, znamená to, že niekde musí fungovať API, ktoré umožňuje ich zisťovanie. Nikde však neexistuje jeho dokumentácia, čo je problém. Takže ako tento API endpoint nájsť? Po prehľadaní vývojárskych fór pre danú aplikáciu som našiel adresu, ktorá sa na zisťovanie štatistík používa: stats.wordpress.com/csv.php. Po preštudovaní tejto stránky však moje nadšenie ochladlo – na úspešné načítanie štatistík musí moja aplikácia poznať užívateľov tajný API kľúč.

A tento API kľúč žiadna z mne známych (rozumej “dokumentovaných”) API metód nevracia. A tak sa úloha “Ako nájsť API endpoint pre zisťovanie štatistík?” zmenila na úlohu “Ako nájsť API endpoint na zistenie užívateľovho API kľúča?”. V tomto prípade už mi čítanie fór ani Google nepomohli. Ak ale WordPress for Android dokáže zobraziť štatistiky, musí vedieť získať aj užívateľov API kľúč. Takže v nej niekde musí byť zakomponovaný hľadaný endpoint!

Dekompilácia APK súboru

Aby som sa k nemu dopracoval, musel som sa pozrieť dovnútra aplikácie pre Android. Na to som potreboval jej inštalačný balíček a nástroj, ktorý dokáže tento balíček previesť na aspoň trochu čitateľný kód. Inštalátor som získal jednoducho – vytiahol som ho priamo zo svojho telefónu pomocou Android SDK. Vysvitlo, že ide prakticky o ZIP archív, ktorý obsahuje programové komponenty, hlavne súbor s príponou DEX, ktorý obsahuje kompilovaný kód. Po krátkom hľadaní som našiel nástroj baksmali (súčať projektu smali), ktorý tento kód dokáže previesť na tzv. Dalvik Bytecode (niečo ako kód skompilovaný len do polovice cesty – presnejšie ide o sadu inštrukcií pre Dalvik Virtual Machine, čo je virtuálny stroj v prostredí Android).

Jediné, čo zostávalo, bolo nájsť hľadaný API endpoint v tomto byte-kóde. To už veľa času nezabralo a na svetlo sveta vypadla adresa “public-api.wordpress.com/getuserblogs.php“. Podotýkam, že o tejto adrese nezistil prakticky nič ani Google. Stránka vyžaduje HTTP Basic Authentication (meno a heslo WordPress účtu) a vracia XML odpoveď obsahujúcu užívateľov API kľúč, plus ďalšie (pre mňa nepodstatné) údaje. A bolo vymaľované.

Záver

Chvíľa experimentovania s týmito dvomi API endpointmi a podarilo sa mi vyrobiť nový engine na zisťovanie štatistík návštevnosti. Po zmeraní výkonu tohto nového riešenia som neveril vlastným očiam – výsledný čas (priemer z piatich meraní) bol 2999 milisekúnd. To predstavuje zrýchlenie o vyše 80%!

Stále však nerozumiem, prečo WordPress tieto (a určite aj ďalšie) endpointy nikde nedokumentuje – tu vonku sú vývojári, ktorí by tieto informácie nadšene uvítali.

EDIT 16.2.2011 22:40

Aplikácia WordPress for Android je open source (GPL) – hľadaný endpint pre získanie API kľúča je preto možné nájsť priamo vo voľne prístupnom zdrojovom kóde. Tiež mi to mohlo napadnúť skôr 😀 Nič to, aspoň som sa zase niečo nové naučil…

Reklamy

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa / Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa / Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa / Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Odhlásiť sa / Zmeniť )

Connecting to %s