Cb Rank

Nesci 07.06.05 17:11

Funktio joka hakee clanbasesta claanisi rankin ja pisteet. 2 eri versiota.

 Tekstiversio  Arvo: -7 (7 ääntä)  Äänestä: +  -
<?php

/*
Muodostetaan funktio joka hakee claanin rankin ja pisteet clanbasesta
Muuttujat:
cid on claanin id
lid on ladderin id
Made by Nesci
*/

function cbRank($cid, $lid) {
        /* Avataan sivu lukua varten */
        $filu = "http://www.clanbase.com/claninfo.php?wars=1&cid=$cid&lid=$lid";
        $fp = fopen($filu,'r');
        $tulos = '';
        /* Luetaan sivun sisältö */
        while (!feof($fp)) {
                $tulos .= fread($fp, 8192);
        }
       
        /* Laitetaan kiinni */
        fclose($fp);

        /* Katsotaan löytyykö sivulta Rank */
        if(strstr($tulos, 'Rank:')) {
                $osa2 = explode("Rank:", $tulos);
                $osa = explode("-", $osa2[1]);
                print "Rank:".$osa[0];
        }

        /* Jossei niin etsitään jos löytyykin Unranked */
        elseif(strstr($tulos, 'Unranked')) {
                print "Clan is hibernating. Cannot get rank.";
        }
       
        /* Jossei niin todetaan että: */
        else {
                print "Clan isn't in the ladder.";
        }
       
}

/*
Nyt suoritetaan funktio joillakin arvoilla
Esimerkkinä Counter-Strike.fi lädderit:
2on2: lid=400
3on3: lid=856
4on4: lid=915
5on5: lid=222
Claanisi cid:n näät esimerkiksi admin sivulta.
*/

print "Kummeli - 2on2: <br>";
print cbRank($cid=316605, $lid=400);
print "<br>";

/* Toinen esimerkki vielä */
print "Kummeli - 3on3: <br>";
print cbRank($cid=316605, $lid=856);
print "<br>";

/*
Tulosten saanti voi olla ajoittain hidasta koska
clanbase on tunnetusti lagin perikuva.
*/

?>

Edit: Lisään tähän nyt tälläsen "kehittyneemmän" version
<?php

/* #######################
Muodostetaan funktio joka hakee claanin rankin ja pisteet clanbasesta
Muuttujat:
cid on claanin id
lid on ladderin id
Kirjoittanu: Nesci (nesci at mbnet.fi)
*/
#######################

function cbRank($cid, $lid) {
        /* Haetaan sivun sisältö */
        $filu = "http://www.clanbase.com/claninfo.php?wars=1&cid=$cid&lid=$lid";
        $filu = file_get_contents($filu);

        /* Etsitään Rank kohta sivulta */
        if($str = strstr($filu, 'Rank:')) {
        $osa = explode("-", $str);
        return $osa[0];
}

        /* Jossei niin etsitään jos löytyykin Unranked */
        elseif(strpos($tulos, 'Unranked')) {
                return "Clan is hibernating. Cannot get rank.";
        }
       
        /* Jossei niin todetaan että: */
        else {
                return "Clan isn't in the ladder.";
        }
       
}

/* #######################
Nyt suoritetaan funktio joillakin arvoilla
Esimerkkinä Counter-Strike.fi lädderit:
2on2: lid=400
3on3: lid=856
4on4: lid=915
5on5: lid=222
Claanisi cid:n näät esimerkiksi admin sivulta.
*/
#######################

/* tässä filunimi jonne tallennetaan (muista chmodit) */
$file = "rank.txt";

/* tarkistetaan onko modeen laitettu jotain */
if(isset($_GET["mode"])) {

        if($_GET["mode"] == "paivita") {

                /* tämä vain selkeyden vuoksi */
                $kummeli_2on2 = cbRank($cid=316605, $lid=400);
                $kummeli_3on3 = cbRank($cid=316605, $lid=856);
                $kirjoita = "$kummeli_2on2|$kummeli_3on3";

                /* Avataan filu kirjoitusta varten */
                $fp=fopen($file, "w");

                /* Kirjoitetaan filuun */
                fwrite($fp, $kirjoita);

                /* Suljetaan filu */
                fclose($fp);
        }
}

/* Luetaan rank.txt filu */
$fp = file_get_contents($file);

/* #######################
Erotellaan taulukkoon ja tulostetaan, kosmetiikan
jätän kullekkin itse hiottavaksi
*/
#######################
$rankit = explode("|", $fp, 8);
print "Kummeli-2on2:" .$rankit[0];
print "<br>Kummeli-3on3:" .$rankit[1];
print "<br><a href='cb.php?mode=paivita'>Päivitä</a>";

/* #######################
Tulosten saanti (päivitys) voi olla ajoittain hidasta koska
clanbase on tunnetusti lagin perikuva.
*/
#######################

?>
 

Kryil 17:31 7.6.05 
Njoo...
Kaipa tästä hyötyä löytyy jos joku nyt väkisin tarvitsee klaaninsa rankin nettisivuilleen. Teepä sama tcl:llä eggdropille niin saat vielä irkkiinkin rankkisi.

Ja pari pikku mokaa:

Turhaa stringin splittailua: (jos se nyt noin täytyy tehdä)
if(strstr($tulos, 'Rank:')) {
        $osa2 = explode("Rank:", $tulos);
        $osa = explode("-", $osa2[1]);
        print "Rank:".$osa[0];
}

Muotoon

if($str = strstr($tulos, 'Rank:')) {
        $osa = explode("-", $str);
        print $osa[0];
}

Php.net:kin suosittelee käyttämään funktiota strpos() jos halutaan vain selvittää, löytyykö jokin tekstinpätkä toisesta, eli hibernaten kohdalla strstr muotoon strpos.

Ja vielä, jos (ja kun) kerran CB on niin laginen, niin kannattaisikohan tulos cacheta? Jos joku repii pelihousunsa siitä, että tuollainen äärimmäisen tärkeä asia on tunnin myöhässä, niin... ;)
editoitu: 17:43 7.6.05
Nesci 17:35 7.6.05 
Jos sattuu pelaamaan sama porukka useammassa claanissa niin on kätevä matsia hankkiessa katsoa sivulla esimerkiksi kahden claanin pisteet yhtä aikaa, eikä tarvi surffata basessa clickaillen 10:tä eri linkkiä että näkee kahdet pisteet. Mutta ideahan tästä lähti kun joku kyseli ircissä jotakin tähän clanbase rankki / piste / matsi juttuun liittyvää, niin ajattelin että joku saattaisi hyödyntää tätä.

Hyvä huomio tuo str... juttu, empä tullut itse hoksanneeksi.

On jo tuollainen irc versio, muttei eggdropille koska inhon sitä väkisin väännettyä pohjaa ja tcl -kieltä...
Nesci 18:17 7.6.05 
Tulinpa tässä itse hieman ajatelleeksi uudelleen tuota ja vielä helpommin tulee siis näin:

$filu = "http://www.clanbase.com/claninfo.php?wars=1&cid=$cid&lid=$lid";
$filu = file_get_contents($filu);

if($str = strstr($filu, 'Rank:')) {
        $osa = explode("-", $str);
        print $osa[0];
}


Mutta en nyt muuta tuohon julkaisuun tuota, antaa sen olla orginellina vain.
editoitu: 13:17 8.6.05
NiLon 13:16 8.6.05 
Tuohon melkeen kannattaa joku cache kehittää. Clanbasen sivu on niin armottoman hidas että se hidastaa samalla sivuston latausaikaa.
Edit: Ai tuota ehdotettiinkin jo :)
koom4 01:50 14.6.05 
Joo, se cache olis aivan mainio ;) vielä kun saat tuon tekemään sen lagisemman ja vaikeamman asian eli hakemaan mutaman viimisen matsin tulokset
Nesci 15:13 22.6.05 
Koodin tarkotus ei ole matsin tuloksien hakeminen, ja se onnistuu parhaiten sillä cb:n omalla java häkkärällä. Cachea en ole jaksanut / osannut vielä edes aloitella (loma).