Advertisement
Guest User

TMXwREDIS

a guest
Sep 22nd, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.01 KB | None | 0 0
  1. import xml.etree.ElementTree as etree
  2. import wget
  3. import os
  4. import time
  5. import sys, getopt
  6. import redis
  7.  
  8. base_path = "/home/alice/TrackMania/"
  9.  
  10. exemel = base_path + "search.xml"
  11.  
  12. current_page = 1
  13.  
  14. database = redis.Redis(host='localhost',port=6379)
  15.  
  16. def help_out():
  17.     print("Proper usage is as follows...")
  18.     print("-h : This message.")
  19.     print("-a : Author search name")
  20.     print("-e : Environment search name")
  21.     print("---ENVIRONMENT VALUES---")
  22.     print("1 : Canyon")
  23.     print("2 : Stadium")
  24.     print("3 : Valley")
  25.     print("4 : Lagoon")
  26.     exit()
  27.  
  28. def arghs(argv):
  29.     try:
  30.         opts, args = getopt.getopt(argv,"hs:a:e:")
  31.     except getopt.GetoptError:
  32.         help_out()
  33.        
  34.     for opt, arg in opts:
  35.         if opt == "-h":
  36.             help_out()
  37.         elif opt == "-a":
  38.             author = arg
  39.             global search_url_base
  40.             search_url_base = "https://tm.mania-exchange.com/tracksearch2/search?api=on&format=xml&author=" + author + "&limit=100"
  41.             TMX().download_search_results()
  42.         elif opt == "-e":
  43.             environment = arg
  44.             global search_url_base
  45.             search_url_base = "https://tm.mania-exchange.com/tracksearch2/search?api=on&format=xml&environments=" + str(environment) + "&limit=100"
  46.             TMX().download_search_results()
  47.         elif opt == "":
  48.             print("Check the help for usage.")
  49.            
  50.  
  51. class TMX(object):
  52.  
  53.     def get_total_tracks(self):
  54.         self.tree = etree.parse(exemel)
  55.         self.root = self.tree.getroot()
  56.         self.total_tracks = int(self.root[1].text)
  57.         self.pages = (self.total_tracks%100) + 1
  58.  
  59.     def get_searched_tracks(self):
  60.         num_tracks = len(self.root[0])
  61.         for i in range(0,num_tracks):
  62.                 track_id = self.root[0][i][0].text
  63.                 track_author = self.root[0][i][2].text
  64.                 track_name = self.root[0][i][5].text
  65.                 track_environment = self.root[0][i][16].text
  66.                 updated = self.root[0][i][4].text
  67.            
  68.                 url = "https://tm.mania-exchange.com/tracks/download/" + track_id
  69.                 path = base_path + track_environment + "/" + track_author + "/"
  70.        
  71.                 test_output = os.path.dirname(path)
  72.                 if not os.path.exists(test_output):
  73.                     os.makedirs(test_output)
  74.                
  75.                 global current_page
  76.                 current_track = ((current_page-1)*100) + i + 1
  77.        
  78.                 print("\n\n\nPage number: %d") % current_page
  79.                 print("Track number: %d of %d") % (current_track,self.total_tracks)
  80.                 print("Track name: %s") % track_name
  81.                
  82.                 db_entry = database.get(track_id)
  83.                 if db_entry == updated:
  84.                     print "Up to date."
  85.                 else:
  86.                     wget.download(url,path)
  87.                     database.set(track_id,updated)
  88.                
  89.                
  90.         if current_page == self.pages:
  91.             print "\n\nComplete?"
  92.         else:
  93.             current_page = current_page + 1
  94.             self.download_search_results()
  95.     ## Updated At is index 4 on each track!
  96.  
  97.     def download_search_results(self):
  98.         search_url_current = search_url_base + "&page=" + str(current_page)
  99.         if current_page != 1:
  100.             os.remove(exemel)
  101.         wget.download(search_url_current,exemel)
  102.         try:
  103.             self.tree = etree.parse(exemel)
  104.         except etree.ParseError:
  105.             print "Failed to parse. Possible server error. Pausing 30 seconds before attempting again."
  106.             time.sleep(30)
  107.             print "Attempting again..."
  108.             self.download_search_results()
  109.         else:
  110.             if current_page == 1:
  111.                 self.get_total_tracks()
  112.             self.root = self.tree.getroot()
  113.             self.get_searched_tracks()
  114.  
  115.  
  116. try:
  117.     req_arg = sys.argv[1]
  118. except IndexError:
  119.     help_out()
  120.    
  121. arghs(sys.argv[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement