Před týdnem byl uveřejněn článek, s jehož pomocí si můžete dát na stránku ICQ Pager, aby vám mohl kdokoli poslat do ICQ zprávu. Tento článek upravuje předchozí funkci zrušením zobrazování okna při odesílání zprávy, přičemž zachovává indikaci stavu odesílané zprávy.

Pro jednoduchost jsem využil i původní vzhled. Ve scritpu je použito PHP, které v předchozím článku nebylo. Vzhled a funkci scriptů zde tedy popisovat nebudu, najdete je v článku Vlastní ICQ pager ve webové stránce. Údaje, které je potřeba změnit, jsou ve scriptu označeny červenou barvou.

<?PHP
if (!isset($toicquin))
$toicquin = 22635022;
if (!isset($toname))
$toname = „Jiří Skočdopole„;
if (!isset($toemail))
$toemail = „houba@hotmail.com„;
if ($send):
  $sock = fsockopen("wwp.icq.com", 80);
  $stav = "Zprávu se nepodařilo odeslat";
  if ($sock):
    $messbody = "to=$toicquin&from=DJmix&fromemail=$fromemail&subject=$subject&body=$body";
    fputs($sock, "POST /scripts/WWPMsg.dll HTTP/1.1\r\nHost: wwp.icq.com\r\nContent-Length:
".strlen($messbody)."\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n$messbody\r\n\r\n");
    while ($line = fgets($sock, 128)):
      if (eregi("whitepages/page_me_ok/0,,,00\\.html",$line)):
        $stav = "Zpráva byla úspěšně odeslána";
        break;
      endif;
    endwhile;
  endif;
endif;
?>
<html>
<head>
<title>ICQ – poslat zprávu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<link REL="stylesheet" TYPE="text/CSS" MEDIA="screen" HREF="icqsend.css">
</head>
<body style="background-color: appworkspace" leftmargin="0" topmargin="0"
marginwidth="0" marginheight="0" onload="window.focus(); window.resizeTo(492,348);"
scroll="no">
// automatické hlídání velikosti okna
<script type="text/javascript" language="JavaScript">
<!–
function c(box) {
// funkce pro počítání napsaných znaků zprávy
  smslength = box.value.length;
  if (smslength > 449) {
    box.value = box.value.substring(0,449);
    smslength = box.value.length;
  }
  else {
    charl = 450 – smslength;
  }
  document.icqform.charin.value = smslength;
  document.icqform.charle.value = charl;
}
//–>
</script>
<table cellspacing="0" border="0" cellpadding="0" width="480">
  <tr>
    <td width="1" style="background-color: threedhighlight"></td>
    <td height="1" style="background-color: threedhighlight"></td>
    <td width="1" style="background-color: threedshadow"></td>
  </tr>
  <tr>
    <td width="1" style="background-color: threedhighlight">
    <td valign="top" class="dhtmed-MENU">
      <table border="0" cellpadding="2" cellspacing="2" width="100%">
        <tr>
          <td align="left">
            <fieldset>
            <legend>poslat zprávu<br></legend>
            <table width="100%">
              <tr>
                <td><b>ICQ#&nbsp;:&nbsp;</b><span class="dhtmed-O">&nbsp;&nbsp;
<?PHP echo $toicquin ?>&nbsp;&nbsp;</span>&nbsp;&nbsp;<b>Jméno:&nbsp;</b>
<span class="dhtmed-O">&nbsp;&nbsp;<?PHP echo $toname ?>
&nbsp;&nbsp;</span><b>EMail:&nbsp;</b><span class="dhtmed-O">&nbsp;&nbsp;<?PHP echo
$toemail ?>&nbsp;&nbsp;</span>&nbsp;&nbsp;</td>
                <td align="right">&nbsp;<img src="info.gif" width="18" height="18"
border="0" align="absmiddle" alt="Není-li ICQ OnLine, zpráva bude doručena ihned, jakmile se uživatel
připojí k síti"></td>
             </tr>
          </table>
          </fieldset>
        </td>
      </tr>
      <form name="icqform" action="icqsend.php" method="post">
      <tr>
        <td align="left" class="dhtmed-MENU" nowrap>
          <input type="hidden" name="send" value="true">
          <input type="hidden" name="toicquin" value="<?PHP echo $toicquin ?>">
          <input type="hidden" name="toname" value="<?PHP echo $toname ?>">
          <input type="hidden" name="toemail" value="<?PHP echo $toemail ?>">
          &nbsp;Předmět: <input type="text" class="inputs" size="30" maxlength="40"
name="subject&quot value="<?PHP echo $subject ?>">
          &nbsp;&nbsp;&nbsp;&nbsp;Tvůj email: <input type="text" size="25" class="inputs"
maxlength="40" name="fromemail"
value="<?PHP echo ($fromemail)? $fromemail : "@" ?>">
        </td>
     </tr>
     <tr>
       <td>
         &nbsp;Napiš zprávu:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Znaků: <input type="text" size="4" class="bttn"
id="charin" value="0" readonly>Zbývá: <input type="text" size="4" id="charle" class="bttn" value="450"
readonly>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src="http://wwp.icq.com/scripts/online.dll?icq=<?PHP echo $toicquin ?>&img=7" class="dhtmed-O" height="15"
border="0" align="absmiddle"></td>
      </tr>
      <tr>
        <td>
          <textarea name="body" rows="10" cols="56" onchange="c(this.form.body)" onkeyup="c(this.form.body)"
onmousemove="c(this.form.body)" wrap="virtual" scroll="auto"></textarea></td>       </tr>
      <tr>
        <td>
          <table width="100%" cellpadding="0" cellspacing="0">
            <tr>
              <td>&nbsp;<button type="button" class="bttn"
onclick="location.href=’http://wwp.icq.com/scripts/search.dll?to=$toicquin’">
Přidat kontakt</button></td>
              <td align="center"><?PHP echo $stav ?><td>
              <td align="right"><input type="submit" value=" Odeslat " class="bttn">&nbsp;&nbsp;&nbsp;<img src="icqanim.gif" width="32" height="32" border="0" class="dhtmed-O" align="absmiddle">&nbsp;</td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
  </td>
  <td width="1" style="background-color: threedshadow"></td>
  </tr>
  <tr>
  <td width="1"
style="background-color: threedhighlight"></td><td height="1" style="background-color: threedshadow"></td>
  <td width="1" style="background-color: threedshadow"></td>
  </tr>
</table>
</body>

Změny jsou tedy hlavně na začátku stránky, kdy je použito PHP. Začínající blok příkazů kontroluje (nastavuje) nepovinné proměnné, které lze použít pro multiuživatelské rozhraní. Parametry jsou tři:

toicquin – číslo ICQ, na které je zpráva odeslána,
toname – jméno příjemce zpráv,
toemail – e-mail příjemce zpráv.

Proměnné na začátku scriptu nastavujeme na výchozí, takže pokud bude script multiuživatelský, není v něm zapotřebí žádná změna. Pokud ale multiuživatelský nebude, mohou se výchozí hodnoty nastavit např. na webmastera webu. Porovnání pak ukazuje, zda byl formulář odeslán. V další části se script snaží spojit s Icq.com, kam budete odesílat data. Pokud se spojení povedlo ($sock), začnete s vlastní přípravou a posíláním dat.

Sockety a HTTP požadavky

HTTP požadavků je několik druhů, nejpoužívanější je metoda GET vracející stránku, která je určena pomocí URL. My ale používáme metodu POST, která předává stránce i parametry poslané v tzv. těle HTTP požadavku. Proč jednoduše nevyužijeme metodu GET a do URL volané stránky prostě nepřidáme parametry i s hodnotami? Vlastní text zprávy totiž může být dlouhý až 450 znaků a vzhledem k tomu, že URL může být dlouhé maximálně 255 znaků, není tato metoda pro nás moc použitelná.

Nejprve si připravte proměnnou $messbody, kterou naplňte proměnnými k odesílání. Další příkaz už vše odesílá, je použit již zmiňovaná metoda POST. Použité hlavičky jsou nutné. Host obsahuje hostitele, na kterého je požadavek posílán (v HTTP 1.1 je tato hlavička povinná), Content-Length ukazuje velikost odesílaných dat (zda nějaká data jsou) a Content-Type je nutno použít, aby stroj chápal odesílaná data jako proměnné a jejich hodnoty. Pak už jen čteme po řádcích vrácené hlavičky, a testujeme, jestli některá z nich neobsahuje řetězec poukazující na úspěšné odeslání zprávy (hledáme relativní URL, které obsahuje HTML soubor s oznámením o úspěšném odeslání zprávy).

Nakonec si ještě ukážeme, jak by měl vypadat v naší stránce odkaz, kterým se bude ICQ Pager aktivovat:

<a href="icqsend.php" target="icqsend" onClick="window.open(‚icqsend.php‘,’icqsend‘,’width=480,height=317, menubar=no,scrollbars=no,resizable=yes,location=no,status=no‘);return false;">Můj ICQ Pager</a>

Celý balíček si můžete stáhnout

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

1 Příspěvěk v diskuzi

Odpovědět