install_user.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. #!/usr/bin/python3
  2. import urllib3
  3. import sys
  4. import os
  5. import requests
  6. import urllib.request
  7. import sqlite3
  8. import wget
  9. import json
  10. user = "ivv0"
  11. """
  12. Opens the database file.
  13. :param name: The path to the sqlite database.
  14. :returns: Connection to the database.
  15. :raises IntegrityError: The queryes couldn't bre executed.
  16. :raises IOError: The sqlite file couldn't be created.
  17. """
  18. def openDatabase(name):
  19. global OPT_CREATE_DB
  20. print('Configuring database...')
  21. try:
  22. db = sqlite3.connect(name)
  23. cursor = db.cursor()
  24. cursor.execute('''DELETE FROM monster''')
  25. cursor.execute('''DELETE FROM monster_rune''')
  26. cursor.execute('''DELETE FROM rune''')
  27. #cursor.execute('''DELETE FROM player''')
  28. cursor.execute('''DELETE FROM building''')
  29. db.commit()
  30. cursor.close()
  31. return db
  32. except sqlite3.IntegrityError as e:
  33. print("Error executing statement: " + str(e))
  34. raise
  35. except IOError as e:
  36. print("I/O Error creating database " + name + ": " + str(e))
  37. raise
  38. """
  39. Inserts a row into the database.
  40. :param db: Connection to the database.
  41. :param table: Name of the table to insert into.
  42. :param values: List of values to insert.
  43. :raises IntegrityError: The insert query was unsuccesfull.
  44. """
  45. def insert(db, table, values):
  46. cursor = db.cursor()
  47. placeholders = ''
  48. for x in range(0, len(values)):
  49. placeholders = placeholders + '?, '
  50. placeholders = placeholders[:len(placeholders) - 2]
  51. query = 'INSERT INTO ' + table + ' VALUES (' + placeholders + ')'
  52. try:
  53. cursor.execute(query, values)
  54. except sqlite3.IntegrityError as e:
  55. print('Error Inserting into ' + table + ' with values (' + str(values) + '): ' + str(e))
  56. raise
  57. cursor.close;
  58. def parseBuildings(db, url):
  59. print("Parsing buildings...")
  60. http = urllib3.PoolManager()
  61. mlist = str(http.request('GET', url).data.decode('utf-8'))
  62. data = json.loads(mlist)
  63. while True:
  64. for building in data["results"]:
  65. building_id = building["building"]
  66. level = building["level"]
  67. insert(db, "building", (building_id, level))
  68. # Next page
  69. db.commit()
  70. if data["next"] != None:
  71. mlist = str(http.request('GET', data["next"]).data.decode('utf-8'))
  72. data = json.loads(mlist)
  73. else:
  74. break
  75. def parseRunes(db, url):
  76. print("Parsing runes...")
  77. http = urllib3.PoolManager()
  78. mlist = str(http.request('GET', url).data.decode('utf-8'))
  79. data = json.loads(mlist)
  80. while True:
  81. for rune in data["results"]:
  82. id = rune["id"]
  83. com2us_id = rune["com2us_id"]
  84. assigned_to = rune["assigned_to"]
  85. rtype = rune["type"]
  86. if rtype == 1:
  87. rtype = 'Energy'
  88. elif rtype == 2:
  89. rtype = 'Fatal'
  90. elif rtype == 3:
  91. rtype = 'Blade'
  92. elif rtype == 4:
  93. rtype = 'Rage'
  94. elif rtype == 5:
  95. rtype = 'Swift'
  96. elif rtype == 6:
  97. rtype = 'Focus'
  98. elif rtype == 7:
  99. rtype = 'Guard'
  100. elif rtype == 8:
  101. rtype = 'Endure'
  102. elif rtype == 9:
  103. rtype = 'Violent'
  104. elif rtype == 10:
  105. rtype = 'Will'
  106. elif rtype == 11:
  107. rtype = 'Nemesis'
  108. elif rtype == 12:
  109. rtype = 'Shield'
  110. elif rtype == 13:
  111. rtype = 'Revenge'
  112. elif rtype == 14:
  113. rtype = 'Despair'
  114. elif rtype == 15:
  115. rtype = 'Vampire'
  116. elif rtype == 16:
  117. rtype = 'Destroy'
  118. elif rtype == 17:
  119. rtype = 'Fight'
  120. elif rtype == 18:
  121. rtype = 'Determination'
  122. elif rtype == 19:
  123. rtype = 'Enhance'
  124. elif rtype == 20:
  125. rtype = 'Accuracy'
  126. elif rtype == 21:
  127. rtype = 'Tolerance'
  128. slot = rune["slot"]
  129. stars = rune["stars"]
  130. level = rune["level"]
  131. quality = rune["quality"]
  132. original_quality = rune["original_quality"]
  133. value = rune["value"]
  134. substat_upgrades_remaining = rune["substat_upgrades_remaining"]
  135. efficiency = rune["efficiency"]
  136. max_efficiency = rune["max_efficiency"]
  137. main_stat = rune["main_stat"]
  138. main_stat_value = rune["main_stat_value"]
  139. innate_stat = rune["innate_stat"]
  140. innate_stat_value = rune["innate_stat_value"]
  141. substat_1 = rune["substat_1"]
  142. substat_1_value = rune["substat_1_value"]
  143. substat_1_craft = rune["substat_1_craft"]
  144. substat_2 = rune["substat_2"]
  145. substat_2_value = rune["substat_2_value"]
  146. substat_2_craft = rune["substat_2_craft"]
  147. substat_3 = rune["substat_3"]
  148. substat_3_value = rune["substat_3_value"]
  149. substat_3_craft = rune["substat_3_craft"]
  150. substat_4 = rune["substat_4"]
  151. substat_4_value = rune["substat_4_value"]
  152. substat_4_craft = rune["substat_4_craft"]
  153. """
  154. Human readable stat names (as of 2019-08-16):
  155. STAT_HP = 1
  156. STAT_HP_PCT = 2
  157. STAT_ATK = 3
  158. STAT_ATK_PCT = 4
  159. STAT_DEF = 5
  160. STAT_DEF_PCT = 6
  161. STAT_SPD = 7
  162. STAT_CRIT_RATE_PCT = 8
  163. STAT_CRIT_DMG_PCT = 9
  164. STAT_RESIST_PCT = 10
  165. STAT_ACCURACY_PCT = 11
  166. """
  167. if (main_stat == 1):
  168. main_stat = "HP"
  169. elif (main_stat == 2):
  170. main_stat = "HP%"
  171. elif (main_stat == 3):
  172. main_stat = "ATK"
  173. elif (main_stat == 4):
  174. main_stat = "ATK%"
  175. elif (main_stat == 5):
  176. main_stat = "DEF"
  177. elif (main_stat == 6):
  178. main_stat = "DEF%"
  179. elif (main_stat == 7):
  180. main_stat = "SPD"
  181. elif (main_stat == 8):
  182. main_stat = "CRR"
  183. elif (main_stat == 9):
  184. main_stat = "CRD"
  185. elif (main_stat == 10):
  186. main_stat = "RES"
  187. elif (main_stat == 11):
  188. main_stat = "ACC"
  189. if (innate_stat == 1):
  190. innate_stat = "HP"
  191. elif (innate_stat == 2):
  192. innate_stat = "HP%"
  193. elif (innate_stat == 3):
  194. innate_stat = "ATK"
  195. elif (innate_stat == 4):
  196. innate_stat = "ATK%"
  197. elif (innate_stat == 5):
  198. innate_stat = "DEF"
  199. elif (innate_stat == 6):
  200. innate_stat = "DEF%"
  201. elif (innate_stat == 7):
  202. innate_stat = "SPD"
  203. elif (innate_stat == 8):
  204. innate_stat = "CRR"
  205. elif (innate_stat == 9):
  206. innate_stat = "CRD"
  207. elif (innate_stat == 10):
  208. innate_stat = "RES"
  209. elif (innate_stat == 11):
  210. innate_stat = "ACC"
  211. if (substat_1 == 1):
  212. substat_1 = "HP"
  213. elif (substat_1 == 2):
  214. substat_1 = "HP%"
  215. elif (substat_1 == 3):
  216. substat_1 = "ATK"
  217. elif (substat_1 == 4):
  218. substat_1 = "ATK%"
  219. elif (substat_1 == 5):
  220. substat_1 = "DEF"
  221. elif (substat_1 == 6):
  222. substat_1 = "DEF%"
  223. elif (substat_1 == 7):
  224. substat_1 = "SPD"
  225. elif (substat_1 == 8):
  226. substat_1 = "CRR"
  227. elif (substat_1 == 9):
  228. substat_1 = "CRD"
  229. elif (substat_1 == 10):
  230. substat_1 = "RES"
  231. elif (substat_1 == 11):
  232. substat_1 = "ACC"
  233. if (substat_2 == 1):
  234. substat_2 = "HP"
  235. elif (substat_2 == 2):
  236. substat_2 = "HP%"
  237. elif (substat_2 == 3):
  238. substat_2 = "ATK"
  239. elif (substat_2 == 4):
  240. substat_2 = "ATK%"
  241. elif (substat_2 == 5):
  242. substat_2 = "DEF"
  243. elif (substat_2 == 6):
  244. substat_2 = "DEF%"
  245. elif (substat_2 == 7):
  246. substat_2 = "SPD"
  247. elif (substat_2 == 8):
  248. substat_2 = "CRR"
  249. elif (substat_2 == 9):
  250. substat_2 = "CRD"
  251. elif (substat_2 == 10):
  252. substat_2 = "RES"
  253. elif (substat_2 == 11):
  254. substat_2 = "ACC"
  255. if (substat_3 == 1):
  256. substat_3 = "HP"
  257. elif (substat_3 == 2):
  258. substat_3 = "HP%"
  259. elif (substat_3 == 3):
  260. substat_3 = "ATK"
  261. elif (substat_3 == 4):
  262. substat_3 = "ATK%"
  263. elif (substat_3 == 5):
  264. substat_3 = "DEF"
  265. elif (substat_3 == 6):
  266. substat_3 = "DEF%"
  267. elif (substat_3 == 7):
  268. substat_3 = "SPD"
  269. elif (substat_3 == 8):
  270. substat_3 = "CRR"
  271. elif (substat_3 == 9):
  272. substat_3 = "CRD"
  273. elif (substat_3 == 10):
  274. substat_3 = "RES"
  275. elif (substat_3 == 11):
  276. substat_3 = "ACC"
  277. if (substat_4 == 1):
  278. substat_4 = "HP"
  279. elif (substat_4 == 2):
  280. substat_4 = "HP%"
  281. elif (substat_4 == 3):
  282. substat_4 = "ATK"
  283. elif (substat_4 == 4):
  284. substat_4 = "ATK%"
  285. elif (substat_4 == 5):
  286. substat_4 = "DEF"
  287. elif (substat_4 == 6):
  288. substat_4 = "DEF%"
  289. elif (substat_4 == 7):
  290. substat_4 = "SPD"
  291. elif (substat_4 == 8):
  292. substat_4 = "CRR"
  293. elif (substat_4 == 9):
  294. substat_4 = "CRD"
  295. elif (substat_4 == 10):
  296. substat_4 = "RES"
  297. elif (substat_4 == 11):
  298. substat_4 = "ACC"
  299. insert(db, "rune", (id, com2us_id, assigned_to, rtype, slot, stars, level, quality, original_quality, value, substat_upgrades_remaining, efficiency, max_efficiency, main_stat, main_stat_value, innate_stat, innate_stat_value, substat_1, substat_1_value, substat_1_craft, substat_2, substat_2_value, substat_2_craft, substat_3, substat_3_value, substat_3_craft, substat_4, substat_4_value, substat_4_craft))
  300. # Next page
  301. db.commit()
  302. if data["next"] != None:
  303. mlist = str(http.request('GET', data["next"]).data.decode('utf-8'))
  304. data = json.loads(mlist)
  305. else:
  306. break
  307. def parseMonsters(db, url):
  308. print("Parsing monsters...")
  309. http = urllib3.PoolManager()
  310. mlist = str(http.request('GET', url).data.decode('utf-8'))
  311. data = json.loads(mlist)
  312. while True:
  313. for mon in data["results"]:
  314. id = mon["id"]
  315. com2us_id = mon["com2us_id"]
  316. monster = mon["monster"]
  317. stars = mon["stars"]
  318. level = mon["level"]
  319. skill_1_level = mon["skill_1_level"]
  320. skill_2_level = mon["skill_2_level"]
  321. skill_3_level = mon["skill_3_level"]
  322. skill_4_level = mon["skill_4_level"]
  323. base_hp = mon["base_hp"]
  324. base_attack = mon["base_attack"]
  325. base_defense = mon["base_defense"]
  326. base_speed = mon["base_speed"]
  327. base_crit_rate = mon["base_crit_rate"]
  328. base_crit_damage = mon["base_crit_damage"]
  329. base_resistance = mon["base_resistance"]
  330. base_accuracy = mon["base_accuracy"]
  331. rune_hp = mon["rune_hp"]
  332. rune_attack = mon["rune_attack"]
  333. rune_defense = mon["rune_defense"]
  334. rune_speed = mon["rune_speed"]
  335. rune_crit_rate = mon["rune_crit_rate"]
  336. rune_crit_damage = mon["rune_crit_damage"]
  337. rune_resistance = mon["rune_resistance"]
  338. rune_accuracy = mon["rune_accuracy"]
  339. avg_rune_efficiency = mon["avg_rune_efficiency"]
  340. fodder = mon["fodder"]
  341. in_storage = mon["in_storage"]
  342. ignore_for_fusion = mon["ignore_for_fusion"]
  343. priority = mon["priority"]
  344. notes = mon["notes"]
  345. insert(db, "monster", (id, com2us_id, monster, stars, level, skill_1_level, skill_2_level, skill_3_level, skill_4_level, base_hp, base_attack, base_defense, base_speed, base_crit_rate, base_crit_damage, base_resistance, base_accuracy, rune_hp, rune_attack, rune_defense, rune_speed, rune_crit_rate, rune_crit_damage, rune_resistance, rune_accuracy, avg_rune_efficiency, fodder, in_storage, ignore_for_fusion, priority, notes))
  346. for rune in mon["runes"]:
  347. insert(db, "monster_rune", (id, rune["id"]))
  348. # Next page
  349. db.commit()
  350. if data["next"] != None:
  351. mlist = str(http.request('GET', data["next"]).data.decode('utf-8'))
  352. data = json.loads(mlist)
  353. else:
  354. break
  355. """
  356. Begin script
  357. """
  358. db = openDatabase('application/sw.sqlite')
  359. parseBuildings(db, 'https://swarfarm.com/api/v2/profiles/' + user + '/buildings/')
  360. parseRunes(db, 'https://swarfarm.com/api/v2/profiles/' + user + '/runes/')
  361. parseMonsters(db, 'https://swarfarm.com/api/v2/profiles/' + user + '/monsters/')
  362. db.commit()