API do Boo Box em Python

15/04/2008

Link: http://www.boo-box.com/blog/br/2007/agora-temos-api/

Parece que eu andei um tanto desatualizado. Só essa semana que eu reparei que o boo-box tinha uma API. Apesar da API ser simples, resolvi implementar uma API de alto nível para ela, em Python. Ficou assim:


import boo_box
from boo_box.affiliates import submarino
boo = boo_box.Box(submarino,'248960').get('XML','livros xml')
 

Isso retorna os itens no formato XML. Além disso, existe a possibilidade de retornar uma string json, ou retornar um objeto do python (um dicionário). Para tanto, você precisa do simplejson também instalado.

O projeto está no assembla, e pode ser acessado em: http://www.assembla.com/wiki/show/py_boo_box

O repositório pode ser acessado em http://hg.assembla.com/py_boo_box, e como o nome denuncia, está no mercurial.

Para instalar, você pode tanto baixar do repositório quanto do Pypi, com o comando:

easy_install boo_box

Para quaisquer dúvidas ou sugestões, não hesitem em me contatar!


Email por Walter Cruz em web 2.0
Tags: api, assembla, boo-box, python, web 2.0, xml

Planets, google reader e itens repetidos nos feeds

12/02/2008
Menino chorando

Há algum tempo atrás, o Sérgio Lima publicou um texto no webinsider com algumas considerações a respeito do que ele esperava de um leitor de feeds.

A minha reclamação é bem mais simples que a dele: é sobre os itens repetidos que eu recebo no meu leitor de feeds. Por exemplo, eu acabei de receber, pelo feed do Planet Python a notícia sobre o sprint do Turbo Gears 2, que acontecerá no dia 23 de fevereiro. Rolando um pouco a tela para baixo, vejo a mesma notícia no Planet Turbogears. O meu leitor de feeds não sabe que os dois posts são o mesmo. Eu já o li, mas o segundo ainda é mostrado como não lido. Culpa minha de assinar feeds de planets que agregam muitos blogs em comum? Sim e não. Com o google reader ainda há um agravante: o fato de usuários poderem compartilhar itens entre si. Provavelmente eu vá receber a mesma notícia daqui a alguns instantes, compartilhada por algum companheiro pythonista por aí.

O que eu queria é que a notícia fosse vista pelo leitor de feed de uma forma única, não importando a fonte de onde ele veio. E que se eu marcasse-a como lida, que ela estivesse marcada como lida em todas os lugares onde ela aparecesse. Será que estou viajando na maionese?

(Imagem retirada de http://www.spillingcoffee.com/)


Email por Walter Cruz em Google, web 2.0, Geek life
Tags: feed, google reader, python, rss, web2.0, xml

ElementTree, XML, Namespaces e Prefixos

15/05/2007

Essa semana eu precisei lidar com alguns arquivos XMI usando Python. Usei o ElementTree, que é uma API pra XML que foi incorporada recentemente ao core do Python (Python2.4).

Uma das coisas legais do elementTree é a forma de encontrar elementos: o método find. Porém, com o arquivo XMI não estava funcionando. O problema: XML Namespaces.

Namespaces em XML são uma recomendação da W3C. Por exemplo, você pode ter um XML que use partes para representar partes de um avião, um outro que use partes para representar partes de uma escrivaninha e outro que use partes para representar partes de um carro. A solução, descrita por James Clark, é adicionar antes da tag uma URI que seja o namespace dela.

Isso posto, voltemos ao meu querido XMI :P .

Lá no começo do arquivo XMI, tem xmlns:UML="http://schema.omg.org/spec/UML/1.3".

A busca:


content.find('Model')
 

não funciona.

O correto é:


print(content.find('{http://schema.omg.org/spec/UML/1.3}Model')
 

Coloquei um arquivo xmi de exemplo junto com um script python pra quem quiser testar. O xmi foi gerado com o Umbrello.

Não era tão difícil quanto parecia. Mas que espeta, espeta.B)


Email por Walter Cruz em Python, Programação
Tags: elementtree, geek, namespaces, python, xmi, xml

Trocando o background do gnome randomicamente

27/06/2006

Uma das coisas de que eu gostava quando usava windows era o webshots. Ele é um programa que baixa papéis de parede e os troca randomicamente, em uma periodicidade definida pelo usuário.

Resolvi enfrentar o problema no Linux usando Python. Como o Desktop que eu uso é o gnome, fui procurar onde ficava essa configuração.

O Miguel de Icaza, criador do gnome, é fã da Microsoft. Tanto, que criou no gnome um sistema parecido com o registro do windows, o http://www.gnome.org/projects/gconf/gconf, porém usando XML. Descobri que a entrada do papel de parede ficava num XML, no ~/.gconf/desktop/gnome/background . Fiz uma tentativa de versão inicial com o ElementTree (que será parte oficial do python 2.5, porém mesmo salvando o arquivo, as mudanças não aconteciam). Pra piorar, descobri hoje que aqui no trabalho a configuração do gconf não fica numa árvore de diretórios, mas, sim, em um único XML grandão.

Ok, ok, pesquisando aqui e ali, vi que é possível manipular o gconf diretamente no python (sem me procupar se o XML está em uma árvore ou em um único arquivo).

Após uns testes, o código (é possível de ser melhorado, e muito; ainda vou aprender threads :) poderia ter também a funcionalidade de baixar papéis de parede dalgum lugar, se eu soubesse de onde baixar. Por enquanto, basta colocar no crontab) :


import os
import gconf
import random

def randomImage():
  dirs = ('/usr/share/pixmaps/backgrounds/cosmos/',
          '/usr/share/pixmaps/backgrounds/gnome/branded/',
          '/usr/share/pixmaps/backgrounds/gnome/nature/',
          '/usr/share/pixmaps/backgrounds/gnome/translucent/'          )
  dir = dirs[random.randrange(0,len(dirs))]  
  lista = os.listdir(dir)
  rand = random.randrange(0,len(lista))
  rand = "".join([dir,lista[rand]])
  return rand

entry = gconf.client_get_default()
entry.set_string('/desktop/gnome/background/picture_filename',randomImage())
 

Email por Walter Cruz em Python, Linux, Ubuntu
Tags: gnome, xml