Random Board Game Selection Using Board Game Geek

Using Board Game Geek’s API I wanted to create a simple Python tool for randomly picking a game to play. Below is some quick Python code to achieve my goal:

from urllib2 import urlopen
from lxml import etree
from random import choice

def get_xml():
    req = urlopen('http://www.boardgamegeek.com/xmlapi/collection/flip387')
    return req

def get_items():
    xml = etree.parse(get_xml())
    return xml.xpath('//item')

def get_thumbnail(item):
    t = item.xpath('thumbnail')
    if len(t) == 1:
        return t[0].text

def get_name(item):
    t = item.xpath('name')
    if len(t) == 1:
        return t[0].text

def get_stats(item):
    t = item.xpath('stats')
    if len(t) == 1:
        return dict(t[0].items())

def get_minplayers(item):
    return get_stats(item).get('minplayers')

def get_maxplayers(item):
    return get_stats(item).get('maxplayers')

def get_playingtime(item):
    return get_stats(item).get('playingtime')

def get_as_dict(item):
    return dict(
        name=get_name(item),
        thumbnail=get_thumbnail(item),
        minplayers=get_minplayers(item),
        maxplayers=get_maxplayers(item),
        playingtime=get_playingtime(item)
    )

def get_games():
    items = get_items()
    return [get_as_dict(i) for i in items]

def get_random_game():
    games = get_games()
    return choice(games)

And using this would work like so:

In [1]: get_random_game()
Out[1]:
{'maxplayers': '6',
 'minplayers': '1',
 'name': 'Castle Panic',
 'playingtime': '60',
 'thumbnail': 'http://cf.geekdo-images.com/images/pic496923_t.jpg'}

In [2]: get_random_game()
Out[2]:
{'maxplayers': '6',
 'minplayers': '3',
 'name': 'Munchkin Pathfinder',
 'playingtime': '90',
 'thumbnail': 'http://cf.geekdo-images.com/images/pic1641599_t.jpg'}