Jan-03-2018, 12:37 AM
https://gyazo.com/62c8bbc7236e1ea0fc475458b38605df
ERROR I GET: https://gyazo.com/829caac4a291c7a0fb2a8e793f62e9ae
I can't open the program at all! It just closes Immediately
I don't think its the code because my laptop works when I launch the file, but for this pc IT JUST KEEPS CLOSING!!!
ERROR I GET: https://gyazo.com/829caac4a291c7a0fb2a8e793f62e9ae
I can't open the program at all! It just closes Immediately
I don't think its the code because my laptop works when I launch the file, but for this pc IT JUST KEEPS CLOSING!!!
(Jan-03-2018, 12:37 AM)JoshuaKim02 Wrote: [ -> ]https://gyazo.com/62c8bbc7236e1ea0fc475458b38605df
ERROR I GET: https://gyazo.com/829caac4a291c7a0fb2a8e793f62e9ae
I can't open the program at all! It just closes Immediately
I don't think its the code because my laptop works when I launch the file, but for this pc IT JUST KEEPS CLOSING!!!
#!/usr/bin/env python2.7 # encoding: utf-8 # Asset Reaper # Originally made by Adrian, fixed by Sparkles try: import json, time, os, re, StringIO from PIL import Image from urllib import urlencode import requests, base58 from BeautifulSoup import BeautifulSoup except: print('ERROR:: missing module(s)') exit() settings = json.loads(open('./settings/settings', 'r').read()) accounts = open('./settings/accounts', 'r').read().splitlines() sessions = [] accountIndex = 0 class rbx(): def __init__(self): self.session = requests.Session() def set_details(self, username, password): "sets cookie of session object" try: request = self.session.post('https://api.roblox.com/v2/login', data = { 'username': username, 'password': password }) if ('.ROBLOSECURITY' in self.session.cookies.keys()): return True except: pass return False def update(self, assetId, name, description, price): try: updateUrl = 'https://www.roblox.com/my/item.aspx?id={}'.format(assetId) request = self.session.get(updateUrl) if (request.status_code == 200): soup = BeautifulSoup(request.content) data = { '__EVENTTARGET': 'ctl00$cphRoblox$SubmitButtonTop', '__EVENTARGUMENT': '', '__VIEWSTATE': soup.find('input', attrs={'name': '__VIEWSTATE'}).get('value'), '__VIEWSTATEGENERATOR': soup.find('input', attrs={'name': '__VIEWSTATEGENERATOR'}).get('value'), '__EVENTVALIDATION': soup.find('input', attrs={'name': '__EVENTVALIDATION'}).get('value'), 'ctl00$cphRoblox$NameTextBox': name, 'ctl00$cphRoblox$DescriptionTextBox': description, 'ctl00$cphRoblox$SellThisItemCheckBox': 'on', 'ctl00$cphRoblox$SellForRobux': 'on', 'ctl00$cphRoblox$RobuxPrice': price, 'ctl00$cphRoblox$EnableCommentsCheckBox': 'on', 'GenreButtons2': '1', 'ctl00$cphRoblox$actualGenreSelection': '1' } request2 = self.session.post(updateUrl, data=data) if (request2.status_code == 200): return True except: pass return False def upload(self, name, assetType, datafile, groupId = 0): try: uploadUrl = 'https://www.roblox.com/build/upload' request = self.session.get(uploadUrl) soup = BeautifulSoup(request.content) rvt = soup.find('input', attrs={'name': '__RequestVerificationToken'}) if (rvt): rvt = rvt.get('value') uploadRequest = self.session.post(uploadUrl, data = { '__RequestVerificationToken': rvt, 'assetTypeId': assetType, 'groupId': settings['groupId'], 'onVerificationPage': False, 'isOggUploadEnabled': True, 'isTgaUploadEnabled': True, 'name': name }, files = {'file': ('image.png', datafile, 'image/png')}) if ('uploadedId' in uploadRequest.url): aid = re.search('uploadedId=(\d+)', uploadRequest.url) if (aid): return aid.group(1) elif ('later' in uploadRequest.url): print 'Limit Reached' time.sleep(30) else: print 'ERROR:: unknown, {}'.format(uploadRequest.url) except: pass class catalog(): """catalog api""" def __init__(self): pass @classmethod def search(self, CatalogContext = 1, PageNumber = 1, Subcategory = '', Category = '', SortType = '', AggregationFrequency = '', Keyword = ''): """simple catalog search""" queryString = {} for key, value in locals().items(): if (key != 'self' and key != 'queryString' and value != ''): queryString[key] = value queryString = urlencode(queryString) searchUrl = 'https://search.roblox.com/catalog/json?{}'.format(queryString) try: request = requests.get(searchUrl.format(queryString)) if (request.status_code == 200): return request.json() except: pass return {} @classmethod def getData(self, assetId): """gets data for asset""" assetUrl = 'https://assetgame.roblox.com/asset/?id={}' try: request = requests.get(assetUrl.format(assetId)) if (request.status_code == 200): soup = BeautifulSoup(request.content) return soup except: pass def save_asset(asset): """saves the asset as a file""" nameString = '{0}_!_{1}'.format(asset['Name'].encode('utf-8').strip(), asset['AssetTypeID']) filename = base58.b58encode(nameString)+'.png' try: xmlData = catalog.getData(asset['AssetId']) if (xmlData): dataUrl = xmlData.content.url.text dataRequest = requests.get(dataUrl) if (dataRequest.status_code == 200): data = StringIO.StringIO(dataRequest.content) filepath = './files/{}'.format(filename) img = Image.open(data) img.save(filepath) return True except: pass return False def start_upload(asset): """uploads assets""" global accountIndex global uploadCount for account in accounts: username, password = account.split(':') session = rbx() if (session.set_details(username, password) == True): sessions.append(session) else: print 'Invalid account: {}'.format(username) nameString = '{0}_!_{1}'.format(asset['Name'].encode('utf-8').strip(), asset['AssetTypeID']) filename = base58.b58encode(nameString)+'.png' name, typeId = base58.b58decode(filename.replace('.png', '')).split('_!_') session = sessions[accountIndex] name = '{0}{1}'.format(settings['namePrefix'], name) uploadAttempt = session.upload(name, typeId, open('./files/{}'.format(filename), 'rb'), settings['groupId']) if ((accountIndex+1) >= len(sessions)): accountIndex = 0 else: accountIndex += 1 if (uploadAttempt): if (session.update(uploadAttempt, name, settings['description'], settings['price']) == True): print 'Uploaded - {0}'.format(uploadAttempt) time.sleep(3) os.remove('./files/' + filename) def start_download(at, sb, af, kw, s, e): """downloads assets""" for pageNumber in range(int(s), int(e)): results = catalog.search(PageNumber = pageNumber, Subcategory = at, Category = 3, Keyword = kw, AggregationFrequency = af, SortType = sb) for a in results: saveAttempt = save_asset(a) print 'Downloaded - {0} - {1} - "{2}"'.format(a['AssetId'], saveAttempt, a['Name'].encode('utf-8').strip()[:15]) start_upload(a) def ui_main(): def title(): print ('\n' * 100) print 'Asset Reaper @ thetrex.net\n & patches by Sparkle' def ui_download(): print '> download > settings > asset type' print '12 - shirts' print '13 - t-shirts' print '14 - pants' assettype = raw_input('$ ') title() print '> download > settings > sort-by' print '0 - relevance' print '1 - most favorited' print '2 - bestselling' print '3 - recently updated' print '4 - price low to high' print '5 - price high to low' sortby = raw_input('$ ') title() print '> download > settings > aggregation frequency' print '0 - past day' print '1 - past week' print '2 - past month' print '3 - all time' aggregationfrequency = raw_input('$ ') title() print '> download > settings > keyword' keyword = raw_input('$ ') title() print '> download > settings > start page' start = raw_input('$ ') title() print '> download > settings > end page' end = raw_input('$ ') title() start_download(assettype, sortby, aggregationfrequency, keyword, start, end) def ui_upload(): print '> upload' start_upload() title() print '> waiting' print '1 - start' user_input = raw_input('$ ').lower() if (user_input == '1'): title() ui_download() ui_main()