quinta-feira, 20 de dezembro de 2012

Como fazer o parse de um JSON em python

Como fazer o parse de um json para alimentar conteúdo ?

Na sua view que será responsável por buscar o conteúdo faça como abaixo:

def carga(request):
 import json
 from django.conf import settings

 json_data=open("%s/arquivo.json" % settings.MEDIA_ROOT).read()
 data = json.loads(json_data)

 retorno = ""

 for i in data['raiz']:
  retorno += "<h2>%s</h2>" % (i['titulo'],)

  for v in i['itens']:
   retorno += '--> %s: %s ' % (v['titulo'], v['valor'])
  retorno += '<hr>'

 return HttpResponse(retorno)

O exemplo acima retorna o conteúdo da seguinte forma:


Titulo1

--> Item titulo1: item valor1
--> Item titulo2: item valor2
--> Item titulo3: item valor3

Titulo2

--> Item titulo1: item valor1
--> Item titulo2: item valor2
--> Item titulo3: item valor3

Titulo3

--> Item titulo1: item valor1
--> Item titulo2: item valor2



hasta!

Como utilizar RSS de um site externo como fonte de conteúdo

Deseja colocar eu seu site o conteúdo de um RSS de um site externo?
Tarefa simples para o FeedParser (http://pypi.python.org/pypi/feedparser/)

Para tal, instale o FeedParser no seu ENV:
pip install feedparser

Na sua view que será responsável por buscar o conteúdo no site externo faça como abaixo:

def sua_view(request):
    import feedparser
    d = feedparser.parse('http://www.seu_site_externo.com.br/rss/')
    noticias = d['entries']
    VARS = {
        'noticias':noticias,
    }
    return render_to_response('noticias.html', VARS, context_instance=RequestContext(request))

E para acessar os conteúdos no template, utilize os dados conforme desejado, segue a lista dos atributos que o RSS retorna:
  • comments 
  • description
  • guidislink 
  • id
  • link 
  • links 
  • published 
  • published_parsed 
  • summary 
  • summary_detail 
  • tags 
  • title 
  • title_detail

hasta!

quarta-feira, 21 de novembro de 2012

Recuperando conteúdo de uma Tag HTML de uma URL

Recentemente precisei recuperar o conteúdo de uma tag html de uma URL para um propósito específico.

O Youtube, fez o favor de remover as famosas Tags dos vídeos de suas páginas, juntamente com o atributo de mesmo nome de sua API de integração. Com isso, não consegui mais peguar as tags para atualizar os vídeos de um projeto.

Percebi porém , que se procurasse no código fonte de cada página de vídeo, lá estavam a maioria, (senão todas) das tags no html <meta name="keywords">. Motivo pelo qual acredito que ainda esteja lá seria por busca e indexação dos vídeos.

Para recuperá-las, procurei algum pacote do python para fazer o parse do html e me deparei com o
Beautiful Soup. Ele pode ser instalado com o comando dentro do seu ENV:

pip install BeautifulSoup

E também possui uma documentação bem completa no link: http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html

Criei uma def para fazer o trabalho, vamos a ela:


def get_tags(youtube_id):

	response = urllib2.urlopen('http://www.youtube.com/watch?v=%s' % youtube_id )
	html = str( response.read() )

	xmlSoup = BeautifulStoneSoup(html)

	tags = xmlSoup.findAll(attrs={"name" : "keywords"})[0]
	tags = str(tags)
	tags = tags.replace('\n','')

	return tags


Será retornado uma string com o conteúdo da tag meta keywords, sendo possível fazer todos os tratamentos necessários, como transformar em uma tupla, inserir no banco, etc.

Para outras tags, recomendo uma olhada na documentação do BeautifulSoup, pois tem várias formas de encontrar o que deseja.

hasta!