Login   Register  
PHP Classes
elePHPant
Icontem

File: examples/advanced.getID3.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Mohamed Elkholy  >  Batch File Rename  >  examples/advanced.getID3.php  >  Download  
File: examples/advanced.getID3.php
Role: Example script
Content type: text/plain
Description: demo file
Class: Batch File Rename
Rename multiple files according to flexible rules
Author: By
Last change: updated to v1.0 build 29
Date: 2 years ago
Size: 4,699 bytes
 

Contents

Class file image Download
<?php
/*
 * An advanced example that uses getID3() library to rename a set of mp3 files according 
 * to their id3 metadata.
 * 
 * @package        BatchFileRename
 * @author        Mohamed ELkholy <mkh117@gmail.com>
 * @copyright    Copyright (c) 2012 Mohamed Elkholy
 * @version        SVN: $Id: advanced.getID3.php 5 2012-04-17 18:53:36Z admin $
 * @license        LGPL <http://www.gnu.org/licenses/lgpl.txt>
 * @link        http://www.phpclasses.org/package/7472
 */

// Include BatchFileRename class file
require ("../src/BatchFileRename.php");

/*
 * Include getID3 library
 * 
 * Note: getID3 library is not included in the downloaded package so you can download it
 * from http://getid3.sourceforge.net/
 */
require ("getid3/getid3.php");

// Create a new class instance and enable simulation mode
$batchFileRename = new BatchFileRename(array(
    
"simulationMode" => true,
));

/**
 * Utility function that gets the id3 metadata of mp3 files.
 *
 * @param   string  $filepath    The  mp3 file path
 * @param   string  $tag        The  id3 tag
 * @return  string    The value of the id3 metadata tag
 */
function get_id3_metadata($filepath$tag) {

    static 
$getID3$files;
    
    if (!isset(
$getID3)) {
        
$getID3 = new getID3();
    }
    
    if (!isset(
$files)) {
        
$files = array();
    }
    
    if (!isset(
$files[$filepath])) {
        
$id3info $getID3->analyze($filepath);
        
getid3_lib::CopyTagsToComments($id3info);
        
$files[$filepath] = $id3info;
    }
    
    if (!isset(
$files[$filepath]['comments'][$tag][0])) {
        return 
NULL;
    }
    
    return 
$files[$filepath]['comments'][$tag][0];
}

/**
 * A custom callback for excluding mp3 files that does not have id3 metadata.
 *
 * The $fileinfo paramater contains file informations like:
 *  $fileinfo->path         The file path
 *  $fileinfo->name         The file name
 *  $fileinfo->basename     The file name without the extension
 *  $fileinfo->extension    The file extension
 *  $fileinfo->size         The file size
 *
 * @param   object  $fileinfo    Object containing file information
 * @return  bool    If FALSE the file will be excluded, TRUE the file will be included
 */
function filterNoID3Tags($fileinfo) {

    
$id3_artist get_id3_metadata($fileinfo->path'artist');
    
$id3_title get_id3_metadata($fileinfo->path'title');
    
    if (empty(
$id3_artist) || empty($id3_title)) {
        return 
false;
    }
    
    return 
true;
}

// Define the fileSet filters
$batchFileRename->setFileSetOptions(array(
    
"directoryPath" => "/path/to/directory/"
    
"includeExtensions" => array("mp3"), 
    
"callback" => "filterNoID3Tags",
));

/**
 * The callback for the filename variable "artist".
 *
 * The $fileinfo paramater contains file informations:
 *  $fileinfo->path         The file path
 *  $fileinfo->name         The file name
 *  $fileinfo->basename     The file name without the extension
 *  $fileinfo->extension    The file extension
 *  $fileinfo->size         The file size
 *  $fileinfo->count        The file index number within the fileSet
 *
 * The $renameinfo paramater contains renamed file informations:
 *  $renameinfo->name       The new file name
 *  $renameinfo->basename   The new file name without the extension
 *  $renameinfo->extension  The new file extension
 *
 * @param   object  $fileinfo   Object containing file information
 * @param   object  $renameinfo Object containing renamed file information
 * @return  string  The value of the variable in the filename
 */
function artistFileNameVariable($fileinfo$renameinfo) {
    
    return 
get_id3_metadata($fileinfo->path'artist');
}

/**
 * The callback for the filename variable "title".
 *
 * @param   object  $fileinfo   Object containing file information
 * @param   object  $renameinfo Object containing renamed file information
 * @return  string  The value of the variable in the filename
 */
function titleFileNameVariable($fileinfo$renameinfo) {
    
    return 
get_id3_metadata($fileinfo->path'title');
}

// Define the Filename Variables "title", "artist" and their callbacks.
$batchFileRename->setFileNameVariable("title""titleFileNameVariable");
$batchFileRename->setFileNameVariable("artist""artistFileNameVariable");

// Define the renaming rules
$batchFileRename->setRenameRules(array(
    
"fixedFileName" => "<##> - <artist> - <title>",
));

// Rename the files
$batchFileRename->rename();

echo 
"<pre>";

echo 
"Successfully renamed files:";
print_r($batchFileRename->getResultArray());

// Check if an error occurs while renaming the files
if ($batchFileRename->isError()) {
    echo 
"Some files were not renamed!";
    
print_r($batchFileRename->getErrorsArray());
}

echo 
"</pre>";