Skip to content

Instantly share code, notes, and snippets.

Created March 12, 2012 19:09
Show Gist options
  • Save anonymous/2024038 to your computer and use it in GitHub Desktop.
Save anonymous/2024038 to your computer and use it in GitHub Desktop.
import urllib, urllib2, StringIO, cookielib, re
from PIL import Image
from colorsys import rgb_to_hls
from time import sleep
from random import randint
cj = cookielib.LWPCookieJar('cookie')
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-Agent', '###CHANGE THIS###')]
list = open('items.txt').readlines()
shop = 7
def login():
username = 'someguy'
password = 'hunter2'
global cj, opener
values = {'username': username, 'password': password}
data = urllib.urlencode(values)
opener.addheaders = [('Connection', 'keep-alive')]
opener.open('http://www.neopets.com/login.phtml', data)
cj.save('cookie')
def check():
try:
shop_html = opener.open('http://www.neopets.com/objects.phtml?type=shop&obj_type=%s' % shop).read()
except Exception, err:
print err
sleep(10)
try:
check()
except:
check()
if 'forgotpassword.phtml' in shop_html:
print 'Error! Not logged in, attempting to fix...'
login()
check()
haggle_urls = re.findall('href="haggle.phtml\?(.+?)"', shop_html)
stock = re.findall('wish to purchase (.+?) at (.+?) NP', shop_html)
items = []
prices = []
for i in stock:
items.append(i[0])
prices.append(i[1].replace(',', ''))
for i in list:
if i in items:
index = items.index(i)
price = str(prices[index])
clean = ''
for c in range(len(price)):
clean += price[c % 2]
if int(price) % 5000 == 0:
clean = price
clean = int(clean)
opener.addheaders = [('Referer', 'http://www.neopets.com/objects.phtml?type=shop&obj_type=7')]
haggle_html = opener.open('http://www.neopets.com/haggle.phtml?' + haggle_urls[index]).read()
try:
cu = haggle_html.split('x_pwned=')[1].split('"')[0]
(x, y) = solve_captcha('http://www.neopets.com/captcha_show.phtml?_x_pwned=' + cu)
opener.addheaders = [('Referer', 'http://www.neopets.com/haggle.phtml?' + haggle_urls[index])]
results = opener.open('http://www.neopets.com/haggle.phtml', 'current_offer=%d&x=%d&y=%d' % (clean, x, y)).read()
if 'I accept' in results:
print '*** Bought %s at %d NP ***' % (items[index], clean)
sleep(4.5)
check()
except IndexError:
print '%s sold out before purchase.' % (items[index])
check()
if len(items) >= 20:
wait = randint(45, 55)
elif len(items) >= 16:
wait = randint(32, 40)
elif len(items) >= 11:
wait = randint(12, 16)
else:
wait = randint(10, 12)
print '%d items, waiting %d seconds...' % (len(items), wait)
sleep(wait)
def solve_captcha(url):
global opener
i = Image.open(StringIO.StringIO(opener.open(url).read()))
pixels = i.load()
width, height = i.size
lowest = 999
lowestpx = []
for x in range(width):
for y in range(height):
cpixel = pixels[x, y]
hls = rgb_to_hls(cpixel[0], cpixel[1], cpixel[2])
if hls[1] < lowest:
lowest = hls[1]
lowestpx = [x, y]
return lowestpx
login()
while 1:
try:
check()
except:
check()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment