daily pastebin goal
83%
SHARE
TWEET

manifest_destiny.py

xIntangible Jun 17th, 2015 964 Never
Upgrade to PRO!
ENDING IN00days00hours00mins00secs
  1. import requests, zipfile, os
  2. import json, sqlite3,
  3. import pickle #Optional
  4.  
  5. #Reading the Destiny API Manifest in Python. [How I Did It, Anyway]
  6.  
  7. weapon_types = ['Rocket Launcher', 'Scout Rifle', 'Fusion Rifle', 'Sniper Rifle',
  8.                 'Shotgun', 'Machine Gun', 'Pulse Rifle', 'Auto Rifle', 'Hand Cannon', 'Sidearm']
  9.  
  10. #dictionary that tells where to get the hashes for each table
  11. #FULL DICTIONARY
  12. hash_dict = {'DestinyActivityDefinition': 'activityHash',
  13.              'DestinyActivityTypeDefinition': 'activityTypeHash',
  14.              'DestinyClassDefinition': 'classHash',
  15.              'DestinyGenderDefinition': 'genderHash',
  16.              'DestinyInventoryBucketDefinition': 'bucketHash',
  17.              'DestinyInventoryItemDefinition': 'itemHash',
  18.              'DestinyProgressionDefinition': 'progressionHash',
  19.              'DestinyRaceDefinition': 'raceHash',
  20.              'DestinyTalentGridDefinition': 'gridHash',
  21.              'DestinyUnlockFlagDefinition': 'flagHash',
  22.              'DestinyHistoricalStatsDefinition': 'statId',
  23.              'DestinyDirectorBookDefinition': 'bookHash',
  24.              'DestinyStatDefinition': 'statHash',
  25.              'DestinySandboxPerkDefinition': 'perkHash',
  26.              'DestinyDestinationDefinition': 'destinationHash',
  27.              'DestinyPlaceDefinition': 'placeHash',
  28.              'DestinyActivityBundleDefinition': 'bundleHash',
  29.              'DestinyStatGroupDefinition': 'statGroupHash',
  30.              'DestinySpecialEventDefinition': 'eventHash',
  31.              'DestinyFactionDefinition': 'factionHash',
  32.              'DestinyVendorCategoryDefinition': 'categoryHash',
  33.              'DestinyEnemyRaceDefinition': 'raceHash',
  34.              'DestinyScriptedSkullDefinition': 'skullHash',
  35.              'DestinyGrimoireCardDefinition': 'cardId'}
  36.  
  37. def get_manifest():
  38.     manifest_url = 'http://www.bungie.net/Platform/Destiny/Manifest/'
  39.     #get the manifest location from the json
  40.     r = requests.get(manifest_url)
  41.     manifest = r.json()
  42.     mani_url = 'http://www.bungie.net'+manifest['Response']['mobileWorldContentPaths']['en']
  43.     #Download the file, write it to MANZIP
  44.     r = requests.get(mani_url)
  45.     with open("MANZIP", "wb") as zip:
  46.         zip.write(r.content)
  47.     print "Download Complete!"
  48.    
  49.     #Extract the file contents, and rename the extracted file
  50.     # to 'Manifest.content'
  51.     with zipfile.ZipFile('MANZIP') as zip:
  52.         name = zip.namelist()
  53.         zip.extractall()
  54.     os.rename(name[0], 'Manifest.content')
  55.     print 'Unzipped!'
  56.                
  57. def build_dict(hash_dict):
  58.     #connect to the manifest
  59.     con = sqlite3.connect('Manifest.content')
  60.     print 'Connected'
  61.     #create a cursor object
  62.     cur = con.cursor()
  63.    
  64.     all_data = {}
  65.     #for every table name in the dictionary
  66.     for table_name in hash_dict.keys():
  67.         #get a list of all the jsons from the table
  68.         cur.execute('SELECT json from '+table_name)
  69.         print 'Generating '+table_name+' dictionary....'
  70.        
  71.         #this returns a list of tuples: the first item in each tuple is our json
  72.         items = cur.fetchall()
  73.        
  74.         #create a list of jsons
  75.         item_jsons = [json.loads(item[0]) for item in items]
  76.        
  77.         #create a dictionary with the hashes as keys
  78.         #and the jsons as values
  79.         item_dict = {}
  80.         hash = hash_dict[table_name]
  81.         for item in item_jsons:  
  82.             item_dict[item[hash]] = item
  83.    
  84.         #add that dictionary to our all_data using the name of the table
  85.         #as a key.
  86.         all_data[table_name] = item_dict
  87.     print 'Dictionary Generated!'
  88.     return all_data
  89.  
  90.  
  91. #check if pickle exists, if not create one.
  92. if os.path.isfile('manifest.pickle') == False:
  93.     get_manifest()        
  94.     all_data = build_dict(hash_dict)
  95.     with open('manifest.pickle', 'wb') as data:
  96.         pickle.dump(all_data, data)
  97.     print "'manifest.pickle' created!\nDONE!"
  98. else:
  99.     print 'Pickle Exists'
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top