Parser un fichier RSS/Atom en Python

Python Aucun commentaire »

Sûrement vous avez déjà eu besoin de parser un document xml avec python , cela va être facile avec l’api DOM ou SAX fournis comme librairies standards avec python ,
mais si vous voulez parser un fichier RSS/Atom c’est plus la peine de passer par DOM ou SAX , il existe un module python qui est fait pour ça et qui facilite bien les choses
le module s’appel feedparser écrit par mark pilgrim l’auteur de ‘dive into python’ lui même , ce module utilise l’API SAX mais si elle n’est pas disponible chez vous , il va parcourir le flux en utilisant des expressions régulières donc ça marche toujours.

Feedparser est très facile à utiliser voici un exemple d’utilisation basique :

>>> from feedparser import parse
>>> myfeed = parse(”http://codemark.tuxfamily.org/feed”)
Pour avoir des informations relatives au feed lui même
>>> print myfeed[’feed’][’title’]
CodeMark
>>> myfeed[’feed’][’title’] #le résultat est toujours en unicode
u’CodeMark’
>>> myfeed.feed.title
u’CodeMark’
>>> myfeed.feed.link
u’http://codemark.tuxfamily.org’

Et on peut facilement parcourir tout les entrés existants

>>> for item in myfeed[’entries’]:
print item.title

Un autre Module Netvibes : TinyURL !
SOAP en Python
Librairie de validation javascript < 1Ko
Présentation de CookieCrumbler sous Zope

le module est disponible en téléchargement ici , avec une documentation complète

Partager cet article : Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Technorati
  • Digg
  • del.icio.us
  • blogmarks
  • Scoopeo
  • BlinkList
  • Furl
  • Reddit
  • Ma.gnolia
  • Slashdot
  • YahooMyWeb
  • Bumpzee
  • Spurl
  • Netscape
  • Book.mark.hu

SOAP en Python

Python, tutoriels 5 Commentaires »

SOAP ?

Le SOAP (Simple Object Access Protocol) est un protocole d’échange d’information entre deux objets distants en format xml, il permet d’appeler une fonction distante et de récupérer son résultat .

Plusieurs sites publient leurs services pour qu’il soit accessible à tout le monde par exemple : altavista (service de traduction) , google (recherche ..) …

Donc l’utilisation du SOAP réside dans le faite d’appeler une ou plusieurs fonctions et d’en récupérer le résultat , mais le problème c’est que pour un service quelconque on connais pas les fonctions disponibles et même si on les connais , il nous faut bien savoir les paramètres qu’on doit passer à cette fonction , le typage etc , c’est pourquoi chaque service web utilisant SOAP, publie un fichier xml qui contient touts les fonctions disponibles et leur paramètres , leur type et l’objet en retour , ce fichier xml est structuré de manière que tout les clients SOAP puissent comprendre son contenu , c’est une normalisation standard appelé WSDL (Web Services Description Language).

Dans ces lignes qui vont venir je vais illustrer l’utilisation de SOAP en python à l’aide du module SOAPpy .

Comme vous le savez déjà python rend la programmation un jeux d’enfant , pour interroger un servce web rien de plus facile , plusieurs modules sont disponible pour atteindre notre but , (SOAPpy , ZSI ..) , j’ai choisi d’utiliser SOAPpy .

SOAPpy est disponible en téléchargement ici , et n’oublier pas d’installer PyXML et fpconst avant de procéder à l’installation de SOAPpy , maintenant passant au code :

Pour démarrer un service web rudimentaire :

Le serveur

>>> import SOAPpy

>>> def helloworld():

return “Hello World !”

>>> server = SOAPpy.SOAPServer((”127.0.0.1″, 80))

>>> server.registerFunction(helloworld)

>>> server.serve_forever()

Le client :

>>> import SOAPpy

>>> server = SOAPpy.SOAPProxy(”http://127.0.0.1:80/”)

>>> print server.helloworld()

Simple non ?

Maintenant on va faire quelque chose de plus intéressant

Altavista possède un service web SOAP , qui va nous permettre de faire une traduction sur un texte , donc on a besoin de connaître la fonction qu’on doit appeler et les paramètres à passer non ? on a besoin donc besoin du fameux fichier wsdl .

On a donc notre fichier wsdl , il contient tout ce qu’on veux savoir il contient aussi l’adresse le service web SOAP de babelfish .

On va commencer par récupérer toutes les fonctions fournis dans ce fichier

>>> from SOAPpy import WSDL

>>> fichier_wsdl = ‘http://www.xmethods.net/sd/2001/BabelFishService.wsdl’

>>> wsdl = WSDL.Proxy(fichier_wsdl)

>>> print wsdl.methods.keys()

[u’BabelFish’]

>>>

l’objet wsdl nous fourni une liste nommée methodes , qui contient toutes les fonctions trouvés dans le fichier de définition wsdl

voici le code si on veux connaître comment utiliser cette fonction :

>>> info = wsdl.methods[’BabelFish’]

>>> for param in info.inparams:

print param.name , ‘:’ , param.type

translationmode : (u’http://www.w3.org/2001/XMLSchema’, u’string’)

sourcedata : (u’http://www.w3.org/2001/XMLSchema’, u’string’)

>>> for param in info.outparams:

print param.name , ‘:’ , param.type

return : (u’http://www.w3.org/2001/XMLSchema’, u’string’)

donc d’après le fichier wsdl , altavista nous fournis une seule fonction nommée BabelFish qui reçoit deux paramètres le premier translationmode (le mode de traduction) et le deuxième sourcedata (le texte à traduire) .

on va appeler cette fonction pour traduire un texte en français vers l’anglais

>>> resultat = wsdl.BabelFish(’fr_en’,'oui , non , quoi , comment ?’)

>>> print resultat

yes, not, what, how?

Voilà donc notre texte traduit

Ressources :

xmethodes et programmableweb : pour une liste de services web

http://www.xmethods.net/tryit.html?url=VOTRE_FICHIER_WSDL : pour tester un service web directement

soapUI : un utilitaire open source pour développer et tester votre service web

Partager cet article : Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Technorati
  • Digg
  • del.icio.us
  • blogmarks
  • Scoopeo
  • BlinkList
  • Furl
  • Reddit
  • Ma.gnolia
  • Slashdot
  • YahooMyWeb
  • Bumpzee
  • Spurl
  • Netscape
  • Book.mark.hu

Présentation de CookieCrumbler sous Zope

Python, Zope / Plone Aucun commentaire »

CookieCrumbler est un produit Zope/Plone, cet article est consacré à zope seulement, à voir que c’est la même chose dans Plone.

Présentation :

CookieCrumbler est un produit qui permet de s’authentifier en utilisant un formulaire que vous aller créer vous même au lieu d’avoir la fenêtre classique de Zope.

Fonctionnement :

CookieCrumbler comme sont nom l’indique utilise les cookies pour se rappeler de vous, le nom de la cookie est modifiable mais il est conseillé de la laisser avec sa valeur par défaut ‘__ac’

Le cookie créé contient vos informations d’authentification donc variable=valeur, le nom de la variable on le connais comme indiqué avant ‘__ac’, et la valeur c’est ‘votre identifiant, deux point, votre mot de passe’ et tout ça crypté en base64

Par exemple si votre login est : toto et votre mot de passe est : 123 cela donne __ac=toto:123 crypté en base64 ce qui donne : __ac=dG90bzoxMjM=

Voici le code python qui nous a donné ce résultat :
(1) >>> from base64 import encodestring as encode

(2) >>> print encode(’toto:123′).strip(’\n’)

dG90bzoxMjM=

>>>

Explication du code :

(1) : on importe la fonction encodestring du module base64

(2) : on appel la fonction en lui passant comme paramètre notre chaîne, le .strip sert à enlever le retour à la ligne renvoyé par l’instruction.

vous n’aurez pas besoin de faire tout ça , c’est le CookieCrumbler qui va s’encharger , je vous est juste donné une explication pour savoir comment il stock vos informations dans le cookie.

Pour savoir que votre login et mot de passe est correct CookieCrumbler le cherche dans l’acl_users

Usage :

Pour utiliser CookieCrumbler, commencez d’abord par télécharger la dernière version du produit ici, et installer là.

Une fois que c’est fait redémarrer votre instance Zope et ajouter le depuis la zone de sélection de produits

Entrer un Id et cliquer sur ajouter. Vous pouvez choisir de créer automatiquement les formulaires par défaut de CookieCrumbler, dans notre cas en vas pas en ajouter.

Pour configurer votre gestionnaire de cookie cliquer sur l’onglet Properties et c’est ici ou se trouve tout le travail à faire.

CookieCrumbler vous invite donc à entrer quelque information de votre formulaire :

Authentication cookie name : c’est le nom de la cookie qui va être créé

User name form variable : le nom du champ texte qui contient le login

User password form variable : le nom du champ texte qui contient le mot de passe

Ces trois informations sont suffisant pour commencer, créer donc votre formulaire de login , qui va directement envoyer vers la page que vous voulez protéger , ne faites aucune vérification de login et mot de passe c’est CookieCrumbler qui s’en charge

Pour mieux comprendre comment ça se passe , voici un vidéo tutorial que j’ai fait .

La vidéo illustre aussi la notion de roles est son utilisation basique avec CookieCrumbler

L’affichage est petit dans le streaming, téléchargez ici la vidéo dans ses dimensions réelle , taille (3Mo)

Télécharger ici le projet source en zexp.

Voila !

Partager cet article : Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Technorati
  • Digg
  • del.icio.us
  • blogmarks
  • Scoopeo
  • BlinkList
  • Furl
  • Reddit
  • Ma.gnolia
  • Slashdot
  • YahooMyWeb
  • Bumpzee
  • Spurl
  • Netscape
  • Book.mark.hu

Utilisation des sockets avec python

Python, Securité Aucun commentaire »

Python n’est pas seulement un langage pour faire des traitements sur les chaînes de caractères, mais aussi pour construire des applications beaucoup plus intéressantes.

Dans cet article je vais essayer d’ullistrer l’utilisation des socket avec python à travers quelques lignes de code.

Avec un minimum de bagage en TCP/IP, tout le monde sais que pour établir une connexion entre deux machines ils nous faut d’abord un protocole de transfert de donnée, puis une trame qui va envoyer notre information et bien sur l’adresse des deux machines, chacune de ces deux machines doit impérativement avoir un port ouvert pour établir la communication.

Dans cet exemple on va utiliser python pour faire un script simple avec deux fonctions la première va scanner les ports ouverts d’une ip donnée et les afficher, la deuxième va essayer d’établir une connexion avec un serveur Web et de nous renvoyer son ‘Header’.

Dans ce script le protocole utilisé est TCP, si vous souhaiter utiliser l’UDP vous n’avez qu’à remplacer SOCK_STREAM par SOCK_DGRAM .
Je vous laisse examiner le code et j’espère qu’il est suffisamment commenté.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import httplib, socket #l'import de module necessaires
 
from socket import error
maxp = 100 #le numero de port maximum =&gt; de 0 jusqu'a 1000
timeout = 2. #si notre trame n'a pas pu etablir
#une connexion dans 2 secondes , donc le port est fermé
def scan(h):
    print "Starting Scann ...nOpen Ports In %s Are :" % (h)
    print '&lt; Port &gt;'
    p = 0
    while p &lt;= maxp:
        try:
	    #creation de notre socket en TCP
		s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	    s.settimeout(timeout) #definition du timeout
            s.connect((h,p)) #ici la trame va essayer de se connecter
            print ' ', p
	    s.close()
	    p+= 1
	#exception levée quand la trame n'arrive pas a se connecté
	except socket.error:
            s.close()
	    p+= 1
    print "Scan Complete For : [%s]" %(h)
 
#deuxième fonction qui va nous retourner le HEADER d'un server web
def scansrv(h):
	#connexion avec le serveur
    con = httplib.HTTPConnection(h, 80)
    print "Trying To Scan : %s" %(h)
    try:
        con.request('HEAD', '/') #on essaye d'avoir le HEADER
	#exception levée quand le port 80 est fermé ou quand l'IP est down
    except error:
        print "Can't Connect To : %s" %(h)
    else:
		#sinon si tout marche bien , on recupère la réponse
        response = con.getresponse()
		con.close
		#puis on recupere le HEADER et on l'affiche
        server = response.getheader('Server', 'Version du serveur inconnu')
        print "[%s], Is Running : %s" %(h,server)

Ces deux fonctions sont extraites de Perfect-Scanner, un scanner de port que j’avais codé ça fait un bout de temps, vous pouvez télécharger le script complet ici et vaux mieux le tester dans une machine linux, car sous Windows ça peut planter sauf si vous spécifier un intervalle de ports pas supérieur à 1000 avec un timeout d’une demi seconde.

Ce problème sous Windows peut être facilement réglé si on utilise les Threads d’exécution, sinon sous linux ça marche déjà bien !

le script est en GPL et il est là pour des raisons purement educatives.

Et voici ce que ça donne sous Windows

Starting Scann ...
Open Ports In 127.0.0.1 Are :
&lt; Port &gt;
  80
Scan Complete For : [127.0.0.1]
&gt;&gt;&gt;
Trying To Scan : 127.0.0.1
[127.0.0.1], Is Running : Apache/1.3.33 (Win32) PHP/4.3.10

Voila !

Partager cet article : Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Technorati
  • Digg
  • del.icio.us
  • blogmarks
  • Scoopeo
  • BlinkList
  • Furl
  • Reddit
  • Ma.gnolia
  • Slashdot
  • YahooMyWeb
  • Bumpzee
  • Spurl
  • Netscape
  • Book.mark.hu