Autor Zpráva
Jondy
Profil *
Dobry den. V HTML sem zacatecnik, teda.. umim ho cist a tak, znam par kodu, ale nikdy sem se to nijak neucil, jen me to bavi a delam si pro sebe webove stranky, a snazim se tim i učit. No, pujdu rovnou k veci. Rekneme ze na webu www.nejakastranka.cz bude nekde napr. cislo, ktere udava treba pocet navstev za hodinu, nebo pocet prispevku za den etc. a ja bych chtel, aby se to cislo, ktere je na tom webu ukazovalo i na jinem webu, a aby se to cislo synchronizovalo. Takze kdyz se to cislo na tom webu zmeni, tak aby se to zmenilo i na te moji strance. Abych se priznal, tak moje presna vize je takova ze na strance csgolounge.com mam pole s "reputaci" a ja bych chtel, aby se to cislo, ktere udava moji reputaci ukazovalo i na mem webu. Nechci pokazde, kdy se mi zvysi reputace to cislo na mem webu prepisovat, takze bych chtel, aby se ten muj text na strance choval dynamicky a proste aby ten kod na mem webu mel promennou, jterou je to cislo te me reputace. No, snad jste to pochopili. pokud se to na jakpsatweb.cz nekde pise, tak sorka, nikde sem to nenasel, nevim jak se tomu rika. no, tady je moje vize jako PNG http://minevines.4fan.cz/images/vision.png sorka, delal sem ten obrazek asi 1 minutu. :D DIk za odpovedi
juriad
Profil
K tomu ti HTML nestačí. Potřebuješ hosting s podporou PHP (nebo jiného serverového jazyka).
Dělá se to pak nějak takto: Získání obsahu cizí stránky
Jondy
Profil *
juriad:
Diky moc. Jinak hostuju to na Endoře. :)


juriad:
Takze sem si to precetl, ale nevim, jak vyjadrit, kde se nachazi ten text.
Ta proměnná je zapsana nasledovne v div <div style="font-size: 27px;text-align: center;" id="reputation-count">12</div>
Ale v ukazce je ukazana jako h1
$tagRegExp = '~<(h1).*>(.*?)</\\1>~iU';
preg_match($tagRegExp, $data, $matches);
$nadpis = $matches[2];
A proto, ze na te strance je tech div vic, tak nevim, jakt to zapsat.. neslo by to nejak jako:
$tagRegExp = '~<(div#reputation-count).*>(.*?)</\\1>~iU';
preg_match($tagRegExp, $data, $matches);
$nadpis = $matches[2]
??? Diky moc za odpoved. :)

Moderátor juriad: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
Keeehi
Profil
Jondy:
Regulární výrazy fungují trochu jinak, než si myslíš. Není to jako CSS nebo jQuery selector. www.regularnivyrazy.info/regularni-vyrazy-zaklady.html#.VdOELMv8LqA

To co chceš se dá zapsat asi takto
'~<div.*?id="reputation-count">(.*?)</div>~iU'

Je snad ale jasné, že jakmile změní ten kód, tak to může přestat fungovat.

Je taky důležité poznamenat, že bys měl vytvořit alespoň nějaké primitivní kešování. Při prvním požadavku za určitý časový interval si zjistit tu hodnotu že stránky, tu si někam uložit a pak ji jen zobrazovat. Proč je to nutné? Protože 1. budou tvoje stránky pomalé pokud budou pokaždé čekat na odpověď toho serveru. 2. Pokud bude mít server nějaký problém, nemusí se zobrazovat ani tvoje stránky protože budou čekat na odpověď toho rozbitého serveru. 3. Pokud by ji hodnotu zjišťoval pokaždé, generoval bys celkem velký zbytečný provoz a mohlo by se ti stát, že by tě odstřihli a pak už bys nezjistil vůbec nic.
Jondy
Profil *
juriad
Diky moc, tak uz to asi mam. :) Hezky den preji. :) A dam na tvoje/vaše rady, a udelam si nejaky cache, ktery by se aktualizoval treba kazdou hodinu.(ne udelam, ale pukusim se udelat) :)
Keeehi
Profil
Jondy:
Kdyby byl nějaký problém, tak se zkus klidně dál zeptat. Ale nemělo by to být nic jiného než čtení a zápis z/do souboru a porovnávání časových značek.
Jondy
Profil *
Diky moc, klidne napisu, kdybych mel nejaky problem. Moc dekuju za ochotu a pomoc. :)


Keeehi:
Diky moc, klidne napisu, kdybych mel nejaky problem. Moc dekuju za ochotu a pomoc. :)
Jondy
Profil *
Keeehi:
kat to teda mam, ale nezobrazuje se mi to cislo, co hci. stranka je prazdna. resil sem to s jednim kamosem, co vystudoval IT, teda nebavilo ho to, tak na to "jebal" a k ničemu sme nedošli. Jinak tady je source kod
<?php
$host = "csgolounge.com";
$adresa = "profile?id=76561198077381445";
$fp = @fsockopen ($host, 80, $errno, $errstr, 10); 
fputs ($fp, "GET /".$adresa." HTTP/1.0\r\nHost: ".$host."\r\n\r\n"); 
$data = '';
while (!feof($fp)) { 
  $data .= fgets($fp, 2048);
} 
fclose ($fp);
$tagRegExp = '~<div.*?id="reputation-count">(.*?)</div>~iU';
preg_match($tagRegExp, $data, $matches);
$nadpis = $matches[2];
?>
<div style="display:none;"><endora></div>
Nevsimejte si toho divu s endorou, jen to skryje reklamu od endory. kdyz ho odstranim, taky tam neni to cislo co chci jen ta reklama..
BTW... tady je stranka s phpčkem: http://jonesova.cz/test.php


Keeehi:
BTW chyba bude nekde tady:
$tagRegExp = '~<div.*?id="reputation-count">(.*?)</div>~iU';
preg_match($tagRegExp, $data, $matches);
$nadpis = $matches[2];
protože kdyz sme dali echo $data namisto tamtoho, tak se nam zobrazila cela stranka.
anonymníí
Profil *
Jondy:
Nezkoumal jsem to nikterak podrobně, ale tu hodnotu nevypisuješ...

echo $nadpis

Jen tak na okraj, přečti sipodmínk užívání freehostingu, o skryté reklamě tam jistě odstaveček bude.
Jondy
Profil *
Děkuji všem moc za rady, ale stále se mi nedaří, aby se mi to číslo zobrazilo. :/ když si necham vypsat celou stránku, tak jo je cajk, ale kdyz si dam vyechovat jen tu reputaci, tak mi to nejde:/ Kod vypada takhle:
<?php
$host = "csgolounge.com";
$adresa = "profile?id=76561198077381445";
$fp = @fsockopen ($host, 80, $errno, $errstr, 10); 
fputs ($fp, "GET /".$adresa." HTTP/1.0\r\nHost: ".$host."\r\n\r\n"); 
$data = '';
while (!feof($fp)) { 
  $data .= fgets($fp, 2048);
} 
fclose ($fp);
$tagRegExp = '~<div.*?id="reputation-count">(.*?)</div>~iU'
preg_match($tagRegExp, $data, $matches);
$reputation = $matches[2];
echo $reputation
?>
<div style="display:none;"><endora></div>
Takze ja hodnotu vypsal, ale nezobrazuje se mi... A měla by se přeci zobrazit bez toho, aniž bych ji přidělil poluhu přes CSS ne?
anonymníí
Profil *
Jondy:
Tak si zkus vypsat, co to průběžně dělá.

echo $data; // radek 10
print_r($matches); // radek 13

Základní debuggování, které za tebe nikdo dělat nebude.

