Archives par étiquette : PHP

Wake On Lan via un script PHP installé sur un NAS

Au bureau il m’arrive souvent de me connecter à mon PC fixe qui est à la maison via LogMeIn. Mon problème est que ce n’est pas possible s’il n’est pas allumé. LogMeIn propose bien une fonctionnalité pour allumer son PC à distance via le WakeOnLan sauf qu’elle n’est disponible que si un autre PC est allumé sur le même réseau local et que ce PC a LogMeIn d’installé. Un peu contraignant…

J’ai donc pensé à une autre solution : utiliser le serveur PHP qui se trouve sur mon NAS (Synology DS411) qui est toujours allumé.

Voici donc un script PHP qui sert d’interface à une fonction trouvée sur StackOverflow qui permet d’envoyer les fameux « paquets magiques » :

Google Reader

Flux RSS Canal+

Voici les flux RSS pour avoir quotidiennement les nouvelles émissions du Zapping et du Petit Journal dans votre lecteur de flux RSS préféré (Google Reader pour ma part) :

Ces flux sont générés avec un petit script PHP que j’ai fait. Si vous souhaitez avoir d’autres programmes visibles sur canalplus.fr je peux en ajouter…

Edit: ajout de nouveaux flux.

Vie de merde

Flux RSS des Vie de merde illustrées [UPDATE]

Le site VDM.fr doit être maintenant assez célébre pour que je prenne pas la peine de le présenter. Sur le site régulièrement des illustrations de VDM sont ajoutées. Elles sont souvant sympa mais mon problème c’était que je les voyais pas : elle sont pas dans le flux RSS. Donc si j’utilise les flux RSS c’est bien pour ne pas aller sur des sites. Donc mon problème était qu’il n’y avait pas de flux avec les illustrations.

***

Donc pour résoudre mon problème j’ai fait un petit script PHP qui fouille dans la page http://www.viedemerde.fr/illustrations et génére un flux à partir des données trouvées. Pour l’utiliser voilà où ça se trouve :

http://pas-bien.net/divers/rss-vdm-illustratee/

Sources dispo pour ceux qui veulent :

http://pas-bien.net/divers/rss-vdm-illustratee/sources.txt

***

Finalement le plus simple est encore de leur demander de l’ajouter (ce que j’ai fait) et ils ont gentillement accepté ! Donc voici l’adresse officielle du flux :

http://feeds.feedburner.com/illusdemerde

UPDATE (18/11/2010): ajout du lien officiel et suppression de mon script inutile…

Firefox

Extraire des données du cache Firefox

La fonction about:cache de Firefox (à taper dans la barre d’adresse) permet d’afficher les éléments qui ont été mis en cache. Un jour j’ai eu à récupérer un fichier CSS que j’avais supprimé par erreur mais qui était toujours dans le cache. J’ai donc pu voir mon fichier mais en affichage hexadécimal :

Affichage d'un fichier du cache Firefox

Affichage d'un fichier du cache Firefox

Si on fait « Fichier » > « Enregistrer sous… » on peut enregistrer ces données dans un fichier (nomé Cache entry information.xhtml par défaut). J’ai donc écrit un outil qui permet d’extraire les données en affichables pour les écrire en binaire. Cet outil est écrit en PHP-CLI (Command Line Interface) et s’utilise comme ceci :

php cache2bin.php "Cache entry information.xhtml" "test.gif"

Vous pouvez le télécharger à cette adresse si cela vous intéresse :

cache2bin.txt

Pour l’exécuter il faudra surement le renommer en .php et ajouter les droit d’exécution sur Linux.

Personnalisation

Si vous avez besoin de faire la même chose mais pour un fichier ne provenant pas du cache de Firefox, ce programme peut marcher en l’état, mais si ce n’est pas le cas, il n’y aura sûrement que deux choses à faire :

  1. Remplacer $ereg par l’expression régulière correspondant à votre fichier.
  2. Remplacer $data_per_line par le nombre d’octets affichés par ligne.

Par exemple pour un fichier généré par la commande Linux hexdump on aurait $data_per_line qui reste à 16 et pour $ereg :

$ereg = "/[0-9a-f]{8}: ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) - ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2})/";

Licence

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL

Twitter

Recevez vos flux RSS Twitter avec Google Reader

Cet outil ne fonctionne plus.

Les flux RSS Twitter sont protégés par des mots de passes, ce qui peut être gênant si votre agrégateur de flux ne supporte pas l’authentification. C’était mon cas avec Google Reader.

J’ai écrit un « proxy » de flux qui ne nécessite pas d’authentification au niveau du protocole HTML. L’authentification sur mon proxy se fait par un paramètre GET et le proxy s’authentifie sur Twitter.

Il peut sembler risqué de donner un mot de passe à un site aussi peu connu qui le mien et c’est normal puisque ça l’est ! Le nom d’utilisateur et le mot de passe sont codés dans le paramètre key, il n’est pas inscrit ailleur.

Je peux décoder vos mots de passes sans problème à partir des logs Apache. Mais sérieusement j’en ai rien à faire de vos comptes Twitter ! Par contre le code source de cet outil ne sera pas révélé pour que le codage reste sûr. Donc même si votre key générée tombe entre les mains de personnes mal intentionnées ils n’auront accès qu’à votre flux via mon proxy.

L’outil est ici:

Twitter Feeds Proxy

Si vous avec des doutes sur la sécurité de mon outil, le mieux est de ne pas l’utiliser. 😉

2SRT2ASS

Fusionnez deux fichiers SRT avec 2srt2ass

Pour travailler mon anglais je voulais pouvoir utiliser deux fichiers SRT en même temps : un en VO et l’autre en français pour avoir la traduction instantanée. Mes lecteurs vidéos préférés (Media Player Classic et VLC) ne permettant pas ça : j’ai créé un petit outil PHP : 2SRT2ASS (ou Two SRT to ASS).

Il analyse les fichiers SRT que l’on lui envoie pour les ressortir fusionnés en un fichiers ASS. Voici un petit apperçu de ce que ça donne avec Knight Rider 2008 (no comment sur la série 😐 ) :

Aperçu de deux fichiers SRT fusionnés

Aperçu de deux fichiers SRT fusionnés

Cet outil fonctionne très simplement :

  1. Vous lui envoyez les deux fichiers.
  2. Vous cliquez sur « Envoyer » et il vous renvoie les fichiers fusionnés.

Le fichier généré est un fichier SSA/ASS. C’était le seul format qui permettait d’avoir une mise en forme (en haut et en bas) tout en étant basé sur les timestamps (comme pour les fichiers SRT).

A noter aussi que VLC semble mal digérer les ASS mais Media Player Classic n’a aucun problèmes.

Si vous voulez vous aussi utiliser cet outil, il est disponnible avec ses sources ici :

2SRT2ASS

PS : Si vous souhaitez attrendre le support de cette fonction dans VLC, une discution est en cours depuis 2006…

Google Reader

Filtrez vos flux RSS avec ce qui vous intéresse

Pour quoi faire ?

J’utilise pas mal les flux RSS pour me simplifier certaines choses. Comme par exemple l’arrivée d’un nouvel épisode d’une des séries que je suis. Un de mes « problèmes » était que je recevais des actualités dont je n’avais rien à faire. Je me suis donc créé un petit outil PHP qui récupère les flux RSS de différents sites, les filtre et les regroupe en un seul.

Comment ça marche ?

Il y a deux moyens d’utiliser cet outil.

Première utilisation

Avec des paramètres GET :

  • feeds : la liste des flux séparés par une virgule.
  • filters : la liste des filtres d’inclusions aussi séparés par une virgule.
  • excludes (optionnel) : encore une liste séparée par des virgule pour forcer l’exclusion d’items qui sont passés.
  • debug  (optionnel) : pour recevoir dans le flux généré les erreurs qui se sont produites.

Exemple :

http://example.com/rss-filter/rssfilter.php?feeds=http://www.toto.com/rssfr.xml,http://www.tata.fr/rss.xml&filters=CSI,CSI Miami,House&exclude=Desperate&debug=1

Deuxième utilisation

Avec un fichier XML dans le sous dossier files qui contient la configuration. Les filtres sont des expréssions régulières. Exemle de fichier XML :

http://example.com/rss-filter/files/series.xml

<!--?xml version="1.0" encoding="UTF-8" ?-->
 
	[EZTV+VTV+subs] Filtrés
	Séries : Dexter, Dirty Sexy Money, Fringe, Grey's Anatomy, Heroes, House, How I Met Your Mother, Lost, My Name Is Earl, Naruto Shippuuden, The IT Crowd, The United State Of Tara, True Blood, Weeds.
 
		<!-- sous titres -->
		http://www.tvsubtitles.net/rssfr.xml
		http://www.sub-way.fr/rss.xml
		http://feeds.feedburner.com/seriessub
		<!-- séries -->
		http://www.mininova.org/rss.xml?user=VTV
		http://www.mininova.org/rss.xml?user=EZTV
		<!-- naruto -->
		http://www.dattebayo-fr.com/rss-news.php
 
		/\bDexter\b/i
		/\bDirty Sexy Money\b/i
		/\bFringe\b/i
		/\bGrey'?s? Anatomy\b/i
		/\bHeroes\b/i
		/\bHouse\b/i
		/\bHow I Met Your Mother\b/i
		/\bLost\b/i
		/\bMy Name Is Earl\b/i
		/\bNaruto Shippuuden\b/i
		/\bThe Mentalist\b/i
		/\bThe IT Crowd\b/i
		/\bSons of Anarchy\b/i
		/\bUnited States Of Tara\b/i
		/\bTrue Blood\b/i
		/\bWeeds\b/i
 
		/\bCrooked House\b/i
		/\bDesperate Housewives\b/i
		/\bx264\b/i

Le flux correspondant sera disponnible comme ceci :

http://example.com/rss-filter/rssfilter.php?file=series

http://example.com/rss-filter/rssfilter.php?file=series&debug=1 (pour avoir le debug en plus)

Installation

Votre navigateur risque d’essayer de parser le fichier rssfilter.txt en tant que flux RSS.

Posez le fichier rssfilter.php sur un serveur Web qui dispose de :

  • PHP 5,
  • la fonction file_get_contents,
  • L’extension SimpleXML.

Télécharger rssfilter.php

Questions ?

En cas de problème n’ésitez pas à me poser des questions dans les commentaire 😉

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL

Taquin

Utilisation avancée de file_get_contents (PHP)

Préambule

Je fais cette note technique car je me suis plus d’une fois confronté à différentes configurations pour accéder à une page Web à partir de PHP. Normalement un serveur Web dispose d’une connection directe à internet et n’a pas besoin d’un proxy pour y acceder. Mais si on fait des script PHP en CLI (non liès à un serveur Web) on peut se trouver confronter à différents problèmes…

Cas 1 : la simplicité même

Voici le cas le plus simple pour récupérer un page à partir de son URL. Dnas le cas où PHP dispose d’un accès direct à internet.

HTTP

$content = file_get_contents("http://www.google.com/");

HTTPS

$content = file_get_contents("https://www.google.com/");

Si il vous manque l’extension open_ssl vous aurez une erreur dans ce genre :

Notice: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in ...\test_001.php on line 3

Warning: file_get_contents(https://www.google.com/): failed to open stream: Invalid argument in ...\test_001.php on line 3

C’est aussi valable pour les cas suivants.

Cas 2 : Authentification HTML

Si la page est protégée par un mot de passe, PHP peut transformer une URL avec utilisateur et mot de passe pour envoyer la requête avec les bons headers.

HTTP

$content = file_get_contents("http://user:pass@www.example.com/");

HTTPS

$content = file_get_contents("https://user:pass@www.example.com/");

Méthode alternative

Vous pouvez aussi envoyer vous même les headers contenant mots de passe et utilisateur. C’est plus compliqué mais ça marche aussi.

// URL des données à récupérer
$url = 'http://protectedstuff.com';
// Encodage de l'autentification
$auth = base64_encode('user:password');
// Création des options de la requête
$opts = array(
	'http' => array (
		'method'=>'GET',
		'header'=>"Authorization: Basic $auth"
	),
	'https' => array (
		'method'=>'GET',
		'header'=>"Authorization: Basic $auth"
	)
);
// Création du contexte de transaction
$ctx = stream_context_create($opts);
// Récupération des données
file_get_contents($url,false,$ctx);

Source : http://fr.php.net/manual/fr/function.stream-context-create.php#74431

Cas 3 : En passant par un proxy

Il m’est arrivé d’écrire des script en PHP-CLI qui se retrouvaient bloqués par un proxy.

HTTP ou HTTPS

// URL des données à récupérer
$url = 'https://www.google.com/';
// Création des options de la requête
$opts = array(
	'http' => array (
		'proxy'=>'tcp://192.168.0.99:3128',
		'request_fulluri' => true
	),
	'https' => array (
		'proxy'=>'tcp://192.168.0.99:3128',
		'request_fulluri' => true
	)
);
// Création du contexte de transaction
$ctx = stream_context_create($opts);
// Récupération des données
$content = file_get_contents($url,false,$ctx);

Cas 4 : Proxy et page avec authentification HTML

Si en plus la page que vous souhaitez télécharger requière une authentification, cela reste simple.

HTTP ou HTTPS

// URL des données à récupérer
$url = 'https://user:pass@www.example.com/';
// Création des options de la requête
$opts = array(
	'http' => array (
		'proxy'=>'tcp://192.168.0.99:3128',
		'request_fulluri' => true
	),
	'https' => array (
		'proxy'=>'tcp://192.168.0.99:3128',
		'request_fulluri' => true
	)
);
// Création du contexte de transaction
$ctx = stream_context_create($opts);
// Récupération des données
$content = file_get_contents($url,false,$ctx);

Cas 5 : Proxy avec authentification

Dans certaines entreprises ou administration on peut se trouver derrière un proxy qui filtre les utilisateurs. Voici comment faire passer son script.

HTTP ou HTTPS

// URL des données à récupérer
$url = 'http://www.example.com/';
// Encodage de l'autentification
$authProxy = base64_encode('user:pass');
// Création des options de la requête
$opts = array(
	'http' => array (
		'method'=>'GET',
		'proxy'=>'tcp://192.168.0.99:3128',
		'request_fulluri' => true,
		'header'=>"Proxy-Authorization: Basic $authProxy"
	),
	'https' => array (
		'method'=>'GET',
		'proxy'=>'tcp://192.168.0.99:3128',
		'request_fulluri' => true,
		'header'=>"Proxy-Authorization: Basic $authProxy"
	)
);
// Création du contexte de transaction
$ctx = stream_context_create($opts);
// Récupération des données
$content = file_get_contents($url,false,$ctx);

Cas 6 : Proxy avec authentification et page avec authentification

Voici un des cas les plus complexes lorqu’il est question de récupérer des données. J’ai rencontré ce problème lorsque j’ai fait un script pour récupérer mes logs chez OVH.

HTTP ou HTTPS

// URL des données à récupérer
$url = 'https://user:pass@www.example.com/';
// Encodage de l'autentification
$authProxy = base64_encode('user:pass');
// Création des options de la requête
$opts = array(
	'http' => array (
		'method'=>'GET',
		'proxy'=>'tcp://192.168.0.99:3128',
		'request_fulluri' => true,
		'header'=>"Proxy-Authorization: Basic $authProxy"
	),
	'https' => array (
		'method'=>'GET',
		'proxy'=>'tcp://192.168.0.99:3128',
		'request_fulluri' => true,
		'header'=>"Proxy-Authorization: Basic $authProxy"
	)
);
// Création du contexte de transaction
$ctx = stream_context_create($opts);
// Récupération des données
$content = file_get_contents($url,false,$ctx);

Conclusion

Les exemples présentés ne se limitent aux cas typique de récupération de pages distantes. Ces cas seront satisfaisant dans la plupart des cas. Si vous rencontrez un cas non décrit dans cet article vous trouverez peut être de l’aide ici. Et si vous avez toujours des problèmes vous pouvez me demander de l’aide dans les commentaires. 😉