On Bebop

Aller au contenu | Aller au menu | Aller à la recherche

Vendredi, novembre 23 2007

SimpleXml et TOUTES les infos d'un flux Dailymotion

Voici un petit bout de code que j'ai réalisé dans le cadre d'un dévelopement de plugin pour importer les vidéos d'un Flux RSS Dailymotion. Je ne pensais pas avoir de difficultés, cependant l'utilisation de SimpleXml avec les namespaces Xml, n'a pas été des plus évidentes. SimpleXml charge l'ensemble des noeuds Xml, mais pas les noeuds avec un namespace ( exemple <itunes:summary>description de ma vidéo</summary> ). Bon j'ai peut être le cerveau au ralenti car j'ai compris comment m'en sortir au bout de .... trop de temps à mon goût !

Voilà le code :

$entries= simplexml_load_file($this->_myDailymotionRss);
foreach($entries->channel->item as $item){ // Parcour chaque "block" item

    //Récupère les attributs de la balise <media:content> situé à l'intérieur de <media:group>
    $media_content= $item->children('media', true)->group->children('media',true)->attributes();

    $itunes= $item->children('itunes', true);

    $this->_medias[]= array(    'title'=>   (string)$item->title,
                                'link'=> (string)$item->link,
                                'description'=> (string)$itunes->summary,
                                'content'=> array(  'url'=> (string)$media_content['url'],
                                                    'type'=> (string)$media_content['type'],
                                                    'width'=> (string)$media_content['width'],
                                                    'height'=> (string) $media_content['height']
                                                    ),
                                
                            );
   
}

Dimanche, avril 1 2007

Artichow - Découverte

Artichow est une librairie PHP qui permet de réaliser des graphiques. C'est une alternative à Jpgrah. Tout comme cette dernière il existe une version php4/5 et php5. Artichow est un projet français. Ayant eu à l'utiliser et un peu de mal à démarer avec je vais essayé de vous présentez ça en tenant compte des problèmes que j'ai rencontré. Pour celà je vais simplement reprendre le code que j'ai déjà réalisé.

Il s'agit d'un graphique représentant les créations de blogs, et les inscriptions d'utilisateur sur une plateforme de blogs,. On visualise les effectifs sur 1 mois donnée ou une année. Ce que j'ai eu le plus de mal à faire c'est la graduation de 1 en 1. Par défaut elle se fait tous les demis 0 ; 0,5 ; 1,0 ; 1,5 ; etc.... Hors on ne peut avoir des demis visiteurs :). Il y'as donc 2 graphiques en 1.

Artichow tout comme Jpgrah est une librairie entièrement objet ( version php5 ). Toutes les variables ( ou presque ) sont des instanciations d'autres objets. Artichow est 100% GPL. Jpgraph a une licence llibre QPL ( restriction sur les modifications possible à ce que j'ai compris.... ) et une Licence commercial.

I - Création d'un nouveau graphique

$graph = new Graph(650, 300); // largeur, hauteur
$graph->setAntiAliasing(TRUE);
$graph->shadow->setSize(3); // taille de l'ombre en bas à droite
$graph->title->set($title); // titre du graphique, apparaît en haut
/* A l'instanciation de la classe graphique, une variable $title est crée.
* C'est variable $title est en faite l'instanciation de la classe awLabel d' Artichow
* On peut donc utiliser toutes les méthodes d' awLabel pour configurer notre titre.
*/
$graph->title->setFont(new Tuffy(15));
$graph->title->setColor(new Color(0x00, 0x00, 0x8B));
$graph->title->setPadding(0,0,-5,0); // marge intérieure entre le texte du label est les bordures de celui-ci
// On cré 2 variable de couleurs qui nous seront utiles par la suite.
$blue = new Color(0, 0, 200);
$red = new Color(200, 0, 0);

II - 2 Grapiques en 1 => on créer un groupe

$group = new PlotGroup; // Permet de gérer plusieurs objet Plot ( BarPlot, LinePlot, etc..)
$group->setPadding(40, 40); // Espacement interne de 40px
$group->setBackgroundColor(new Color(240, 240, 240)); // Met une couleur de fond au groupe

III - 1 - Création de la première série de BarPlot

$plot = new BarPlot($y_blogs, 1, 2); // Nouvel objet Barplot avec les données $y_blogs, Bare 1 de 2
$plot->barBorder->setColor($blue); // bordure de la barre de stat.
$plot->setBarGradient(new LinearGradient($blue,new Color(230, 230, 255, 30),0)); // Couleur dégradé du fond
$plot->setYAxis(Plot::LEFT); // On donne la poisition gauche pour l'axe des Ordonnées de la première série
$group->add($plot); // On ajoute notre première série au group
// On configure notre axe des Ordoonnées n°1
$group->axis->left->setColor($blue); // Couleur de l'axe
$group->axis->left->title->set('Blogs'); // Légende de l'axe
$group->axis->left->hideTicks(); //Cache les petits tiret de graduation
$group->axis->left->setLabelInterval(2); //!!! Permet de spécifier l'interval de gradution !!!
$group->axis->left->setLabelPrecision(0); // Précision décimal de la graduation ( ici pas de chiffres après la virgule )


On a donc désormé, un graphique presque finis, qui contient une série de donnée. Il faut recréer une autre série qui viendra se mettre à côté. Pour celà rien de plus simple, un petit copier coller du III en changant quelques valeurs.

III - 2 - Création de la première série de BarPlot

$plot = new BarPlot($y_users, 2, 2); // Nouvel objet Barplot avec les données $y_users, Bare 2 de 2
$plot->barBorder->setColor($red); // bordure de la barre de stat.
$plot->setBarGradient(new LinearGradient($red,new Color(230, 230, 255, 30),0)); // Couleur dégradé du fond
$plot->setYAxis(Plot::RIGHT); // On donne la poisition gauche pour l'axe des Ordonnées de la première série
$group->add($plot); // On ajoute notre deuxième série au group
// On configure notre axe des Ordoonnées n°2
$group->axis->right->setColor($red); // Couleur de l'axe
$group->axis->right->title->set('Utilisateurs'); // Légende de l'axe
$group->axis->right->hideTicks(); //Cache les petits tiret de graduation
$group->axis->right->setLabelInterval(2); //!!! Permet de spécifier l'interval de gradution !!!
$group->axis->right->setLabelPrecision(0); // Précision décimal de la graduation ( ici pas de chiffres après la virgule )

Voila nos 2 séries sont créées. Dernière étape, afficher ou enregistrer notre graphique !

IV - Voir le graphique

$graph->add($group); // Ajout du groupe à l'objet Graph
$filename = 'mon_graphique.png'; // on créer un nom de fichier
/*
* Par défaut la méthode draw va afficher directement le graphique. Cependant, si on a déjà affiché des données
* à l'écran, le résultat est inutile. On enregistre donc l'image dans un fichier grâce à file_put_contents et le paramètre
* Graph::DRAW_RETURN
*/
file_put_contents($filename, $graph->draw(Graph::DRAW_RETURN));
echo 'Mon graphique'; // On affiche dans une balise

Lundi, février 26 2007

Apache 2 + fcgid + php5 + suexec/suphp

Je configure actuellement un petit serveur de dev interne pour le boulot. Comme le titre l'indique. Voilà la configuration que j'aimerais mettre en place. Biensûr pas de prob pour Apache 2, Php5 et Suphp. Mais quand il s'agit de mettre Fcgid.... Le tout sur une Debian Etch

J'ai essayé différente piste, mais rien à faire. Je continue mes recherches, si quelqu'un a déjà réussi à faire ça...
La suite dans quelques heures...

Me revoilà avec fcgid et suphp qui tourne mais séparément :s.
Lorsque que j'essaye de marier les 2, suphp me répond qu'il ne peu pas exécuter le script. Les droits sont bon, le user:group aussi. mais rien n'y fait. Suite à différent infos glanés par ci par là voilà ma configuration :

/etc/apache2/mods-enabler/suphp.conf :
AddHandler x-httpd-php .php .php3 .php4 .php5 .phtml
suPHP_AddHandler x-httpd-php
AddHandler x-httpd-fcgi .phpf # commenter pour avoir fcgid qui tourne tout seul
suPHP_AddHandler x-httpd-fcgi # commenter pour avoir fcgid qui tourne tout seul
suPHP_Engine on

La config de mon vhost :
NameVirtualHost *
ServerAdmin webmaster@localhost
DocumentRoot /home/ynave/
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
allow from all
# AddHandler fcgid-script .php # décommenter pour avoir fcgid qui tourne seul
FCGIWrapper /home/ynave/php-fcgi .phpf

ErrorLog /var/log/apache2/error.log
LogLevel debug
CustomLog /var/log/apache2/access.log combined
ServerSignature On

la config /etc/suphp/suphp.conf
[global]
logfile=/var/log/suphp/suphp.log
loglevel=info
webserver_user=www-data
docroot=/home/ynave
;chroot=/var/www
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
check_vhost_docroot=true
errors_to_browser=true
env_path=/bin:/usr/bin
umask=0002
min_uid=100
min_gid=100

[handlers]
;Handler for php-scripts
x-httpd-php=php:/usr/bin/php5-cgi
x-httpd-fcgi=execute:!self ;commenter pour avoir fcgid qui tourne tout seul

;Handler for CGI-scripts
x-suphp-cgi=execute:!self

Donc si je commente / décommente les parties mentionnées j'ai un index.php qui s'éxécute avec suphp et un index.phpf qui s'exécute avec fcgid.
Biensûr y'a pas photo, ave le fcgid 250 req/sec avec le suphp 20 req/sec.

Par contre là avec suphp censé utilisé fcgid pour les .phpf rien à faire j'ai le message :
Internal Server Error
Could not execute script "/home/ynave/index.phpf"
suPHP 0.6.2

Et biensûr rien dans les logs...

Dimanche, septembre 24 2006

Php.ini par Vhost en CGI

Voilà une petite directive sympas lorsque vous créer un vhost avec apache2 et que votre php tourne en CGI + mod_suphp. Ce mode de fonctionnement empêche d'utiliser des directives dans un .htacess pour modifier les valeurs par défauts de la configuration php. Ce qui peut s'avérer parfois gênant, par exemple si vous voulez modifié la taille maximal de fichier pour l'upload, etc...

Il suffit donc de mettre cettr directive :
suPHP_ConfigPath /repertoire/ou/se/situe/votre/php.ini/personalisé

Considérons la vhost suivant, mon php.ini sera dans /media/datas/WWW/zenphoto/ :
ServerAdmin yannuxx@gmail.com
ServerName photos.onbebop.net
ServerAlias photos.onbebop.net
DocumentRoot /media/datas/WWW/zenphoto/public/ suPHP_ConfigPath /media/datas/WWW/zenphoto/

Jeudi, décembre 22 2005

Nom d'un ptit Geek

Eheheh !!! ( s' ésclame t il bien fort )
Alors pour supporter cette article il vous faut :

Enfin bouclé ce projet de brun de groniouniounioud'emailing pour....*BIP*. Me voilà pris d'un soudaine crise de folie comme il en arrive parfois. L'euphore d'un projet qui part en prod. :D !
J'allais vous raconter une petite histoire mais tant pis faisons simple ! J'étais parti au Furet Du Nord (hey oui pas de marque qui tienne) acheter le cd de James Blunt ! Pour ce qui aime je vous salu(t), pour les autres tant pis :p. Après un petit passage au rayons anims je m'en vais quérir ce bien précieux ! Et paf après avoir fait 3 fois le rayons j'apprend qu'il n'y en a plus en stock ! Misère au déséspoir on va se rabbattre sur Jean Louis Aubert mais bon je n'avais entendu qu'un morceaux et le cd et protégé DRM etc.... tout le toutim... CA PUEEE !:D
Après cette épisode foireux, je décide d'aller faire un petit tour au rayons.....livre informatique biensûr ! Et là le Saint Graâl c'est illuminé (oui j'ai trop regarder les templiers hier soir !). PHP5 Best Practices ! , le livre que j'attendé, plein de bon conseils pour monter un projet php, sutructuration, uml, svn... bon j'en parlerais plus quand j'aurais bien entamer la bête !

Deuxième surprise : un libre sur Ubuntu !! Et oui Ubuntu débarque et ça va faire mal, bientôt windows aux archives ;). Bon allez sans troll, ça s'appel : Ubuntu Linux. C'est beau, ça se mange sans fin, ça glisse tout seul. Alors allez y :)
image PHP5 Best Practices image Ubuntu Linux
Oui bon moral de l'histoire quand même, faut bien trouver une raison au titre hein !
Geek qui part acheter cd reviens avec livre php"