Atom
Création / Parsing de fil Atom.
Ce module se compose de deux classes instanciables permettant de créer ou de parser des fichiers au format
Atom.
Cette documentation est en cours de rédaction.
PHP 5 powa
Les Méthodes
- AtomCreator :: AtomCreator - Nouvelle Instance
- AtomCreator :: CreateFeed - Création du fil Atom
- AtomCreator :: AddTitle - Ajouter un titre
- AtomCreator :: AddLink - Ajouter un lien en relation
- AtomCreator :: AddAuthor - Ajouter l'auteur
- AtomCreator :: AddContributor - Ajouter un contributeur
- AtomCreator :: AddTagline - Ajouter une description
- AtomCreator :: AddId - Ajouter l'URI du fil
- AtomCreator :: AddCopyright - Ajouter un copyright
- AtomCreator :: AddInfo - Ajouter des informations sur le fil
- AtomCreator :: AddModified - Ajouter la date de modification
- AtomCreator :: NewEntry - Ajouter une entrée au fil
- AtomCreator :: AddEntryLink - Ajouter un lien en relation avec l'entrée
- AtomCreator :: AddEntryContent - Ajouter le contenu de l'entrée
- AtomCreator :: AddEntrySummary - Ajouter un résumé de l'entrée
- AtomCreator :: AddEntryAuthor - Ajouter l'auteur de l'entrée
Exemples
La Source
<?php
error_reporting(E_ALL);
abstract class AtomBase {
protected $ClassVersion = 0.1;
public $AtomVersion = 0.3;
public $ErrorLog = '';
public function __call($name, $args) {
$this->ErrorLog = $name . ' Method does not exists !';
}
protected function VerifyUri($uri) {
$uri = trim($uri);
if(preg_match('`^http://.*?$`', $uri)) {
return $uri;
} else {
return '';
}
}
protected function VerifyW3cDateFormat($date) {
$date = trim($date);
if(preg_match('`^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}$`', $date)) {
return $date;
} else {
return '';
}
}
}
class AtomCreator extends AtomBase {
public $Encoding = 'iso-8859-1';
public $Feed = array();
public $XmlLang = 'fr';
private $I = 0;
public function CreateFeed($lang='en') {
$this->Feed['lang'] = $lang;
$this->Feed['version'] = $this->AtomVersion;
}
public function AddTitle($title) {
$this->Feed['title'] = $title;
}
public function AddLink($title, $url , $rel, $type) {
if($rel == 'alternate') {
$this->Feed['alternatelink']['title'] = $title;
$this->Feed['alternatelink']['url'] = $url;
$this->Feed['alternatelink']['type'] = $type;
} else {
}
}
public function AddAuthor($name, $url='', $email='') {
$this->Feed['author']['name'] = $name;
$this->Feed['author']['url'] = $this->VerifyUri($url);
$this->Feed['author']['email'] = $email;
$this->Feed['author'] = $this->AddPersonElement($name,$url,$email);
}
public function AddContributor($name, $url='',$email='') {
$this->Feed['contributor'][] = $this->AddPersonElement($name,$url,$email);
}
public function AddTagline($type, $mode, $description='') {
$this->Feed['tagline']['type'] = $type;
$this->Feed['tagline']['mode'] = $mode;
$this->Feed['tagline']['description'] = $description;
}
public function AddId($url) {
$this->Feed['id'] = $this->VerifyUri($url);
}
public function AddGenerator($generator , $url='', $version='') {
$this->Feed['generator']['name'] = $generator;
$this->Feed['generator']['url'] = $url;
$this->Feed['generator']['version'] = $version;
}
public function AddCopyright($copy) {
$this->Feed['copyright'] = $copy;
}
public function AddInfo($info, $type, $mode) {
$this->Feed['info']['type'] = $type;
$this->Feed['info']['mode'] = $mode;
$this->Feed['info']['info'] = $info;
}
public function AddModified() {
$this->Feed['modified'] = date('Y-m-d\TH:i:s+00:00');
}
public function NewEntry($title) {
$this->I++;
$this->Feed['entry'][$this->I]['title'] = $title;
return $this->I;
}
public function AddEntryLink($i, $title, $rel, $url, $type) {
$this->Feed['entry'][$i]['alternatelink']['title'] = $title;
$this->Feed['entry'][$i]['alternatelink']['rel'] = $rel;
$this->Feed['entry'][$i]['alternatelink']['url'] = $url;
$this->Feed['entry'][$i]['alternatelink']['type'] = $type;
}
public function AddEntrySummary($i , $summary, $type, $mode) {
$this->Feed['entry'][$i]['summary']['type'] = $type;
$this->Feed['entry'][$i]['summary']['mode'] = $mode;
$this->Feed['entry'][$i]['summary']['summary'] = $summary;
}
public function AddEntryContent($i , $content, $type, $mode) {
$this->Feed['entry'][$i]['content']['type'] = $type;
$this->Feed['entry'][$i]['content']['mode'] = $mode;
$this->Feed['entry'][$i]['content']['content'] = $content;
}
public function AddEntryAuthor($i, $name, $url='', $email='') {
$this->Feed['entry'][$i]['author']['name'] = $name;
$this->Feed['entry'][$i]['author']['url'] = $this->VerifyUri($url);
$this->Feed['entry'][$i]['author']['email'] = $email;
}
public function AddEntryModified($i, $modified) {
$this->Feed['entry'][$i]['modified'] = $modified;
}
public function AddEntryIssued($i, $issued) {
$this->Feed['entry'][$i]['issued'] = $issued;
}
public function AddEntryCreated($i, $created) {
$this->Feed['entry'][$i]['created'] = $created;
}
public function AddEntryId($i, $url) {
$this->Feed['entry'][$i]['id'] = $this->VerifyUri($url);
}
public function GenerateFeed($intofile='') {
if(!isset($this->Feed['lang'])) {
$this->CreateFeed($this->XmlLang);
}
$r = '';
//$r .= '<?xml version="1.0" encoding="'.$this->Encoding.'">';
$r .= '<feed xmlns="http://purl.org/atom/ns#"
version="'.$this->Feed['version'].'" xml:lang="'.$this->Feed['lang'].'">';
if(!isset($this->Feed['title'])) {
$this->ErrorLog = 'Title element not indicated';
return false;
}
$r .= '<title>'.$this->Feed['title'].'</title>';
if(!isset($this->Feed['alternatelink'])) {
$this->ErrorLog = 'Link element not indicated';
return false;
}
$r .= '<link rel="alternate"
type="'.$this->Feed['alternatelink']['type'].'" href="'.$this->Feed['alternatelink']['url'].'"
title="'.$this->Feed['alternatelink']['title'].'"/>';
// author
if(isset($this->Feed['author'])) {
$r .= '<author>';
$r .= '<name>'.$this->Feed['author']['name'].'</name>';
if(isset($this->Feed['author']['url'])) {
$r .= '<url>'.$this->Feed['author']['url'].'</url>';
}
if(isset($this->Feed['author']['email'])) {
$r .= '<email>'.$this->Feed['author']['email'].'</email>';
}
$r .= '</author>';
}
// tagline
if(isset($this->Feed['tagline'])) {
$r .= '<tagline type="'.$this->Feed['tagline']['type'].'" mode="'.$this->Feed['tagline']['mode'].'"';
if(isset($this->Feed['tagline']['description'])) {
$r .= '>'.$this->Feed['tagline']['description'].'</tagline>';
} else {
$r .= '/>';
}
}
// contributor
if(isset($this->Feed['contributor'])) {
foreach($this->Feed['contributor'] as $val) {
$r .= '<contributor>';
$r .= '<name>'.$val['name'].'</name>';
if(isset($val['url'])) {
$r .= '<url>'.$val['url'].'</url>';
}
if(isset($val['email'])) {
$r .= '<email>'.$val['email'].'</email>';
}
$r .= '</contributor>';
}
}
// id
if(isset($this->Feed['id']) && $this->Feed['id'] != '') {
$r .= '<id>'.$this->Feed['id'].'</id>';
}
$this->AddGenerator('AtomCreator', 'http://classes.scriptsphp.net/doc.Atom', $this->ClassVersion);
$r .= '<generator url="'.$this->Feed['generator']['url'].'" version="'.$this->Feed['generator']['version'].'">
'.$this->Feed['generator']['name'].'</generator>';
// info
if(isset($this->Feed['info'])) {
$r .= '<info type="'.$this->Feed['info']['type'].'" mode="'.$this->Feed['info']['mode'].'">
'.$this->Feed['info']['info'].'</info>';
}
// copyright
if(isset($this->Feed['copyright'])) {
$r .= '<copyright>'.$this->Feed['copyright'].'</copyright>';
}
// modified
$this->AddModified();
$r .= '<modified>'.$this->Feed['modified'].'</modified>';
// entry
if(isset($this->Feed['entry'])) {
foreach($this->Feed['entry'] as $val) {
if(!isset($val['alternatelink'])) {
continue;
}
$r .= '<entry>';
$r .= '<title>'.$val['title'].'</title>';
$r .= '<link rel="alternate"
type="'.$val['alternatelink']['type'].'" href="'.$val['alternatelink']['url'].'"
title="'.$val['alternatelink']['title'].'"/>';
if(isset($val['author'])) {
$r .= '<author>';
$r .= '<name>'.$val['author']['name'].'</name>';
if($val['author']['url'] != '') {
$r .= '<url>'.$val['author']['url'].'</url>';
}
if($val['author']['email'] != '') {
$r .= '<email>'.$val['author']['email'].'</email>';
}
$r .= '</author>';
}
if(isset($val['modified'])) {
$r .= '<modified>'.$val['modified'].'</modified>';
}
if(isset($val['issued'])) {
$r .= '<issued>'.$val['issued'].'</issued>';
}
if(isset($val['created'])) {
$r .= '<created>'.$val['created'].'</created>';
}
if(isset($val['id'])) {
$r .= '<id>'.$val['id'].'</id>';
}
if(isset($val['summary'])) {
$r .= '<summary type="'.$val['summary']['type'].'" mode="'.$val['summary']['mode'].'">
'.$val['summary']['summary'].'</summary>';
}
if(isset($val['content'])) {
$r .= '<content type="'.$val['content']['type'].'" mode="'.$val['content']['mode'].'">
'.$val['content']['content'].'</content>';
}
$r .= '</entry>';
}
}
$r .= '</feed>';
if($intofile) {
if(!@file_put_contents($intofile, $r)) {
$this->ErrorLog = 'Unable to write into file';
return false;
}
}
return $r;
}
private function AddPersonElement($name, $url='', $email='') {
return array('name'=>$name, 'url'=>$url, 'email'=>$email);
}
private function AddContentElement() {
}
}// end class
class AtomReader extends AtomBase {
}
?>
error_reporting(E_ALL);
abstract class AtomBase {
protected $ClassVersion = 0.1;
public $AtomVersion = 0.3;
public $ErrorLog = '';
public function __call($name, $args) {
$this->ErrorLog = $name . ' Method does not exists !';
}
protected function VerifyUri($uri) {
$uri = trim($uri);
if(preg_match('`^http://.*?$`', $uri)) {
return $uri;
} else {
return '';
}
}
protected function VerifyW3cDateFormat($date) {
$date = trim($date);
if(preg_match('`^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}$`', $date)) {
return $date;
} else {
return '';
}
}
}
class AtomCreator extends AtomBase {
public $Encoding = 'iso-8859-1';
public $Feed = array();
public $XmlLang = 'fr';
private $I = 0;
public function CreateFeed($lang='en') {
$this->Feed['lang'] = $lang;
$this->Feed['version'] = $this->AtomVersion;
}
public function AddTitle($title) {
$this->Feed['title'] = $title;
}
public function AddLink($title, $url , $rel, $type) {
if($rel == 'alternate') {
$this->Feed['alternatelink']['title'] = $title;
$this->Feed['alternatelink']['url'] = $url;
$this->Feed['alternatelink']['type'] = $type;
} else {
}
}
public function AddAuthor($name, $url='', $email='') {
$this->Feed['author']['name'] = $name;
$this->Feed['author']['url'] = $this->VerifyUri($url);
$this->Feed['author']['email'] = $email;
$this->Feed['author'] = $this->AddPersonElement($name,$url,$email);
}
public function AddContributor($name, $url='',$email='') {
$this->Feed['contributor'][] = $this->AddPersonElement($name,$url,$email);
}
public function AddTagline($type, $mode, $description='') {
$this->Feed['tagline']['type'] = $type;
$this->Feed['tagline']['mode'] = $mode;
$this->Feed['tagline']['description'] = $description;
}
public function AddId($url) {
$this->Feed['id'] = $this->VerifyUri($url);
}
public function AddGenerator($generator , $url='', $version='') {
$this->Feed['generator']['name'] = $generator;
$this->Feed['generator']['url'] = $url;
$this->Feed['generator']['version'] = $version;
}
public function AddCopyright($copy) {
$this->Feed['copyright'] = $copy;
}
public function AddInfo($info, $type, $mode) {
$this->Feed['info']['type'] = $type;
$this->Feed['info']['mode'] = $mode;
$this->Feed['info']['info'] = $info;
}
public function AddModified() {
$this->Feed['modified'] = date('Y-m-d\TH:i:s+00:00');
}
public function NewEntry($title) {
$this->I++;
$this->Feed['entry'][$this->I]['title'] = $title;
return $this->I;
}
public function AddEntryLink($i, $title, $rel, $url, $type) {
$this->Feed['entry'][$i]['alternatelink']['title'] = $title;
$this->Feed['entry'][$i]['alternatelink']['rel'] = $rel;
$this->Feed['entry'][$i]['alternatelink']['url'] = $url;
$this->Feed['entry'][$i]['alternatelink']['type'] = $type;
}
public function AddEntrySummary($i , $summary, $type, $mode) {
$this->Feed['entry'][$i]['summary']['type'] = $type;
$this->Feed['entry'][$i]['summary']['mode'] = $mode;
$this->Feed['entry'][$i]['summary']['summary'] = $summary;
}
public function AddEntryContent($i , $content, $type, $mode) {
$this->Feed['entry'][$i]['content']['type'] = $type;
$this->Feed['entry'][$i]['content']['mode'] = $mode;
$this->Feed['entry'][$i]['content']['content'] = $content;
}
public function AddEntryAuthor($i, $name, $url='', $email='') {
$this->Feed['entry'][$i]['author']['name'] = $name;
$this->Feed['entry'][$i]['author']['url'] = $this->VerifyUri($url);
$this->Feed['entry'][$i]['author']['email'] = $email;
}
public function AddEntryModified($i, $modified) {
$this->Feed['entry'][$i]['modified'] = $modified;
}
public function AddEntryIssued($i, $issued) {
$this->Feed['entry'][$i]['issued'] = $issued;
}
public function AddEntryCreated($i, $created) {
$this->Feed['entry'][$i]['created'] = $created;
}
public function AddEntryId($i, $url) {
$this->Feed['entry'][$i]['id'] = $this->VerifyUri($url);
}
public function GenerateFeed($intofile='') {
if(!isset($this->Feed['lang'])) {
$this->CreateFeed($this->XmlLang);
}
$r = '';
//$r .= '<?xml version="1.0" encoding="'.$this->Encoding.'">';
$r .= '<feed xmlns="http://purl.org/atom/ns#"
version="'.$this->Feed['version'].'" xml:lang="'.$this->Feed['lang'].'">';
if(!isset($this->Feed['title'])) {
$this->ErrorLog = 'Title element not indicated';
return false;
}
$r .= '<title>'.$this->Feed['title'].'</title>';
if(!isset($this->Feed['alternatelink'])) {
$this->ErrorLog = 'Link element not indicated';
return false;
}
$r .= '<link rel="alternate"
type="'.$this->Feed['alternatelink']['type'].'" href="'.$this->Feed['alternatelink']['url'].'"
title="'.$this->Feed['alternatelink']['title'].'"/>';
// author
if(isset($this->Feed['author'])) {
$r .= '<author>';
$r .= '<name>'.$this->Feed['author']['name'].'</name>';
if(isset($this->Feed['author']['url'])) {
$r .= '<url>'.$this->Feed['author']['url'].'</url>';
}
if(isset($this->Feed['author']['email'])) {
$r .= '<email>'.$this->Feed['author']['email'].'</email>';
}
$r .= '</author>';
}
// tagline
if(isset($this->Feed['tagline'])) {
$r .= '<tagline type="'.$this->Feed['tagline']['type'].'" mode="'.$this->Feed['tagline']['mode'].'"';
if(isset($this->Feed['tagline']['description'])) {
$r .= '>'.$this->Feed['tagline']['description'].'</tagline>';
} else {
$r .= '/>';
}
}
// contributor
if(isset($this->Feed['contributor'])) {
foreach($this->Feed['contributor'] as $val) {
$r .= '<contributor>';
$r .= '<name>'.$val['name'].'</name>';
if(isset($val['url'])) {
$r .= '<url>'.$val['url'].'</url>';
}
if(isset($val['email'])) {
$r .= '<email>'.$val['email'].'</email>';
}
$r .= '</contributor>';
}
}
// id
if(isset($this->Feed['id']) && $this->Feed['id'] != '') {
$r .= '<id>'.$this->Feed['id'].'</id>';
}
$this->AddGenerator('AtomCreator', 'http://classes.scriptsphp.net/doc.Atom', $this->ClassVersion);
$r .= '<generator url="'.$this->Feed['generator']['url'].'" version="'.$this->Feed['generator']['version'].'">
'.$this->Feed['generator']['name'].'</generator>';
// info
if(isset($this->Feed['info'])) {
$r .= '<info type="'.$this->Feed['info']['type'].'" mode="'.$this->Feed['info']['mode'].'">
'.$this->Feed['info']['info'].'</info>';
}
// copyright
if(isset($this->Feed['copyright'])) {
$r .= '<copyright>'.$this->Feed['copyright'].'</copyright>';
}
// modified
$this->AddModified();
$r .= '<modified>'.$this->Feed['modified'].'</modified>';
// entry
if(isset($this->Feed['entry'])) {
foreach($this->Feed['entry'] as $val) {
if(!isset($val['alternatelink'])) {
continue;
}
$r .= '<entry>';
$r .= '<title>'.$val['title'].'</title>';
$r .= '<link rel="alternate"
type="'.$val['alternatelink']['type'].'" href="'.$val['alternatelink']['url'].'"
title="'.$val['alternatelink']['title'].'"/>';
if(isset($val['author'])) {
$r .= '<author>';
$r .= '<name>'.$val['author']['name'].'</name>';
if($val['author']['url'] != '') {
$r .= '<url>'.$val['author']['url'].'</url>';
}
if($val['author']['email'] != '') {
$r .= '<email>'.$val['author']['email'].'</email>';
}
$r .= '</author>';
}
if(isset($val['modified'])) {
$r .= '<modified>'.$val['modified'].'</modified>';
}
if(isset($val['issued'])) {
$r .= '<issued>'.$val['issued'].'</issued>';
}
if(isset($val['created'])) {
$r .= '<created>'.$val['created'].'</created>';
}
if(isset($val['id'])) {
$r .= '<id>'.$val['id'].'</id>';
}
if(isset($val['summary'])) {
$r .= '<summary type="'.$val['summary']['type'].'" mode="'.$val['summary']['mode'].'">
'.$val['summary']['summary'].'</summary>';
}
if(isset($val['content'])) {
$r .= '<content type="'.$val['content']['type'].'" mode="'.$val['content']['mode'].'">
'.$val['content']['content'].'</content>';
}
$r .= '</entry>';
}
}
$r .= '</feed>';
if($intofile) {
if(!@file_put_contents($intofile, $r)) {
$this->ErrorLog = 'Unable to write into file';
return false;
}
}
return $r;
}
private function AddPersonElement($name, $url='', $email='') {
return array('name'=>$name, 'url'=>$url, 'email'=>$email);
}
private function AddContentElement() {
}
}// end class
class AtomReader extends AtomBase {
}
?>