Skip to content

Instantly share code, notes, and snippets.

@dxlbnl
Last active December 14, 2015 07:08
Show Gist options
  • Save dxlbnl/5047778 to your computer and use it in GitHub Desktop.
Save dxlbnl/5047778 to your computer and use it in GitHub Desktop.
Ibood hunt tracker
# -*- coding: utf-8 -*-
import re, json
import urllib2
import sys, time, datetime
cursor = u"|"
class Poller(object):
stock_url = u"http://www.ibood.com/js/stock/nl.js"
offer_url = u"http://www.ibood.com/js/offer/nl_nl.js"
re_poll = re.compile('\w+\((.+)\)')
def __init__(self):
self.offer_id = None
self.interval = 1
self.msg = ""
# start polling
while True:
self.poll()
time.sleep(self.interval)
def load_jsonp(self, s):
re_res = self.re_poll.search(s)
if re_res:
match = re_res.groups()[0]
else:
return
try:
return json.loads(match)
except ValueError:
print s
pass
def open(self, url):
try:
req = urllib2.Request(url)
req.add_header('Host', "www.ibood.com")
req.add_header('Referer', "http://www.ibood.com/nl/nl")
req.add_header('User-Agent', "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17")
req.add_header('X-Requested-With', "XMLHttpRequest")
resp = urllib2.urlopen(req)
except IOError:
print "\nConnection Error"
return
return self.load_jsonp(resp.read())
def poll(self):
offer_id, self.percentage, sold_out, interval = self.open(self.stock_url)
if offer_id == 30371:
self.msg = u"BUY NOW!!!! " * 5
if self.offer_id != offer_id:
print '' # newline
self.load_offer()
self.write()
def load_offer(self):
self.offer_starttime = datetime.datetime.now()
offer = self.open(self.offer_url)
if offer:
self.offer_name = offer['name']
self.share_url = offer['share_uri']
self.offer_id = offer['offer_id']
pref_write = ""
cursor = False
def write(self):
s = u"Product({offer_id}) ({per}%): {name} @ {url} {cursor} {time} {cursor} {msg}".format(
offer_id = self.offer_id,
per = self.percentage,
name = self.offer_name,
msg = self.msg,
url = self.share_url,
cursor = self.cursor and cursor or u" ",
time = (datetime.datetime.now() - self.offer_starttime).total_seconds()
)
print u"\r{}".format(s).ljust(len(self.pref_write) + 10),
self.pref_write = s
sys.stdout.flush()
self.cursor = ~self.cursor
if __name__ == "__main__":
poller = Poller()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment