RSeminarS (RDF Seminar Summary)
Výmena informácií o (aikidó) seminároch

Projekt: Automatická výmena informácií o seminároch na webových stránkach
Autor: Martin Švihla, martin_svihla (at) yahoo (dot) com

O projekte

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

Vlastnosti poskytovaného riešenia:

Download

RSeminarS_php_091.zip - všetky potrebné knižnice v PHP, vrátane ukážkových príkladov.

Príklady

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ť.

Príklad generovania zoznamu seminárov

// 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();

Príklad stiahnutia a spracovania RSeminarS z iných stránok


// 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 />';
}

Ukážka existujúceho riešenia

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.

Odkazy

Licencia

Projekt je distribuovaný pod licenciou GPL.