Na semana passada estava precisando de uma biblioteca Python para realizar acesso a um web service SOAP. Fazendo uma rápida pesquisa encontrei algumas bibliotecas bem utilizadas, mas todas estavam muito desatualizadas, como a SOAPpy por exemplo, que não é atualizada desde 2005.
Quando já estava quase desistindo de encontrar algo atualizado que atendesse a minha necessidade, eu me deparo com essa biblioteca de nome suds. Fiquei positivamente surpreso ao encontrar uma biblioteca que além de ser atualizada e possuir uma boa documentação, representa toda a simplicidade e praticidade de Python.
Como muitos sabem, o protocolo SOAP é um protocolo de comunicação complicado, mas usando o suds tudo fica muito simples. Vejam só.
Para o nosso exemplo, vamos usar um web service que traz informações sobre a Copa do Mundo (eu sei, estou meio atrasado, mas vá lá, é só um exemplo). O endereço do serviço é: http://footballpool.dataaccess.eu/data/info.wso?WSDL. Vamos agora usar o suds para acessar esse serviço.
:::python
from suds.client import Client
url = "http://footballpool.dataaccess.eu/data/info.wso?WSDL"
cliente = Client(url)
print cliente
Simples assim e temos o cliente que representa o serviço com informações sobre a Copa do Mundo carregado em memória. A última linha do código acima serve para listar os métodos que esse serviço disponibiliza. O resultado é esse:
:::bash
Suds ( https://fedorahosted.org/suds/ ) version: 0.3.9 GA build: R659-20100219
Service ( Info ) tns="http://footballpool.dataaccess.eu"
Prefixes (1)
ns0 = "http://footballpool.dataaccess.eu"
Ports (1):
(InfoSoap)
Methods (41):
AllCards()
AllDefenders(xs:string sCountryName, )
AllForwards(xs:string sCountryName, )
AllGames()
AllGoalKeepers(xs:string sCountryName, )
AllGroupCompetitors()
AllMidFields(xs:string sCountryName, )
AllPlayerNames(xs:boolean bSelected, )
AllPlayersWithRedCards(xs:boolean bSortedByName, xs:boolean bSortedByRedCards, )
AllPlayersWithYellowCards(xs:boolean bSortedByName, xs:boolean bSortedByYellowCards, )
AllPlayersWithYellowOrRedCards(xs:boolean bSortedByName, xs:boolean bSortedByYellowCards, xs:boolean bSortedByRedCards, )
AllStadiumInfo()
Cities()
Coaches()
CountryNames(xs:boolean bWithCompetitors, )
DateLastGroupGame()
DateOfFirstGame()
DateOfLastGame()
FullTeamInfo(xs:string sTeamName, )
GameInfo(xs:int iGameId, )
GameResultCodes()
GamesPerCity(xs:string sCityName, )
GamesPlayed()
GoalsScored(xs:int iGameId, )
GroupCompetitors(xs:string sPoule, )
GroupCount()
Groups()
NextGame()
NumberOfGames()
PlayedAtWorldCup(xs:string sTeamName, )
RedCardsTotal()
StadiumInfo(xs:string sStadiumName, )
StadiumNames()
StadiumURL(xs:string sStadiumName, )
Teams()
TeamsCompeteList()
TopGoalScorers(xs:int iTopN, )
TopSelectedGoalScorers(xs:int iTopN, )
TournamentInfo()
YellowAndRedCardsTotal()
YellowCardsTotal()
Types (38):
ArrayOfString
ArrayOftCardInfo
ArrayOftCoaches
ArrayOftCountryInfo
ArrayOftCountrySelectedTopScorer
ArrayOftGameCard
ArrayOftGameInfo
ArrayOftGameResultCode
ArrayOftGoal
ArrayOftGroupInfo
ArrayOftGroupsCompetitors
ArrayOftPlayerNames
ArrayOftPlayersWithCards
ArrayOftStadiumInfo
ArrayOftTeamCompete
ArrayOftTeamInfo
ArrayOftTopGoalScorer
ArrayOftTopSelectedGoalScorer
tCardInfo
tCards
tCoaches
tCountryInfo
tCountrySelectedTopScorer
tFullTeamInfo
tGameCard
tGameInfo
tGameResultCode
tGoal
tGroupInfo
tGroupsCompetitors
tPlayerNames
tPlayersWithCards
tStadiumInfo
tTeamCompete
tTeamInfo
tTopGoalScorer
tTopSelectedGoalScorer
tTournamentInfo
Como podem perceber, esse serviço tem 41 métodos que eu posso acionar para obter informações sobre a Copa do Mundo. Vamos ver como eu posso usar esses métodos.
:::python
resultado = cliente.service.RedCardsTotal()
print resultado
O resultado impresso pelo trecho acima é: 17.
Vamos todos dar um viva à simplicidade do Python! :o)
Comentários