Jen tak mimochodem, jestli kód uvedený zde, je skutčně ten, který používáš, tak fungovat nemůže, jsou v něm syntaktické chyby, vidím dvě. Jak si je zobrazit si najdi, ať máš pak lepší pocit z toho, že jsi na něco přišel sám.
Jondy
Profil *
Jsou ty chyby mezera, a chybějící středník? :)
Jondy
Profil *
Dobře, takže jsem dokončil ty webovky, a teď do toho chci nějak zakomponovat ten kód, který zobrazí tu proměnnou (Reputaci).
Tady je odkaz na ten web: Tady :)
Vidíte tam ten reputační level, ale ten neřešte, to je obyčejný text. No, ale ten bych rád zaměnil tou proměnnou hodnotou, kterou získává tenhle Kód:
<?php
$host = "csgolounge.com";
$adresa = "profile?id=76561198077381445";
$fp = @fsockopen ($host, 80, $errno, $errstr, 10); 
fputs ($fp, "GET /".$adresa." HTTP/1.0\r\nHost: ".$host."\r\n\r\n"); 
$data = '';
while (!feof($fp)) { 
$data .= fgets($fp, 2048);
} 
fclose ($fp);
$tagRegExp = '~<div.*?id="reputation-count">(.*?)</div>~iU';
preg_match($tagRegExp, $data, $matches);
$reputation = $matches[2];
echo $reputation;
?>
Je mi jasný, že ten kód musím dat před hlavičku tý stránky, a ještě by bylo lepši, kdybych to z index.html přejmenoval na index.php, ale i když bych to udělal, tak mě zajímá, jak udelam, aby se mi ta proměnná ukazala presne na tom miste, na jakem ho chci, nejspis ten trik bude v CSS jak hadam, no... :D Dobře no, děkuju za všechny rady. Jo, a tady máte source tý stránky: Tu to je :)
juriad
Profil
Jondy:
Stránka bude vskutku index.php (musí mít připonu php).
Ty funkce bych navrhl trošku jinak. Funkční ukázka, ze které je snad zřejné použití. Umí ta cachovat výsledky 10 minut a je to připravené na rozšíření (až tě budou zajímat i další hodnoty z profilu uživatele).

<?php
# toto dej někam na začátek stránky, je to vcelku jedno
# klidně i do jiného souboru, který includneš

define('PROFILE_DIR', './profiles/');
define('PROFILE_REFRESH', 600);

function fetchProfile($id) {
    $host = "csgolounge.com";
    $address = "profile?id=" . $id;

    $fp = @fsockopen($host, 80, $errno, $errstr, 10);
    fputs($fp, "GET /" . $address . " HTTP/1.1\r\nHost: " . $host . "\r\nConnection: Close\r\n\r\n");
    $data = '';
    while (!feof($fp)) {
        $data .= fgets($fp, 2048);
    }
    fclose ($fp);

    $profile = array();

    $tagRegExp = '~<div.*?id="reputation-count">(.*?)</div>~iU';
    preg_match($tagRegExp, $data, $matches);
    $profile['reputation'] = $matches[1];

    return $profile;
}

function getProfile($id) {
    if (!is_dir(PROFILE_DIR)) {
        die('Directory ' . PROFILE_DIR . ' doesn\'t exist.');
    }
    $file = PROFILE_DIR . $id . '.profile';
    if (!file_exists($file) || filemtime($file) + PROFILE_REFRESH < time()) {
        # doesn't exist or too old -> fetch and save to file
        $profile = fetchProfile($id);
        file_put_contents($file, json_encode($profile));
    } else {
        # exists -> load from file
        $profile = json_decode(file_get_contents($file), TRUE);
    }
    return $profile;
}

?>

Kdykoli potřebuješ někde vypsat reputaci, napíšeš následující kus kódu:

Poprvé:
<?php echo getProfile('76561198077381445')['reputation']; ?>

Podruhé:
<?php echo getProfile('76561198077381445')['reputation']; ?>

Potřetí:
<?php echo getProfile('76561198077381445')['reputation']; ?>


Funkce getProfile vrací pole, které zatím ná jen jednu položku (reputation). Než to spustíš, tak musíš vytvořit adresář jménem profiles. Do něj se začnou ukládat soubory s profily uživatelů, to je záměr.
Jondy
Profil *
Juriad: Díky moc za tvůj čas, moc si toho vážím, jestli chceš, mužů tě na stránce zveřejnit jako spolupracovníka na tý stránce, kdyby se to uchytilo, tak bys toho mohl nejak vyuzit. :)


juriad:
Díky moc za tvůj čas, moc si toho vážím, jestli chceš, mužů tě na stránce zveřejnit jako spolupracovníka na tý stránce, kdyby se to uchytilo, tak bys toho mohl nejak vyuzit. :)[pre][/pre]

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: