RSS export ticketů

Z ZděchovNET
Skočit na navigaci Skočit na vyhledávání

Free WoW servery zdaleka nejsou dokonalé jak bychom si přáli. Často probíhají různé změny a důsledkem toho se může něco pokazit a hráči se tak dostávají do různých problémových situací. Aby bylo monžné řešit efektivně problémy hráčů, zavedli tvůrci do hry systém pro herní podporu hráčů. Hráči své dotazy pokládají přes tzv. ticket systém. Vyberou skupinu, do která dotaz patří, a popíší svůj problém. V herním okně se jim vpravo nahoře zobrazí lístek a jejich dotaz je zařazen do databáze. Na serveru pak pracují Game Masteři (GM), kteří tyto žádanky sledují a v případě, že má někdo problém, tak se teleportují k tomuto hráči a zjistí od něho další detajly, případně s ním problém vyřeší a žádanku zruší.

GM mají možnost sledovat stav žádanek na emulátoru MaNGOS ve hře přes příkaz .ticket. Dokonce pokud je GM online a hráč si vystaví žádanku, přítomným GM se zobrazí informace přímo v chatovacím okně. V případě, že žádný GM nemůže být neustále online, nemají obyčejmě GM možnost zjisit stav žádanek jinak než se připojit na moment do hry. Data jsou však uložena v databázi, takže se zde otvírá možnost libovolného zpracování pomocí webového serveru nebo pomocných aplikací. V tomto návodu je předání aktuálních informací řešeno přes tzv. RSS kanál, což je speciální soubor ve formátu XML určený pro předávání krátkých zpráv mezi servery nebo do klientských aplikací nazývaných RSS čtečky.


PHP skript pro export žádanek jako RSS kanálu

Zde je uveden zdrojový kód soubrou rss_tickets.php pro export dat z databáze ve RSS formátu. V tomto skriptu je pro vygenerování XML souboru použito způsobu vyplnění šablony obsahu RSS souboru. Jazyk PHP disponuje také knihovnami pro práci s XML soubory umožňující také analýzu a čtení XML souborů. V úvodní části je potřeba změnit konfigurační údaje. Skript počítá s databází používanou emulátorem MaNGOS a pro jiné emulátory je potřeba provést patřičné úpravy.

<?php
header("Content-Type: text/xml");  // Zajistí, že se bude soubor místo HTML tvářit jako XML.

include_once('rss_generator.php');

$Config = array(
  'Host' => 'localhost',
  'User' => 'mangos',
  'Password' => 'mangos',
  'Database' => 'characters',
  'Charset' => 'utf8',
  'Domain' => 'http://wow.domena.cz/',
  'WebmasterEmail' => 'wow@domena.cz',
);

function GenerateRSS($Data)
{
  if(!array_key_exists('Charset', $Data)) $Data['Charset']  = 'iso-8859-2';  // Default charset
  $Result = '<?xml version="1.0" encoding="'.$Data['Charset'].'" ?>'."\n". //<?
  '<rss version="2.0">'."\n".
  "  <channel>\n".
  "    <title>".$Data['Title']."</title>\n".
  "    <link>".$Data['Link']."</link>\n".
  "    <description>".$Data['Description']."</description>\n".
  "    <language>cs</language>\n".
  "    <webMaster>".$Data['WebmasterEmail']."</webMaster>\n".
  "    <pubDate>".date('r')."</pubDate>\n".  
  "    <ttl>20</ttl>\n";
  foreach($Data['Items'] as $Item)
  {
    $Result .= "    <item>\n".
    '      <title>'.htmlspecialchars($Item['Title'])."</title>\n".
    '      <description>'.htmlspecialchars($Item['Description'])."</description>\n".
	  '      <pubDate>'.date('r',$Item['Time'])."</pubDate>\n".
	  '      <link>'.$Item['Link']."</link>\n".
    "    </item>\n";
  }
  $Result .= "  </channel>\n".
  "</rss>";
  return($Result);
}

// Get news from database by selected categories
$Items = array();
$Database = new mysqli($Config['Host'], $Config['User'], $Config['Password'], $Config['Database']);
$Database->query('SET CHARACTER SET '.$Config['Charset']);
$Database->select_db($Config['Database']);
$DbResult = $Database->query("SELECT `character_ticket`.`ticket_text` AS `text`, `characters.name` AS `name` FROM `character_ticket` JOIN `characters` ON `characters`.`guid` = `character_ticket`.`guid`");
while($Row = $DbResult->fetch_array())
{
  $Items[] = array(
    'Title' => $Row['name'].': '.$Row['text'],
    'Link' => '',
    'Description' => $Row['name'].': '.$Row['text'],
    'Time' => 0,
  );
}

echo(GenerateRSS(array(
  'Title' => 'WoW GM žádanky',
  'Link' => $Config['Domain'],
  'Description' => 'Požadavky hráčů na GM',
  'WebmasterEmail' => $Config['WebmasterEmail'],
  'Items' => $Items))
);
?>

Poznámka: Skript byl přepracován do obecného tvaru z konkrétního WoW serveru a nebyla ověřena jeho funkčnost. Během vývoje emulátoru MaNGOS dochází občas ke změně struktury databáze, podle toho je pak potřeba aktualizovat názvy tabulek.


Externí odkazy