Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/01/2015, à 14:50

OUARZA

Réécrire fichier php pour script shell

Bonjour,
Je souhaite réécrire un script php pour l’exécuter en script shell.
En fait je tente de faire le module météo pour le karotz, j'ai pas l'impression que le php soit reconnu...
L'idée de mon script c'est d'aller chercher des infos de l'url http://www.prevision-meteo.ch/services/json/Paris une version XML est possible, puis de les réinjecter dans l'url http://localhost/cgi-bin/tts?voice=alice&text=".$replacetoday."&nocache=1
Pouvez-vous m'aider ?
Merci.

<?php
$json = file_get_contents('http://www.prevision-meteo.ch/services/json/Ville');
$json = json_decode($json); 

$today = "A Ville, aujourd'hui il fait ".$json->current_condition->tmp." degrés et les conditions sont ".$json->current_condition->condition.".";

$replacetoday=str_replace(" ","%20",$today);

$url = "http://localhost/cgi-bin/tts?voice=alice&text=".$replacetoday."&nocache=1";
$lapin = file_get_contents("$url");

?>

Hors ligne

#2 Le 17/01/2015, à 16:33

Watael

Re : Réécrire fichier php pour script shell

Je souhaite réécrire un script php pour l’exécuter en script shell.

tu devrais peut-être t'adresser au forum adéquat : Terminal, scripts et ligne de commande
lol
ok je sors !

+ sérieusement : si tu ne dis pas que tu veux le faire faire en python, tu risques d'avoir ce type de réponse.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 17/01/2015, à 16:48

voxdemonix

Re : Réécrire fichier php pour script shell

Et pourquoi pas:
tu télécharges la page avec wget, tu la tapes dans une variable que tu analyses avec grep pour retirer les infos dont tu as besoin et tu relances wget avec les variables précédemment créées.

infos:  http://openclassrooms.com/courses/repre … es-donnees

Dernière modification par voxdemonix (Le 17/01/2015, à 16:49)

Hors ligne

#4 Le 17/01/2015, à 16:58

OUARZA

Re : Réécrire fichier php pour script shell

@Watael : Peut importe le langage du moment qu'il est lu par le Karotz wink
@voxdemonix : Quelque chose comme cela ?

wget "http://www.prevision-meteo.ch/services/json/Ville" > $DONNEES
grep tmp $DONNEES > $temp
wget "http://localhost/cgi-bin/tts?voice=alice&text="$temp"&nocache=1"

Hors ligne

#5 Le 17/01/2015, à 17:06

voxdemonix

Re : Réécrire fichier php pour script shell

Ouai je pensais a un truc dans ce genre (avec genre un IF en plus pour vérifier que ton grep a bien fonctionner avant de lancer le second wget).

un peu plus d'infos :
pour wget: http://stackoverflow.com/questions/1157 … t-variable
et ici http://askubuntu.com/questions/25599/ge … a-variable
voila un exemple pour stoker la réponse du wget dans une variable (prise dans le lien précédent).

RESULT="`wget -qO- http://example.com`"

Edit: ici on t'explique comment faire une pipe entre wget et grep (qui permet d'éventuellement tout faire en une seule ligne de bash)
http://ubuntuforums.org/showthread.php?t=1590495

PS: au faite, quand tu veux lancer un script php dans le shell comme un script bash, tu dois mettre ceci au debut de ton script: #!/usr/bin/php

Dernière modification par voxdemonix (Le 08/10/2020, à 15:57)

Hors ligne

#6 Le 17/01/2015, à 17:14

OUARZA

Re : Réécrire fichier php pour script shell

Comme ça ?

RESULT="`wget -qO- http://www.prevision-meteo.ch/services/json/Ville`"
grep tmp $RESULT > tmp
grep condition $RESULT > cond
wget "http://localhost/cgi-bin/tts?voice=alice&text=Il fait "$tmp" degrés et les conditions sont "$cond" &nocache=1"

Je sais pas trop comment mettre le IF.

Le plus simple serait que Karotz intègre le PHP...

Dernière modification par OUARZA (Le 17/01/2015, à 17:19)

Hors ligne

#7 Le 17/01/2015, à 17:37

voxdemonix

Re : Réécrire fichier php pour script shell

bah si c'est un linux tu peux l'installer et pour lancer un script php a partir d'un terminal/shell tu ajoutes #!/usr/bin/php au début du scripts php que tu va lancer (pas dans ceux en include).

voici un exemple pour récupérer des interfaces réseaux, adapte en fonction de ta recherche
temporaire=$( echo $variable | grep -o -P -T '(wlan.(0-9)*)|(eth.(0-9)*)|(hci.(0-9)*)')

RESULT="`wget -qO- http://www.prevision-meteo.ch/services/json/Ville`"
temporaire=$( echo $variable | grep -o -P -T '(Ta_Recherche)*)')
RETOUR="`wget -qO- http://localhost/cgi-bin/tts?voice=alice&text=$temporaire"
if [ $RETOUR ]; then
  echo "page telechargee"
else
  echo "a marche pas"
fi

Pour tes conditions j'ai pas trop compris mais tu as un exemple de if que tu peux adapter ^^

Dernière modification par voxdemonix (Le 17/01/2015, à 17:39)

Hors ligne

#8 Le 17/01/2015, à 17:52

OUARZA

Re : Réécrire fichier php pour script shell

Comment l'installer ?
Dans le dossier /usr/bin j'ai déjà des choses, il faut juste mettre un fichier ?

Hors ligne

#9 Le 17/01/2015, à 18:28

Watael

Re : Réécrire fichier php pour script shell

salut voxdemonix,

il est question de parser un fichier JSON, je doute que grep suffise (t'as regardé la tronche du fichier dont il est question ? en gros il n'y a qu'une seule ligne.), c'est pourquoi j'ai recommandé à OUARZA de s'adresser à un forum dont les langages qui y sont traités peuvent importer des bibliothèques ad'hoc, comme python, qui me semble le mieux à même d'extraire en une passe plusieurs infos d'un fichier JSON, qui dépendent du "sous-embranchement" où elles se trouvent.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 17/01/2015, à 19:23

OUARZA

Re : Réécrire fichier php pour script shell

Cela me dépasse beaucoup, c'est pour cela que je me permets de vous demander de l'aide.
Si je peux installer php sur le Karotz, ça serait plus simple.

RESULT="`wget -qO- http://www.prevision-meteo.ch/services/json/Paris`"
temp=$( echo $variable | grep -o -P -T '(tmp)*)')
cond=$( echo $variable | grep -o -P -T '(condition)*)')
RETOUR="`wget -qO- http://localhost/cgi-bin/tts?voice=alice&text=Il fait actuellement "$temp" degrés. Le temps est "$cond""
if [ $RETOUR ]; then
  echo "page telechargee"
else
  echo "a marche pas"
fi

J'ai un doute sur l'intégration des variables dans le lien.

Hors ligne

#11 Le 17/01/2015, à 19:40

Watael

Re : Réécrire fichier php pour script shell

moi, j'ai un doute sur la validité et la valeur de ce code.

l'as-tu testé pas-à-pas pour observer ce qu'il fait, comment il le fait, et si le résultat est bien celui que tu souhaites ?

parce que copier du code comme ça (sans le comprendre, ni le tester), et le coller dans ton système est périlleux !

Dernière modification par Watael (Le 17/01/2015, à 20:01)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 17/01/2015, à 23:54

Watael

Re : Réécrire fichier php pour script shell

au fait :

j'ai pas l'impression que le php soit reconnu

d'où vient cette impression ?
parce que, si ça se trouve, karotz supporte le php, mais le code n'est pas correct/complet, ou autre...

comment ça marche ? il suffit de renseigner la variable $lapin pour que ça fonctionne ?
le script doit être déposé à un endroit précis du système de fichier ?

Dernière modification par Watael (Le 18/01/2015, à 00:29)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 18/01/2015, à 10:40

OUARZA

Re : Réécrire fichier php pour script shell

Hello,
Je n'ai pas de fichier php dans le dossier /bin/ du Karotz.
Quand j’exécute le fichier en telnet :

-bash-4.1# /usr/www/meteo.php
: No such file or directory ?php
/usr/www/meteo.php: line 2: syntax error near unexpected token `('
/usr/www/meteo.php: line 2: `$json = file_get_contents('http://www.prevision-met'o.ch/services/json/Paris');

/usr/www : Contient toute les pages web de l’interface
/usr/www/cgi-bin : Contient tous les scripts de commandes

Pour que Karotz parle et donne les infos, il faut juste lancer l'url http://localhost/cgi-bin/tts?voice=alice&text=Bonjour

Hors ligne

#14 Le 18/01/2015, à 12:01

Watael

Re : Réécrire fichier php pour script shell

lancer l'url

???

apparemment, l'interpréteur (bash4.1) tente d'interpréter le fichier comme un script shell, il faut, soit appeler le script php avec php (php -f /chemin/script, à vérifier), soit ajouter un ashbang au début du fichier, afin que le noyau sache quel programme utiliser pour interpréter ce script.

y a-t-il d'autres scripts, qui fonctionnent ? alors, tu pourrais t'appuyer sur leur contenu pour adapter ton script.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#15 Le 18/01/2015, à 13:13

OUARZA

Re : Réécrire fichier php pour script shell

php n'est pas reconnu en tant que commande.
Les autres scripts ne font pas appel à une url externe.

Hors ligne

#16 Le 18/01/2015, à 13:30

Watael

Re : Réécrire fichier php pour script shell

ne nous pas pas trop de détails, on pourrait croire que tu fais quelques efforts pour résoudre ton problème en parallèle sad

php n'est pas reconnu en tant que commande

quel est le message d'erreur ?

Les autres scripts ne font pas appel à une url externe.

mais, ils sont en php ? et ils fonctionnent ?

et le python? c'est bon le python ? tu as fait quelques tests basiques pour vérifier qu'il est utilisable ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#17 Le 19/01/2015, à 15:09

OUARZA

Re : Réécrire fichier php pour script shell

Bonjour,
Je tente au mieux de vous donner tous les détails pour trouver une solution.
Sur le Kartoz, j'ai mis 2 fichiers:
- meteo qui est un fichier shell

#!/bin/bash
#!/bin/php

source /www/cgi-bin/setup.inc
source /www/cgi-bin/url.inc
source /www/cgi-bin/url_ext.inc
source /www/cgi-bin/utils.inc
source /www/cgi-bin/tts.inc
source /www/cgi-bin/leds.inc
source /www/cgi-bin/ears.inc
source /www/cgi-bin/webcam.inc

wget "http://localhost/cgi-bin/meteo.php"

- meteo.php qui est le script php

<?php
$json = file_get_contents('http://www.prevision-meteo.ch/services/json/clermont-ferrand');
$json = json_decode($json); 

$today = "A Clermont-Ferrand, aujourd'hui il fait ".$json->current_condition->tmp." degrés et les conditions sont ".$json->current_condition->condition.".";

$replacetoday=str_replace(" ","%20",$today);

$url = "http://localhost/cgi-bin/tts?voice=alice&text=".$replacetoday."&nocache=1";
$lapin = file_get_contents("$url");

?>

Pour tester, via telnet, je lance le fichier shell:

-bash-4.1# /usr/www/cgi-bin/meteo
Connecting to localhost (127.0.0.1:80)
wget: can't open 'meteo.php': File exists

Si je remplace wget par curl, dans la fenêtre du terminal, je me retrouve avec l'intégralité du script php d'affiché dans le terminal.
Si je lance la commande :

-bash-4.1# php /usr/www/cgi-bin/meteo.php
-bash: php: command not found

Les autres scripts ne sont pas en php, par exemple:

#!/bin/bash

source /www/cgi-bin/setup.inc
source /www/cgi-bin/utils.inc
source /www/cgi-bin/leds.inc

# /usr/openkarotz/Run/karotz.check
IP_TEST=$(ip route | awk '/default/ { print $3 }')
if [ -e  "$CNF_DATADIR/Run/karotz.check" ]; then
	if [ ! -e "$CNF_DATADIR/Run/karotz.sleep" ]; then
   		ping $IP_TEST -c 3 -q  >>/dev/null 2>>/dev/null
   		if [ ! $? -eq 0 ]; then
     			Leds FF0000 0000FF 1 1 100 
     			Log "[SYSTEM]"  "Check Network Health - Reboot " 1
     			/sbin/reboot     
  		else
			LedsRestore
     			Log "[SYSTEM]"  "Check Network Health ($IP_TEST) - OK"
 	 	fi
	fi
fi

Pour le Python, voici sa version: Python 2.4.5

Hors ligne

#18 Le 19/01/2015, à 17:05

Watael

Re : Réécrire fichier php pour script shell

wget: can't open 'meteo.php': File exists

manifestement, meteo.php existe déjà  à l'endroit d'où tu exécutes le script, et la commande wget.

le code php est exécuté par le serveur HTTP; pour qu'un script php soit exécuté sur la ligne de commande, il faut php-cli, si j'ai bien compris.

donc, il te faut un script shell (parce qu'il faut sourcer des modules karotz, mais sont-ils indispensables en l'occurrence ?), qui contient :
- une partie du script shell qui télécharge et met en forme les données depuis http://prevision-meteo.ch (cela nécessite un langage qui dispose de bibliothèques capables de traiter le JSON, ou le XML, donc, python, perl, quoi d'autre),
- une partie qui appelle la page (locale) du karotz avec les données récupérées, et mises en forme précédemment.

il me semble que les modules karotz ne sont pas utiles (car il n'est question que d'envoyer des données au karotz en http qui se chargera d'exécuter les instructions en utilisant les modules inscrits dans ses scripts), et que, donc, tout cela est faisable en python.
ce ne sera pas très long d'apprendre les rudiments de ce langage pour faire ça.
et ça pourra t'être utile ultérieurement.

mais pourquoi personne, ici, n'est prêt à le faire pour toi ...?
moi, je ne vais évidemment pas m'y coller alors que je ne me sers habituellement pas de tout ça sad

Dernière modification par Watael (Le 19/01/2015, à 17:15)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne