Takmer každá aikidistická organizácia má svoje webové stránky a na nich zoznam seminárov. Počet organizácií, stránok aj seminárov však rastie a tak nie je problém nevšimnúť si zaujímavé udalosti vo svojom blízkom okolí. Tento projekt má za cieľ umožniť automatickú výmenu informácií o seminároch, takže bude možné zverejniť semináre z jednej webovej stránky na stránke inej.
Výmena dát sa uskutočňuje prostredníctvom formátu RSS1.0, ktorý sa obvykle používa na publikovanie anotácií článkov. Tento formát sme mierne rozšírili a vytvorili sme programátorské knižnice (zatiaľ len v jazyku PHP), ktoré dokážu vytvoriť alebo čítať informácie o seminároch v našom RSS formáte.
Všetky potrebné nástroje (formát výmeny dát aj programátorské knižnice) sú webmasterom voľne k dispozícii - viď sekcia download.
Vlastnosti poskytovaného riešenia:
RSeminarS_php_091.zip - všetky potrebné knižnice v PHP, vrátane ukážkových príkladov.
Nasledujúce jednoduché ukážky zbežne ilustrujú použitie RSeminarS knižnice v jazyku PHP. Obsiahlejšie príklady nájdete v balíku knižníc, ktorý si môžete stiahnuť.
// include neccessary classes
require("RSeminarS/RSeminarS_generator.php");
// create feed generator
$rss = new RSeminarSGenerator();
mysql_select_db($dbHost, $dbUser, $dbPass);
$res1 = mysql_query("SELECT * FROM seminars ORDER BY start_date DESC");
while ($row1 = mysql_fetch_array($res1)) {
$sem = new Seminar();
// set seminar properties
$sem->startDate->setDate(row1['start_day'], row1['start_month'], row1['start_year']);
$sem->endDate->setDate(row1['end_day'], row1['end_month'], row1['end_year']);
$sem->location = row1['location'];
// $sem->link = 'http://www.mywebsite.net/seminars/particularSeminarPage.html';
// $sem->type = 'Aikido seminar';
// $sem->organizer = 'An organization that organizes this event.';
// now teachers
$res2 = mysql_query("SELECT * FROM teachers WHERE id_seminar = $row1['id']");
while ($row2 = mysql_fetch_array($res2)) {
$teacher = new Teacher();
$teacher->name = $row2['name'];
$teacher->qualification = $row2['qualification'];
$sem->addTeacher($teacher);
}
// add seminar to feed
$rss->addSeminar($sem);
}
header('Content-Type: text/xml');
// write feed to output
echo $rss->createFeed();
// include parser library
require('RSeminarS/RSeminarS_parser.php');
// create feed from specified url
$feed = new RSeminarSParser('http://www.sspa.sk/rss/seminars.en.rss');
// write channel properties
echo '<b>channel title:</b> '. $feed->getChannelTitle().'<br />';
echo '<b>channel description:</b> '. $feed->getChannelDescription().'<br />';
echo '<b>channel link:</b> '. $feed->getChannelLink().'<br />';
// get all seminars from feed
$seminars = $feed->getSeminars();
// go through all seminars and process them
foreach ($seminars as $seminar) {
// write seminar properties - type, date, location
echo '<b>seminar type:</b> '. $seminar->type.'<br />';
echo '<b>seminar date</b>: '. $seminar->startDate->getLocaleString('en').' - '.
$seminar->endDate->getLocaleString('en').'<br />';
echo '<b>seminar location:</b> '.$seminar->location.'<br />';
// process teachers
if (sizeof($seminar->teachers) > 0) {
echo '<b>teachers:</b><ul>';
// go through all teachers in seminar and write their name and qualification (if there is any)
foreach ($seminar->teachers as $teacher) {
echo '<li>'.$teacher->name;
echo ($teacher->qualification!='')?' ('.$teacher->qualification.')':'';
echo '</li>';
}
echo '</ul>';
}
// write seminar note
echo '<b>seminar note:</b><br />'.$seminar->note.'<br />';
// write seminar link
echo '<b>...seminar detail at </b><a href="'.$seminar->link.'" target="_blank">'.$seminar->link.'</a><br />';
}
V rámci testovania projektu bola zavedená výmena informácií o seminároch medzi stránkami SSPA a ČFAI. Na obidvoch stránkach sa priamo z databázy seminárov dynamicky generuje RSS zoznam (RSS z SSPA, RSS z ČFAI). RSS z ČFAI sa stiahne na SSPA stránku, tam sa z neho vyberú informácie o seminároch a tie sa pridajú do zoznamu seminárov, ktorý SSPA má vo vlastnej databáze.
Rovnakým spôsobom sa semináre z SSPA zobrazujú v zozname na stránkach ČFAI.
Projekt je distribuovaný pod licenciou GPL.