Как использовать XML из веб-сервисов RESTful с использованием Django / Python? - PullRequest
3 голосов
/ 30 апреля 2009

Должен ли я использовать PyXML или что входит в стандартную библиотеку?

Ответы [ 3 ]

10 голосов
/ 30 апреля 2009

ElementTree предоставляется как часть стандартных библиотек Python. ElementTree - это чистый python, а cElementTree - более быстрая реализация на C:

# Try to use the C implementation first, falling back to python
try:
    from xml.etree import cElementTree as ElementTree
except ImportError, e:
    from xml.etree import ElementTree

Вот пример использования, где я использую XML из веб-службы RESTful:

def find(*args, **kwargs):
    """Find a book in the collection specified"""

    search_args = [('access_key', api_key),]
    if not is_valid_collection(kwargs['collection']):
        return None
    kwargs.pop('collection')
    for key in kwargs:
        # Only the first keword is honored
        if kwargs[key]:
            search_args.append(('index1', key))
            search_args.append(('value1', kwargs[key]))
            break

    url = urllib.basejoin(api_url, '%s.xml' % 'books')
    data = urllib.urlencode(search_args)
    req = urllib2.urlopen(url, data)
    rdata = []
    chunk = 'xx'
    while chunk:
        chunk = req.read()
        if chunk:
            rdata.append(chunk)
    tree = ElementTree.fromstring(''.join(rdata))
    results = []
    for i, elem in enumerate(tree.getiterator('BookData')):
        results.append(
               {'isbn': elem.get('isbn'),
                'isbn13': elem.get('isbn13'),
                'title': elem.find('Title').text,
                'author': elem.find('AuthorsText').text,
                'publisher': elem.find('PublisherText').text,}
             )
    return results
3 голосов
/ 30 апреля 2009

Я всегда предпочитаю использовать стандартную библиотеку, когда это возможно. ElementTree хорошо известен среди питонистов, поэтому вы сможете найти множество примеров. Его части также оптимизированы в C, так что это довольно быстро.

http://docs.python.org/library/xml.etree.elementtree.html

0 голосов
/ 27 февраля 2010

Также есть BeautifulSoup , который имеет API, который некоторые могут предпочесть. Вот пример того, как вы можете извлечь все твиты, которые были добавлены в публичную хронику Twitter:

from BeautifulSoup import BeautifulStoneSoup
import urllib

url = urllib.urlopen('http://twitter.com/statuses/public_timeline.xml').read()
favorited = []

soup = BeautifulStoneSoup(url)
statuses = soup.findAll('status')

for status in statuses:
    if status.find('favorited').contents != [u'false']:
        favorited.append(status)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...