#1 Le 17/01/2015, à 13: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, à 15: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
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, à 15: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, à 15:49)
Hors ligne
#4 Le 17/01/2015, à 15:58
- OUARZA
Re : Réécrire fichier php pour script shell
@Watael : Peut importe le langage du moment qu'il est lu par le Karotz
@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, à 16: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, à 14:57)
Hors ligne
#6 Le 17/01/2015, à 16: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, à 16:19)
Hors ligne
#7 Le 17/01/2015, à 16: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, à 16:39)
Hors ligne
#8 Le 17/01/2015, à 16: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, à 17: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, à 18: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, à 18: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, à 19:01)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Le 17/01/2015, à 22: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 17/01/2015, à 23:29)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 18/01/2015, à 09: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, à 11: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, à 12: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, à 12: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
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, à 14: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, à 16: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
Dernière modification par Watael (Le 19/01/2015, à 16:15)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne