По любому заинтересовавшему Вас вопросу вы можете получить консультацию по номеру 8 (8555) 42-12-97 с 9:00 до 18:00 ежедневно, кроме выходных. Также вы можете воспользоваться формой обратной связи в разделе "Контакты".

Наш офис расположен по адресу: г. Нижнекамск, сквер Лемаева, д.8

Модель для парсинга FB2 на PHP

Четверг, 25 ноября 2010 г.
Рубрика: Статьи -> СПО
Просмотров: 2193
Подписаться на комментарии по RSS
Вот решил написать парсер для FB2 на PHP, может несколько коряво - торопился, однако работает. В дальнейшем думаю изменять и дополнять smile.
/**
 * 
 * @author			Diz A Torr
 * @copyright		Copyright (c) 2010, CodeMotion
 * @license			GPL
 * @link			http:/conferdigit.ru
 * @since			Version 1.0
 * @filesource
 */
// ------------------------------------------------------------------------

class fictionbook{
    var $book;
    var $table_of_content = array();
    var $book_info = array();
    
    function book_load ($file){
        $this->book = simplexml_load_file ($file);
        $this->title_info();
    }
    
    function title_info (){
        $title_info = 'title-info';
        include ('ru-ru.php');
	    foreach ($this->book->description->$title_info->children() as $key=>$children){
	        switch ($key){
                case 'genre':
                    $this->book_info['genre'][] = $genre_table_ru[(string) $children]; break;
                case 'book-title':
                    $this->book_info['book-title'] = $children; break;
                case 'author': //Автор(ы) произведения
			        $last_name = 'last-name';
			        $first_name = 'first-name';
			        $middle_name = 'middle-name';
			        $home_page = 'home-page';
			        $this->book_info['author'][] = array (   'first-name'=>$children->$first_name, 
			                                                'middle-name'=>$children->$middle_name, 
			                                                'last-name'=>$children->$last_name, 
			                                                'home-page'=>$children->$home_page, 
			                                                'email'=>$children->email);
                break;
                case 'annotation':
                    $this->book_info['annotation'] = $children->asXML(); break;
                case 'coverpage':
                    $this->book_info['coverpage'] = $children->image; break;
                case 'date': // хранит дату создания документа.
                    $this->book_info['date'] = $children; break;
                case 'translator': //Переводчик(и)
			        $last_name = 'last-name';
			        $first_name = 'first-name';
			        $middle_name = 'middle-name';
			        $home_page = 'home-page';
			        $this->book_info['translator'][] = array (   'first-name'=>$children->$first_name, 
			                                                'middle-name'=>$children->$middle_name, 
			                                                'last-name'=>$children->$last_name, 
			                                                'home-page'=>$children->$home_page, 
			                                                'email'=>$children->email);
                break;
                case 'lang': //Язык книги
                    $this->book_info['lang'] = $children; break;
                case 'year': // год издания книги.
                    $this->book_info['year'] = $children; break;                    
                
	        }
	    }
	    $this->table_of_content = $this->table_of_content();
    }
    
    function print_image ($image){
        //print_r($image);
        $image =  $image->asXML();
		preg_match("/[\"|\']\#([\S]+\.[\S]+)[\"|\']/i", $image, $image_name);
		$image_name = $image_name[1];
       	foreach ($this->book->binary as $binary){
       	    if ($binary[id] == $image_name){
       	        $image = base64_decode($binary);
       	        $file = fopen($image_name, 'w');
       	        fwrite($file, $image);
       	        fclose($file);
       	        echo '';
       	    }
	    }        
    }
    
    function table_of_content($book='false'){ //Надо было как-то отметить, что в начале читать с самого начала smile, при этом не задавая это явно в методе.
        if (!empty($this->table_of_content)){return $this->table_of_content;}         //Проверка на наличие
        if ($book == 'false'){$book = $this->book->body;}
        foreach ($book as $key=>$body){
            if (isset($body->title)){
                $title = $this->__clear_string($body->title->asXML());
                if (!empty($title)){
                    //echo $title.'
';
                    $title_array[] = $title;                    
                }
            }
            $title_array_temp = $this->table_of_content($body->section);
            if (!empty($title_array_temp)){$title_array[] = $title_array_temp;}
        }
        return $title_array;
    }

    function content($book='false',  $i=-1){
        if ($book == 'false'){$book = $this->book->body;}
        ++$i;
        foreach ($book->children() as $key=>$body){
            switch ($key){
                case 'image': 
                    $this->print_image ($body);
                break;
                case 'title':
                    if ($i == 0){$i=1;}
                    $title = $this->__clear_string($body->asXML());
                    echo ''.$title.'';
                break;
                case 'section': 
                    $this->content($body, $i);
                break;
                case 'epigraph':
                    echo '
'.$this->__clear_string($body->asXML()).'
'; break; default: echo $this->__clear_string($body->asXML(), false); } } } function print_table_of_content($table = false){ if (!$table){$table = $this->table_of_content; } echo '
    '; foreach ($table as $row){ if (is_array($row)){ $this->print_table_of_content($row); }else{ echo '
  • '.$row.'
  • '; } } echo '
'; } private function __clear_string ($string, $p = true){ $string = preg_replace('/\|\<\/title\>/im', '', $string); //|\|\<\/p\> $string = preg_replace('/\s+/m', " ", $string); $string = preg_replace('/^\s+|\s+$/', '', $string); if ($p){$string = preg_replace('/\|\<\/p\>/im', '', $string);} return $string; } } $book = new fictionbook; $book->book_load("12.fb2"); //echo '
';
$book->print_table_of_content();
$book->content();
?>
]]>twitter.com facebook Вконтакте Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)

Здесь бесплатно скачать mp3 нельзя, или скачать видео фильм бесплатно, тоже нельзя. И 1с или 1c скачать нельзя.