Source code for poker.website.pokerstars

import attr
from dateutil.parser import parse as parse_date
import requests
from lxml import etree


__all__ = [
    "get_current_tournaments",
    "get_status",
    "WEBSITE_URL",
    "TOURNAMENTS_XML_URL",
    "STATUS_URL",
]


WEBSITE_URL = "http://www.pokerstars.eu"
TOURNAMENTS_XML_URL = WEBSITE_URL + "/datafeed_global/tournaments/all.xml"
STATUS_URL = "http://www.psimg.com/datafeed/dyn_banners/summary.json.js"


[docs]@attr.s(slots=True) class _Tournament: """Upcoming pokerstars tournament.""" start_date = attr.ib(convert=parse_date) name = attr.ib() game = attr.ib() buyin = attr.ib() players = attr.ib(convert=int)
[docs]def get_current_tournaments(): """Get the next 200 tournaments from pokerstars.""" schedule_page = requests.get(TOURNAMENTS_XML_URL) root = etree.XML(schedule_page.content) for tour in root.iter("{*}tournament"): yield _Tournament( start_date=tour.findtext("{*}start_date"), name=tour.findtext("{*}name"), game=tour.findtext("{*}game"), buyin=tour.findtext("{*}buy_in_fee"), players=tour.get("players"), )
[docs]@attr.s(slots=True) class _Status: """PokerStars status.""" updated = attr.ib(convert=parse_date) tables = attr.ib() next_update = attr.ib() players = attr.ib() clubs = attr.ib() active_tournaments = attr.ib() total_tournaments = attr.ib() sites = attr.ib() # list of sites, including Play Money club_members = attr.ib()
[docs]@attr.s(slots=True) class _SiteStatus: """PokerStars status on different subsites like FR, ES IT or Play Money.""" id = attr.ib() # ".FR", ".ES", ".IT" or 'Play Money' tables = attr.ib() players = attr.ib() active_tournaments = attr.ib()
[docs]def get_status(): """Get pokerstars status: players online, number of tables, etc.""" res = requests.get(STATUS_URL) status = res.json()["tournaments"]["summary"] # move all sites under sites attribute, including play money sites = status.pop("site") play_money = status.pop("play_money") play_money["id"] = "Play Money" sites.append(play_money) sites = tuple(_SiteStatus(**site) for site in sites) return _Status(sites=sites, updated=status.pop("updated"), **status)