Skip to content

Instantly share code, notes, and snippets.

@ptone
Created August 6, 2012 07:54
Show Gist options
  • Save ptone/3272084 to your computer and use it in GitHub Desktop.
Save ptone/3272084 to your computer and use it in GitHub Desktop.
from __future__ import print_function
from lxml.html.soupparser import fromstring
import requests
from datetime import datetime, timedelta
from collections import defaultdict
start_date = datetime(2012, 8, 6)
end_date = start_date + timedelta(days=60)
days = """Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday"""
day_labels = {}
for i, d in enumerate(days.split('\n')):
day_labels[i] = d
url = 'http://www.reserveamerica.com/campsiteCalendar.do?page=calendar&contractCode=CA&parkId=120030&calarvdate={caldate}&sitepage=true&startIdx={page_index}&sitefilter=STANDARD'
s = requests.session()
# s.config['keep_alive'] = False
calendar_start = start_date
calendar_page = 1
availability = defaultdict(list)
while calendar_start < end_date:
days = []
for i in range(14):
days.append(calendar_start + timedelta(days=i))
calendar_start_str = calendar_start.strftime("%m/%d/%Y")
page_index = 0
while page_index < 125:
page_url = url.format(caldate=calendar_start_str,
page_index=page_index)
# print(page_url)
page_request = s.get(page_url, prefetch=True)
page = page_request.content
tree = fromstring(page)
sites = []
availables = []
availables = tree.cssselect('td.status.a')
# print(len(availables))
for item in availables:
row = item.getparent()
site_id = row[0].text_content().split('\n')[0]
if site_id not in sites:
sites.append(site_id)
for i, cell in enumerate(row[2:]):
if cell not in availables:
continue
cell_date = days[i]
if cell_date.weekday() in [4, 5]:
# print("booya -- site: {} on {}".format(site_id, cell_date))
availability[cell_date].append(site_id)
page_index += 25
calendar_start = calendar_start + timedelta(days=14)
for d in sorted(availability.keys()):
print(day_labels[d.weekday()], d, availability[d])
Friday 2012-08-24 00:00:00 ['119']
Friday 2012-09-07 00:00:00 ['113', '040', '066']
Friday 2012-09-14 00:00:00 ['017', '055', '099', '038', '080']
Friday 2012-09-21 00:00:00 ['127', '112', '020', 'GANZ', '114']
Friday 2012-09-28 00:00:00 ['079', '008', '009', '020', '026', '040', '114', '039']
Saturday 2012-09-29 00:00:00 ['009', '020', '026']
Friday 2012-10-05 00:00:00 ['024', '131', '031', '035', '036', '037', '063', '066', '111', '009', '026', '039', '040', '080']
Saturday 2012-10-06 00:00:00 ['131', '008', '009', '026', '040', '080']
Friday 2012-10-12 00:00:00 ['125', '127', '128', '129', '130', '131', '064', '065', '073', '074', '094', '102', '104', '008', '080', '126', '099']
Saturday 2012-10-13 00:00:00 ['125', '127', '128', '129', '130', '131', '080', '126']
BeautifulSoup==3.2.1
Pygments==1.5
bpython==0.11
cssselect==0.7.1
distribute==0.6.27
flake8==1.4
lxml==2.3.5
pudb==2012.2.1
pyquery==1.2.1
python-dateutil==2.1
-e git+https://github.com/kennethreitz/requests.git@fc6ddfd78a26afe926c0b5430807d2bbe6d7c874#egg=requests-dev
six==1.1.0
urwid==1.0.2
wsgiref==0.1.2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment