Krajšie riešenie v PHP

Programovacie jazyky, rady, poradňa...
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Krajšie riešenie v PHP

Príspevok od používateľa weroro »

Ahoj,

napísal som si takú to škaredú vec:

Kód: Vybrať všetko

// $limit = 31536000 (účet musí byť starší ako jeden rok)
function checkAzetUser ($mail, $limit = 31536000)
{
    $reqCode = 0; // Preddefinovaná hodnota return
    $nick = explode('@', $mail); // Vytiahnutie prezývky z mailovej adresy 
    $obsah = file_get_contents('http://pokec.azet.sk/' . $nick[0]); // Načítanie profilu užívateľa

    // V načítanom obsahu vyhľadám title, v ktorom sa nachádza text registrovan    
    if (preg_match_all('/(title)=("registrovan[^"]*")/i', $obsah, $title))
    {
        preg_match_all('/(\d{1}|\d{2}).(\d{1}|\d{2}).(\d{4})/', str_replace(' ', '', $title[0][0]), $datum); // Z daného title vytiahnem dátum
        $date = new DateTime($datum[0][0]); // Vytvorím objekt date so vstupom nájdeného dátumu
        $vekUctu = time() - $date->format("U"); // Konvertnem výstup na UnixTime a odpočítam ho od aktuálneho unixTime, čím dostanem vek účtu v unix formáte
        if ($vekUctu >= $limit) $reqCode = 2; // Účet je starší alebo sa rovná limitu (spĺňa požiadavku)
        else $reqCode = 3; // Účet je mladší ako limit (nespĺňa požiadavku)
    }
    else $reqCode = 1; // Účet neexistuje (nespĺňa požiadavku)
    
    return $reqCode;
} 
Slúži to na overenie veku účtu na pokeci zo zadaného mailu.
Vedeli by ste sa mi na to pozrieť a poprípade napísať ako by sa to dalo krajšie vyriešiť?

Vďaka
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Krajšie riešenie v PHP

Príspevok od používateľa audiotrack »

keď to berieš z title, zbytočne ťahať celú stránku. Existuje funkcia get_meta_tags(). Tým ušetríš traffic, a aj si vyparsuješ title. Resp spraví to za teba. A ten $reqCode je ti zbytočný, rovno tam môžeš hádzať return. Kľudne aj v tej podmienke. To ti ukončí vykonávanie funkcie

//autoeditácia príspevku (07 Okt 2013, 15:21)
jo aha, ty to nebereš z title :D Tak nič, asi som prepracovaný
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Krajšie riešenie v PHP

Príspevok od používateľa weroro »

Super, dík za pripomienku s tými podmienkami.

Kód: Vybrať všetko

// $limit = 31536000 (účet musí byť starší ako jeden rok | jeden rok prevedený na unix formát)
function isAzetAccountYoung ($azetMail, $limit = 31536000)
{
    // Vytiahnutie prezývky z mailovej adresy 
    $nick = explode('@', $azetMail);
    // Načítanie profilu užívateľa
    $obsah = file_get_contents('http://pokec.azet.sk/' . $nick[0]);
    // V načítanom obsahu vyhľadám title, v ktorom sa nachádza text registrovan    
    if (preg_match_all('/(title)=("registrovan[^"]*")/i', $obsah, $title))
    {
        // Z daného title vytiahnem dátum
        preg_match_all('/(\d{1}|\d{2}).(\d{1}|\d{2}).(\d{4})/', str_replace(' ', '', $title[0][0]), $datum);
        // Vytvorím objekt date so vstupom nájdeného dátumu
        $date = new DateTime($datum[0][0]);
        // Konvertnem výstup na UnixTime a odpočítam ho od aktuálneho unixTime, čím dostanem vek účtu v unix formáte
        $vekUctu = time() - $date->format("U");
        // ? Účet je starší alebo sa rovná limitu (spĺňa požiadavku)
        // : Účet je mladší ako limit (nespĺňa požiadavku)
        return ($vekUctu >= $limit) ? 1 : 2;
    }
    // Účet neexistuje (nespĺňa požiadavku)
    return 0;
} 
Napadá ma ešte vycibriť tie reguláre (strčiť to do jedného), viete pomôcť? To čo tam vidíte je moje maximum ohľadne regex. :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Krajšie riešenie v PHP

Príspevok od používateľa BX »

Ak pozerám správne na ten kód azetu, regex by mohol byť len nejako takto (z hlavy)

Kód: Vybrať všetko

/Registrovaný od (\d+)\.\s+(\d+)\.\s+(\d+)\"\>Na Pokeci (\d+) rokov/
Ten koniec by tam ani nemusel byť, ak si to dopočítaš z dátumu. A stačí ti prvý výskyt, je tam jediný (alebo aspoň určite je vždy prvý)

// jo tam je aj registrovaná... tak to ý kľudne daj ako (ý|á) A maj správne nastavené kódovanie.
Napísať odpoveď