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 24/05/2015, à 14:23

lynn

[RESOLU] Variable dans un script python.

Bonjour,

Suite à ce sujet, j'aimerai intégrer l'icône du drapeau de l'I.P concernée dans le script afin d'obtenir ce résultat:
mini_150524030042323968.png mais je n'ai aucune idée de comment rendre cette partie variable en fonction de l'I.P du pays concerné.

Si quelqu'un a des idées ou des pistes où chercher, ça m'intéresse.

Merci.

Dernière modification par lynn (Le 25/05/2015, à 19:50)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 24/05/2015, à 14:54

Braun

Re : [RESOLU] Variable dans un script python.

Bonjour,
Bouffre l'I.P. d'un pays, même concerné ...
Tu pourrais tenter une reconnaissance de texte dans le nom de domaine mais l'I.P. j'ai un doute.

Hors ligne

#3 Le 24/05/2015, à 14:59

lynn

Re : [RESOLU] Variable dans un script python.

Braun a écrit :

Bonjour,
Bouffre l'I.P. d'un pays, même concerné ...
Tu pourrais tenter une reconnaissance de texte dans le nom de domaine mais l'I.P. j'ai un doute.

Ça vient peut-être de moi mais je n'ai absolument rien compris à ce que tu as écris... tongue


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 25/05/2015, à 13:37

soshy

Re : [RESOLU] Variable dans un script python.

Salut,

En cherchant sur internet, les services de géolocalisation que j'ai trouvé, beaucoup indiquent qu'ils utilisent geoIP de maxmind.
Ils ont l'air de maintenir une BDD à jour en gratuit : http://dev.maxmind.com/geoip/geoip2/geolite2/

Du coup, utiliser ça peut être un bon début pour trouver le pays. Par contre, je doute qu'ils fournissent les petits drapeaux...

Dernière modification par soshy (Le 25/05/2015, à 13:39)

Hors ligne

#5 Le 25/05/2015, à 14:53

lynn

Re : [RESOLU] Variable dans un script python.

bonjour soshy et merci pour cette piste mais elle ne correspond pas à ce que que souhaite faire. Mon but n'est pas de me géolocaliser ( cette partie étant déjà faite ) mais d'associer une icône à un résultat.

curl getip.fr/ip me renvoie mon ip; J'aimerais y associer l'icône du pays à côté de l'ip comme dans l'image dans mon premier post. Pour les drapeaux, pas besoin de les chercher dans une base de données puisque je les ai dans un répertoire, sur le disque dur de mon pc. Au cas ou le lien de mon premier post soit passé inaperçu, je me permet de poster ici le script en question:

#!/usr/bin/env python 
## A installer 
## sudo apt-get install curl python-appindicator python-gtk2 indicator-applet-complete
##
import os
import subprocess
import appindicator
import gtk
import sys

ICON = os.path.abspath("/home/$USER/bin/unity-ip-indicator-master/images/icon.png") # Remplacer "$USER" par votre nom d'utilisateur et adapter le chemin pour charger "icon.png".
PING_FREQUENCY = 15 # seconds

def get_ip():
        ip = subprocess.check_output("curl -s getip.fr/all | grep -E 'Country:|IP' | cut -d ':' -f2 | sort -r | awk -F: '{ printf \"%s \", $1}'| sed -e \"s/ / : /\"", shell=True)
    return ip.strip()


class IPIndicator:

    def __init__(self):
    self.ip = ""
    self.ind = appindicator.Indicator("ip-indicator", ICON, \
        appindicator.CATEGORY_APPLICATION_STATUS)
        self.ind.set_status(appindicator.STATUS_ACTIVE)
        self.update()
        self.ind.set_menu(self.setup_menu())
    
    def setup_menu(self):
        menu = gtk.Menu()
    refresh = gtk.MenuItem("Actualiser")
    refresh.connect("activate", self.on_refresh)
    refresh.show()
    menu.append(refresh)
    
    quit_item = gtk.MenuItem("Quitter")
    quit_item.connect("activate", self.quit)
    quit_item.show()
    menu.append(quit_item)
    return menu
       

    def main(self):
        gtk.main()

    def update(self):
        gtk.timeout_add(PING_FREQUENCY * 1000, self.update)
    ip = get_ip()
    if ip != self.ip:
        self.ip = ip
        self.ind.set_label(ip)

    def on_refresh(self, widget):
        self.update()

    def quit(self, widget):
        sys.exit(0)

if __name__ == "__main__":
    ip = IPIndicator()
    gtk.main()

Dernière modification par lynn (Le 25/05/2015, à 15:48)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#6 Le 25/05/2015, à 15:25

soshy

Re : [RESOLU] Variable dans un script python.

Je ne suis du coup pas bien sûr de comprendre ton problème.

Pour moi, la logique serait :
1 - récupérer l'ip dont il faut afficher le drapeau.
2 - géolocaliser pour récupérer le nom du pays
3 - réaliser une liste de correspondance { "nom pays" => chemin_vers_l_image } (soit un "dictionnaire" , ou un bête fichier contenant les correspondances, voir autre chose...)
4 - retrouver l'image en fonction du pays retrouvé par la géolocalisation de l'IP.

Après si ton problème c'est : "comment fait-on en python pour afficher l'image $HOME/img/france.jpg ?", ça ne ne peux pas t'aider car ce n'est pas quelque chose que je maîtrise.

Dernière modification par soshy (Le 25/05/2015, à 15:28)

Hors ligne

#7 Le 25/05/2015, à 15:26

lynn

Re : [RESOLU] Variable dans un script python.

Notez que j'ai bien une idée pour y arriver mais je ne sais pas comment mettre ça dans le script.

La commande "curl getip.fr/countrycode" renvoie le code du pays de l'ip; Dans mon exemple: FR.
Ensuite, il faudrait aller vérifier dans le répertoire d'icônes si un fichier s'appelle FR.png et de définir celui comme variable à la place de "icon.png"

ICON = os.path.abspath("/home/$USER/bin/unity-ip-indicator-master/images/icon.png")

NB: toutes les icônes des drapeaux que je possède ont leurs noms sous forme des codes pays internationaux
exemple FR.png IT.png DE.png etc


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#8 Le 25/05/2015, à 15:28

lynn

Re : [RESOLU] Variable dans un script python.

soshy a écrit :

Je ne suis du coup pas bien sûr de comprendre ton problème.

Pour moi, la logique serait :
1 - récupérer l'ip dont il faut afficher le drapeau.
2 - géolocaliser pour récupérer le nom du pays
3 - réaliser une liste de correspondance { "nom pays" => chemin_vers_l_image } (soit un "dictionnaire" , ou un bête fichier contenant les correspondances, voir autre chose...)
4 - retrouver l'image en fonction du pays retrouvé par la géolocalisation de l'IP.

Oui un truc dans le genre. smile Par contre, je ne sais pas comment intégrer cette idée dans le script... Voila mon problème.

Dernière modification par lynn (Le 25/05/2015, à 15:29)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#9 Le 25/05/2015, à 16:28

pingouinux

Re : [RESOLU] Variable dans un script python.

Bonjour,
Si j'ai bien compris, et si la variable ip contient les deux lettres du pays, essaye

ICON = os.path.abspath("/home/%s/bin/unity-ip-indicator-master/images/%s.png"%(os.environ['USER'],ip))

Ajouté : Tu connais déjà le chemin absolu, pourquoi appeler os.path.abspath

Dernière modification par pingouinux (Le 25/05/2015, à 16:32)

Hors ligne

#10 Le 25/05/2015, à 16:47

lynn

Re : [RESOLU] Variable dans un script python.

Bonjour pingouinux,

Ça me renvoie ça:

Traceback (most recent call last):
  File "./ip-dev.py", line 8, in <module>
    ICON = os.path.abspath("/home/%s/bin/unity-ip-indicator-master/images/%s.png"%(os.environ['USER'],ip))
NameError: name 'ip' is not defined

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#11 Le 25/05/2015, à 16:54

pingouinux

Re : [RESOLU] Variable dans un script python.

Il faut mettre à la place de ip le nom de la variable qui contient les deux lettres du pays, par exemple 'FR'.

Hors ligne

#12 Le 25/05/2015, à 17:11

lynn

Re : [RESOLU] Variable dans un script python.

pingouinux a écrit :

Il faut mettre à la place de ip le nom de la variable qui contient les deux lettres du pays, par exemple 'FR'.

Il faut que je crée une autre variable pour ça ? Je ne comprends pas...


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#13 Le 25/05/2015, à 17:25

pingouinux

Re : [RESOLU] Variable dans un script python.

lynn #7 a écrit :

La commande "curl getip.fr/countrycode" renvoie le code du pays de l'ip; Dans mon exemple: FR.

Si la variable contenant ce résultat n'existe pas, il faut la créer.

Hors ligne

#14 Le 25/05/2015, à 17:33

lynn

Re : [RESOLU] Variable dans un script python.

pingouinux a écrit :

Si la variable contenant ce résultat n'existe pas, il faut la créer.

Oui mais comment ? De quelle façon je l'intègre dans le script ?

Je crée une nouvelle variable dans ce style ?

CCODE = ("curl getip.fr/countrycode")


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#15 Le 25/05/2015, à 17:59

pingouinux

Re : [RESOLU] Variable dans un script python.

Je ne connais pas curl qui n'est pas installé chez moi, et je ne peux pas tester. Ce n'est pas toi qui a écrit le script ? J'ai l'impression qu'il faudrait regarder du côté de get_ip.

Hors ligne

#16 Le 25/05/2015, à 18:07

lynn

Re : [RESOLU] Variable dans un script python.

pingouinux a écrit :

Ce n'est pas toi qui a écrit le script ? J'ai l'impression qu'il faudrait regarder du côté de get_ip.

Non, je n'ai pas écris le script. Je ne fait que reprendre la base que j'essai d'adapter, tant bien que mal... Enfin plutôt mal que bien. tongue

Je vais regarder pour get_ip.


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#17 Le 25/05/2015, à 18:28

soshy

Re : [RESOLU] Variable dans un script python.

Voici un script qui devrait fonctionner.

#!/usr/bin/env python 
## A installer 
## sudo apt-get install curl python-appindicator python-gtk2 indicator-applet-complete
##
import os
import subprocess
import appindicator
import gtk
import sys

PING_FREQUENCY = 15 # seconds

# fonction qui retrouve le nom du pays et l'IP
def get_ip():
    ip = subprocess.check_output("curl -s getip.fr/all | grep -E 'Country:|IP' | cut -d ':' -f2 | sort -r | awk -F: '{ printf \"%s \", $1}'| sed -e \"s/ / : /\"", shell=True)
    return ip.strip()

# fonction qui retourne le code du pays
def get_country_code():
	country = subprocess.check_output("curl -s getip.fr/countrycode", shell=True)
	return country.strip()

class IPIndicator:

    def __init__(self):
        self.ip = ""
        self.ind = appindicator.Indicator("ip-indicator", "", appindicator.CATEGORY_APPLICATION_STATUS)
        self.ind.set_status(appindicator.STATUS_ACTIVE)
        self.update()
        self.ind.set_menu(self.setup_menu())
    
    def setup_menu(self):
		menu = gtk.Menu()
		refresh = gtk.MenuItem("Actualiser")
		refresh.connect("activate", self.on_refresh)
		refresh.show()
		menu.append(refresh)
		
		quit_item = gtk.MenuItem("Quitter")
		quit_item.connect("activate", self.quit)
		quit_item.show()
		menu.append(quit_item)
		return menu
       

    def main(self):
        gtk.main()

    def update(self):
		gtk.timeout_add(PING_FREQUENCY * 1000, self.update)
		ip = get_ip()
		
		if ip != self.ip: # lorsque l'ip change
			self.ip = ip
			self.ind.set_label(ip) # on met a jour le texte
			self.ind.set_icon("/home/tartanpion/Bureau/" + get_country_code() + ".jpg") # on met a jour l'icone

    def on_refresh(self, widget):
        self.update()

    def quit(self, widget):
        sys.exit(0)

if __name__ == "__main__":
    ip = IPIndicator()
    gtk.main()

Il faut de plus remplacer /home/tartanpion/Bureau/ par le chemin où se trouvent tes icones FR.jpg EN.jpg etc... et ça devrait rouler. Et si tes fichiers ne sont pas des .jpg, il faut aussi changer l'extension bien évidemment.

Dernière modification par soshy (Le 25/05/2015, à 18:31)

Hors ligne

#18 Le 25/05/2015, à 19:50

lynn

Re : [RESOLU] Variable dans un script python.

Un grand merci à toi soshi. Ça fonctionne parfaitement; C'est exactement ce que je voulais obtenir. cool

Merci à toi également pingouinux d'avoir pris le temps de me répondre. smile


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne