EasyBox-Freeplayer.com / Code proposé pour le scan AMC.

Vous n'êtes pas identifié.
Le scan amc ne fonctionne pas (j'ai la version 3.5beta9.3 d'easy box et la version 3.5 d'ant movie catalog).
J'ai fait des petites modif dans le fichier scan_amc.php que je vous propose :
======================================================
<?php
//---------------------------------------------------------------------------------------
//Fichier de création de la base de données configuration/scan_amc.php
/*---------------------------------------------------------------------------------------
Ne pas éditer ce fichier, à part si vous savez exactement ce que vous faites!!
-----------------------------------------------------------------------*/
/**
* @auteur Mips <mips6@hotmail.com>
* @copyright Copyright 2006-> Mips
* @package Module amc easybox
* @version 1.0
*/
?>
<center>
<table width="450" style="border: thin outset;font-size: 13px;">
<tr><td>
<?php
$rep = $ini[explorateur][liste_amc_defaut];
$fichier = $ini[explorateur][nom_amc_defaut];
$repimg = $ini[explorateur][image_amc_defaut];
$afficher_fichier_cache = $ini[explorateur][afficher_fichier_cache];
$rep = realpath(ereg_replace("\\\'", "'", $rep));
$db = sqlite_open('../_utilisateur/video.db', 0666);
$mtdb_file = $rep."/".$fichier;
$mtdb_file = realpath($mtdb_file);
if($_GET["scan"]=="1")
{
echo '<meta http-equiv="refresh" content="0;url=index1.php?page=56&get_info=1">'."\n";
?>
<font size="3">
Easybox crée l'index de vos fichiers vidéos...Veuillez patienter<br><br><center><img src="images/progress.gif"></center>
</font>
<?php
}
elseif($_GET['get_info']==1)
{
if (is_file($mtdb_file))
{
if (filesize($mtdb_file) > 0)
{
$handle = fopen($mtdb_file, "r");
$mtall = fread($handle, filesize($mtdb_file));
$mt_last = date ("F d Y H:i:s", filemtime($mtdb_file));
fclose($handle);
$start = "encoding=\"";
$end = "\"?>";
$start_position = strpos($mtall, $start)+strlen($start);
$end_position = strpos($mtall, $end);
$leng = $end_position-$start_position;
$dbencoding = substr($mtall, $start_position, $leng);
$dbencoding = strtolower($dbencoding);
if ($dbencoding != "iso-8859-1")
{
echo "Please save the XML file with iso-8859-1 encoding type!";
exit;
}
$start = "<AntMovieCatalog Format=\"";
$end = "\" Version=\"";
$start_position = strpos($mtall, $start)+strlen($start);
$end_position = strpos($mtall, $end);
$leng = $end_position-$start_position;
$dbformat = substr($mtall, $start_position, $leng);
$start = "\" Version=\"";
$end = "\" Date=\"";
$start_position = strpos($mtall, $start)+strlen($start);
$end_position = strpos($mtall, $end);
$leng = $end_position-$start_position;
$mtversion = substr($mtall, $start_position, $leng);
$mt_data = explode("<Contents>", $mtall);
$mt_data = explode("</Contents>", $mt_data[1]);
$mt_data = explode("/>", $mt_data[0]);
$max = count($mt_data);
$mt_data = array_slice($mt_data, 0, $max-1);
$keys = array_keys($mt_data);
$i=0;
set_time_limit(1000);
foreach ($keys as $key)
{
$start = explode("Number=\"", $mt_data[$key]);
$end = "\"";
$start_position = strpos($start[1], 0);
$end_position = strpos($start[1], $end);
$leng = $end_position-$start_position;
$number = trim(substr($start[1], $start_position, $leng));
// Date
$date = parseinfo($mt_data[$key], "Date=\"", $none, $findit, $replaceit);
// Length
$length = parseinfo($mt_data[$key], "Length=\"", $none, $findit, $replaceit);
// Original Title
$originaltitle = parseinfo($mt_data[$key], "OriginalTitle=\"", $none, $findit, $replaceit);
// Translated Title
$translatedtitle = parseinfo($mt_data[$key], "TranslatedTitle=\"", $none, $findit, $replaceit);
// Producer
$producer = parseinfo($mt_data[$key], "Producer=\"", $none, $findit, $replaceit);
// Country
$country = parseinfo($mt_data[$key], "Country=\"", $none, $findit, $replaceit);
// Category
$category = parseinfo($mt_data[$key], "Category=\"", $none, $findit, $replaceit);
// Year
$year = parseinfo($mt_data[$key], "Year=\"", $none, $findit, $replaceit);
// Actors
$actors = parseinfo($mt_data[$key], "Actors=\"", $none, "", $replaceit);
// URL
//$url = parseinfo($mt_data[$key], "URL=\"", $none, $findit, $replaceit);
$url = "";
// Description
$description = parseinfo($mt_data[$key], "Description=\"", $none, "", $replaceit);
// Director
$director = parseinfo($mt_data[$key], "Director=\"", $none, $findit, $replaceit);
// Languages
$languages = parseinfo($mt_data[$key], "Languages=\"", $none, $findit, $replaceit);
// Picture
$picture = parseinfo($mt_data[$key], "Picture=\"", $none, $findit, $replaceit);
$img = $repimg."/".$picture;
$img = realpath($img);
// Creating the movie array.
$rating=$rating/10*4;
//$result = sqlite_query($db,'SELECT MAX(id) FROM film');
//if ($result=="") { $result="0"; }
$sSql='INSERT INTO film VALUES('.$number.',\''.sqlite_escape_string($originaltitle).'\',
\''.sqlite_escape_string($url).'\',
\''.sqlite_escape_string($description).'\',
\''.sqlite_escape_string($img).'\',
\''.sqlite_escape_string($year).'\',
\''.sqlite_escape_string($director).'\',
\''.sqlite_escape_string($actors).'\',
\''.sqlite_escape_string($country).'\',
\''.sqlite_escape_string($category).'\',
\''.sqlite_escape_string($length).'\',
\''.sqlite_escape_string($year).'\',
\''.sqlite_escape_string($rating).'\',
\''.sqlite_escape_string($rating).'\',
\'\')';
sqlite_query($db,$sSql);
}
}
}
if($num_rows<4)
{
?>
L'analyse de vos fichiers est terminée, vous pouvez maintenant utiliser <br>
directement la base de données à partir de votre Freebox...<br>
<?
}
else
{
echo '<meta http-equiv="refresh" content="0;url=index1.php?page=56&get_info=1">'."\n";
}
}elseif($_GET['wait']==1)
{
echo '<meta http-equiv="refresh" content="0;url=index1.php?page=56&scan=1">'."\n";
?>
<font size="3">
Easybox crée l'index de vos fichiers vidéos...Veuillez patienter<br><br><center><img src="images/progress.gif"></center>
</font>
<?php
}
else
{
?>
Grâce à ce scanner, vous allez pouvoir importer les films stockés votre base de donnée Ant Movie Catalogue dans celle d'Easybox.<br>
Vous pourez ainsi facilement lister vos films et lancer le film ou le fichier souhaité.<br><br>Le fichier .xml scanné est celui configuré (onglet Général -> Explorateur) comme contenant les informations.<br>
<br>
<br>
<center> <form action="index1.php" method="get" > <br>
<input type="hidden" name="wait" value="1"/>
<input type="hidden" name="page" value="56"/>
<input style="border: thin outset;font-size: 9px;" type="submit" value="Scanner les répertoires maintenant" />
</form></center>
<?php
}
//fonction qui décode un string (html_entity_decode).
//@parametre string $string est la chaine a parser.
//@retourne un string décodé.
function unhtmlentities($string) {
// replace numeric entities '
$string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
$string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string);
// replace literal entities
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
return strtr($string, $trans_tbl);
}
//fonction qui parse les infos voulue
//@parametre string $data données a être parsées.
//@parametre string $find What to look for in data.
//@parametre string $none si on trouve rien on renvoie par défaut.
//@parametre string $findit la chaine de caractère a remplacer.
//@parametre string $replaceit la chaine de caractères qui remplacera.
//@return string les données parsées.
function parseinfo($data, $find, $none, $findit, $replaceit) {
if (strpos($data, $find) != "") {
$start = explode($find, $data);
$end = "\"";
$start_position = strpos($start[1], 0);
$end_position = strpos($start[1], $end);
$leng = $end_position-$start_position;
$data = trim(substr($start[1], $start_position, $leng));
$data = unhtmlentities($data);
$data = str_replace($findit, $replaceit, $data);
$data = htmlentities($data, ENT_QUOTES);
$data = str_replace("'", "'", $data);
} else {
$data = $none;
}
return $data;
}
function parseownerdata($ownerdata, $text) {
if (stristr($ownerdata, $text)) {
$tempdbowner = explode($text, $ownerdata);
$end = "\"";
$end_position = strpos($tempdbowner[1], $end);
$data = substr($tempdbowner[1], 0, $end_position);
} else {
$data = "";
}
return $data;
}
?>
Hors ligne
Je voulais proposer un complément.
aujourd'hui quand on ré-importe un fichier AMC, il faut d'abord purger la base sinon des erreurs de clé primaire apparaissent.
1/ Que penses-tu si on efface les données avant de recharger le fichier AMC.
2/ Je pense également faire une petite doc concernant l'utilisation d'AMC pour que cela marche correctement.
3/ Ensuite, Amc utilise des caractères spéciaux (ex : >) qui ne sont pas pris en compte par le browser free. Du coup des caractères bizarres s'affichent.
Je réfléchis à la question. Une solution simple serait de faire un petit programme sous gawk pour transformer le fichier xml d'AMC mais ce n'est pas très user-friendly. As-tu une idée ?
4/ Enfin, il y avait un autre bug (le nom du fichier n'était pas chargé). Voici une meilleure version :
==========================================================
<?php
//---------------------------------------------------------------------------------------
//Fichier de création de la base de données configuration/scan_amc.php
/*---------------------------------------------------------------------------------------
Ne pas éditer ce fichier, à part si vous savez exactement ce que vous faites!!
-----------------------------------------------------------------------*/
/**
* @auteur Mips <mips6@hotmail.com>
* @copyright Copyright 2006-> Mips
* @package Module amc easybox
* @version 1.0
*/
?>
<center>
<table width="450" style="border: thin outset;font-size: 13px;">
<tr><td>
<?php
$rep = $ini[explorateur][liste_amc_defaut];
$fichier = $ini[explorateur][nom_amc_defaut];
$repimg = $ini[explorateur][image_amc_defaut];
$afficher_fichier_cache = $ini[explorateur][afficher_fichier_cache];
$rep = realpath(ereg_replace("\\\'", "'", $rep));
$db = sqlite_open('../_utilisateur/video.db', 0666);
$mtdb_file = $rep."/".$fichier;
$mtdb_file = realpath($mtdb_file);
if($_GET["scan"]=="1")
{
echo '<meta http-equiv="refresh" content="0;url=index1.php?page=56&get_info=1">'."\n";
?>
<font size="3">
Easybox crée l'index de vos fichiers vidéos...Veuillez patienter<br><br><center><img src="images/progress.gif"></center>
</font>
<?php
}
elseif($_GET['get_info']==1)
{
if (is_file($mtdb_file))
{
if (filesize($mtdb_file) > 0)
{
$handle = fopen($mtdb_file, "r");
$mtall = fread($handle, filesize($mtdb_file));
$mt_last = date ("F d Y H:i:s", filemtime($mtdb_file));
fclose($handle);
$start = "encoding=\"";
$end = "\"?>";
$start_position = strpos($mtall, $start)+strlen($start);
$end_position = strpos($mtall, $end);
$leng = $end_position-$start_position;
$dbencoding = substr($mtall, $start_position, $leng);
$dbencoding = strtolower($dbencoding);
if ($dbencoding != "iso-8859-1")
{
echo "Please save the XML file with iso-8859-1 encoding type!";
exit;
}
$start = "<AntMovieCatalog Format=\"";
$end = "\" Version=\"";
$start_position = strpos($mtall, $start)+strlen($start);
$end_position = strpos($mtall, $end);
$leng = $end_position-$start_position;
$dbformat = substr($mtall, $start_position, $leng);
$start = "\" Version=\"";
$end = "\" Date=\"";
$start_position = strpos($mtall, $start)+strlen($start);
$end_position = strpos($mtall, $end);
$leng = $end_position-$start_position;
$mtversion = substr($mtall, $start_position, $leng);
$mt_data = explode("<Contents>", $mtall);
$mt_data = explode("</Contents>", $mt_data[1]);
$mt_data = explode("/>", $mt_data[0]);
$max = count($mt_data);
$mt_data = array_slice($mt_data, 0, $max-1);
$keys = array_keys($mt_data);
$i=0;
set_time_limit(1000);
foreach ($keys as $key)
{
$start = explode("Number=\"", $mt_data[$key]);
$end = "\"";
$start_position = strpos($start[1], 0);
$end_position = strpos($start[1], $end);
$leng = $end_position-$start_position;
$number = trim(substr($start[1], $start_position, $leng));
// Date
$date = parseinfo($mt_data[$key], "Date=\"", $none, $findit, $replaceit);
// Length
$length = parseinfo($mt_data[$key], "Length=\"", $none, $findit, $replaceit);
// Original Title
$originaltitle = parseinfo($mt_data[$key], "OriginalTitle=\"", $none, $findit, $replaceit);
// Translated Title
$translatedtitle = parseinfo($mt_data[$key], "TranslatedTitle=\"", $none, $findit, $replaceit);
// Producer
$producer = parseinfo($mt_data[$key], "Producer=\"", $none, $findit, $replaceit);
// Country
$country = parseinfo($mt_data[$key], "Country=\"", $none, $findit, $replaceit);
// Category
$category = parseinfo($mt_data[$key], "Category=\"", $none, $findit, $replaceit);
// Year
$year = parseinfo($mt_data[$key], "Year=\"", $none, $findit, $replaceit);
// Actors
$actors = parseinfo($mt_data[$key], "Actors=\"", $none, "", $replaceit);
// URL
$url = parseinfo($mt_data[$key], "URL=\"", $none, $findit, $replaceit);
//$url = "";
// Description
$description = parseinfo($mt_data[$key], "Description=\"", $none, "", $replaceit);
// Director
$director = parseinfo($mt_data[$key], "Director=\"", $none, $findit, $replaceit);
// Languages
$languages = parseinfo($mt_data[$key], "Languages=\"", $none, $findit, $replaceit);
// Picture
$picture = parseinfo($mt_data[$key], "Picture=\"", $none, $findit, $replaceit);
$img = $repimg."/".$picture;
$img = realpath($img);
// Creating the movie array.
$rating=$rating/10*4;
//$result = sqlite_query($db,'SELECT MAX(id) FROM film');
//if ($result=="") { $result="0"; }
$sSql='INSERT INTO film VALUES('.$number.',\''.sqlite_escape_string($originaltitle).'\',
\''.sqlite_escape_string($url).'\',
\''.sqlite_escape_string($description).'\',
\''.sqlite_escape_string($img).'\',
\''.sqlite_escape_string($year).'\',
\''.sqlite_escape_string($director).'\',
\''.sqlite_escape_string($actors).'\',
\''.sqlite_escape_string($country).'\',
\''.sqlite_escape_string($category).'\',
\''.sqlite_escape_string($length).'\',
\''.sqlite_escape_string($year).'\',
\''.sqlite_escape_string($rating).'\',
\''.sqlite_escape_string($rating).'\',
\'\')';
sqlite_query($db,$sSql);
}
}
}
if($num_rows<4)
{
?>
L'analyse de vos fichiers est terminée, vous pouvez maintenant utiliser <br>
directement la base de données à partir de votre Freebox...<br>
<?
}
else
{
echo '<meta http-equiv="refresh" content="0;url=index1.php?page=56&get_info=1">'."\n";
}
}elseif($_GET['wait']==1)
{
echo '<meta http-equiv="refresh" content="0;url=index1.php?page=56&scan=1">'."\n";
?>
<font size="3">
Easybox crée l'index de vos fichiers vidéos...Veuillez patienter<br><br><center><img src="images/progress.gif"></center>
</font>
<?php
}
else
{
?>
Grâce à ce scanner, vous allez pouvoir importer les films stockés votre base de donnée Ant Movie Catalogue dans celle d'Easybox.<br>
Vous pourez ainsi facilement lister vos films et lancer le film ou le fichier souhaité.<br><br>Le fichier .xml scanné est celui configuré (onglet Général -> Explorateur) comme contenant les informations.<br>
<br>
<br>
<center> <form action="index1.php" method="get" > <br>
<input type="hidden" name="wait" value="1"/>
<input type="hidden" name="page" value="56"/>
<input style="border: thin outset;font-size: 9px;" type="submit" value="Scanner les répertoires maintenant" />
</form></center>
<?php
}
//fonction qui décode un string (html_entity_decode).
//@parametre string $string est la chaine a parser.
//@retourne un string décodé.
function unhtmlentities($string) {
// replace numeric entities '
$string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
$string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string);
// replace literal entities
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
return strtr($string, $trans_tbl);
}
//fonction qui parse les infos voulue
//@parametre string $data données a être parsées.
//@parametre string $find What to look for in data.
//@parametre string $none si on trouve rien on renvoie par défaut.
//@parametre string $findit la chaine de caractère a remplacer.
//@parametre string $replaceit la chaine de caractères qui remplacera.
//@return string les données parsées.
function parseinfo($data, $find, $none, $findit, $replaceit) {
if (strpos($data, $find) != "") {
$start = explode($find, $data);
$end = "\"";
$start_position = strpos($start[1], 0);
$end_position = strpos($start[1], $end);
$leng = $end_position-$start_position;
$data = trim(substr($start[1], $start_position, $leng));
$data = unhtmlentities($data);
$data = str_replace($findit, $replaceit, $data);
$data = htmlentities($data, ENT_QUOTES);
$data = str_replace("'", "'", $data);
} else {
$data = $none;
}
return $data;
}
function parseownerdata($ownerdata, $text) {
if (stristr($ownerdata, $text)) {
$tempdbowner = explode($text, $ownerdata);
$end = "\"";
$end_position = strpos($tempdbowner[1], $end);
$data = substr($tempdbowner[1], 0, $end_position);
} else {
$data = "";
}
return $data;
}
?>
Hors ligne
Salut et merci de ton coup de pouce c'est vraiment sympa de ta part de t'impliquer dans le développement d'Easybox. Concernant l'effacement de la base de donnée, c'est une très bonne idée. Soit on efface la base a chaque scan, ou alors prévoir une vérification lors d'un scan qui compare avec les données en base si le film existe déja: si oui on passe au suivant, sinon on insère. A mon avis les deux sont faisable, a voir la solution la moins gourmande en temps de traitements. En ce qui concerne la doc c 'est une très bonne initiative, car tout ce qui facilite l'utilisation est le bien venu.
Enfin pour les caractères, je ne connais pas gawk, mais je vais me renseigner et étudier la question pour trouver une solution.
En tout cas encore merci de ton taff c'est cool de voir que sa avance et que des gens sont impliqués.
Hors ligne
Le développement de Easybox va bientot s'ouvrir. Vous rajouterez ca alors si je ne l'ai pas déja fait ?
Hors ligne
Merci beaucoup pour le script que j'ai installé et qui fonctionne bien. Juste un truc: pourquoi tous les titres sont-ils précédés de (1970) ? c'est assez bizarre d'autant que le classement par date fonctionne...
Un autre petit truc, je me sers de la fonction catalogue pour trouver un DVD dans ma bibliothèque ,pas sur mon DD, du coup, quand je clique par erreur sur un titre, le catalogue va chercher le film et je dois revenir au menu (touche FREE sur telco HD) et relancer freeplayer pour en sortir.
Ces détails n'enlèvent rien à mon gros MERCI! 
Hors ligne
A vue de nez, le pb de date viens que dans la base de données, 'sortie' est un INT et non une date donc par défaut quand tu travailles dessus et qu'il y a une erreur, il te mets 01/01/1970
Hors ligne