install_user.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  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 and deletes from the user tables
  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. """
  59. Parses building data (table building).
  60. :param db: Sqlite database connection.
  61. :param url: Swarfarm APIv2, building-instances.
  62. """
  63. def parseBuildings(db, url):
  64. print("Parsing buildings...")
  65. http = urllib3.PoolManager()
  66. mlist = str(http.request('GET', url).data.decode('utf-8'))
  67. data = json.loads(mlist)
  68. while True:
  69. for building in data["results"]:
  70. building_id = building["building"]
  71. level = building["level"]
  72. insert(db, "building", (building_id, level))
  73. # Next page
  74. db.commit()
  75. if data["next"] != None:
  76. mlist = str(http.request('GET', data["next"]).data.decode('utf-8'))
  77. data = json.loads(mlist)
  78. else:
  79. break
  80. """
  81. Parses rune data (table rune).
  82. :param db: Sqlite database connection.
  83. :param url: Swarfarm APIv2, rune-instances.
  84. """
  85. def parseRunes(db, url):
  86. print("Parsing runes...")
  87. http = urllib3.PoolManager()
  88. mlist = str(http.request('GET', url).data.decode('utf-8'))
  89. data = json.loads(mlist)
  90. while True:
  91. for rune in data["results"]:
  92. id = rune["id"]
  93. com2us_id = rune["com2us_id"]
  94. assigned_to = rune["assigned_to"]
  95. rtype = rune["type"]
  96. if rtype == 1:
  97. rtype = 'Energy'
  98. elif rtype == 2:
  99. rtype = 'Fatal'
  100. elif rtype == 3:
  101. rtype = 'Blade'
  102. elif rtype == 4:
  103. rtype = 'Rage'
  104. elif rtype == 5:
  105. rtype = 'Swift'
  106. elif rtype == 6:
  107. rtype = 'Focus'
  108. elif rtype == 7:
  109. rtype = 'Guard'
  110. elif rtype == 8:
  111. rtype = 'Endure'
  112. elif rtype == 9:
  113. rtype = 'Violent'
  114. elif rtype == 10:
  115. rtype = 'Will'
  116. elif rtype == 11:
  117. rtype = 'Nemesis'
  118. elif rtype == 12:
  119. rtype = 'Shield'
  120. elif rtype == 13:
  121. rtype = 'Revenge'
  122. elif rtype == 14:
  123. rtype = 'Despair'
  124. elif rtype == 15:
  125. rtype = 'Vampire'
  126. elif rtype == 16:
  127. rtype = 'Destroy'
  128. elif rtype == 17:
  129. rtype = 'Fight'
  130. elif rtype == 18:
  131. rtype = 'Determination'
  132. elif rtype == 19:
  133. rtype = 'Enhance'
  134. elif rtype == 20:
  135. rtype = 'Accuracy'
  136. elif rtype == 21:
  137. rtype = 'Tolerance'
  138. slot = rune["slot"]
  139. stars = rune["stars"]
  140. level = rune["level"]
  141. quality = rune["quality"]
  142. original_quality = rune["original_quality"]
  143. value = rune["value"]
  144. substat_upgrades_remaining = rune["substat_upgrades_remaining"]
  145. efficiency = rune["efficiency"]
  146. max_efficiency = rune["max_efficiency"]
  147. main_stat = rune["main_stat"]
  148. main_stat_value = rune["main_stat_value"]
  149. innate_stat = rune["innate_stat"]
  150. innate_stat_value = rune["innate_stat_value"]
  151. substat_1 = rune["substat_1"]
  152. substat_1_value = rune["substat_1_value"]
  153. substat_1_craft = rune["substat_1_craft"]
  154. substat_2 = rune["substat_2"]
  155. substat_2_value = rune["substat_2_value"]
  156. substat_2_craft = rune["substat_2_craft"]
  157. substat_3 = rune["substat_3"]
  158. substat_3_value = rune["substat_3_value"]
  159. substat_3_craft = rune["substat_3_craft"]
  160. substat_4 = rune["substat_4"]
  161. substat_4_value = rune["substat_4_value"]
  162. substat_4_craft = rune["substat_4_craft"]
  163. """
  164. Human readable stat names (as of 2019-08-16):
  165. STAT_HP = 1
  166. STAT_HP_PCT = 2
  167. STAT_ATK = 3
  168. STAT_ATK_PCT = 4
  169. STAT_DEF = 5
  170. STAT_DEF_PCT = 6
  171. STAT_SPD = 7
  172. STAT_CRIT_RATE_PCT = 8
  173. STAT_CRIT_DMG_PCT = 9
  174. STAT_RESIST_PCT = 10
  175. STAT_ACCURACY_PCT = 11
  176. """
  177. if (main_stat == 1):
  178. main_stat = "HP"
  179. elif (main_stat == 2):
  180. main_stat = "HP%"
  181. elif (main_stat == 3):
  182. main_stat = "ATK"
  183. elif (main_stat == 4):
  184. main_stat = "ATK%"
  185. elif (main_stat == 5):
  186. main_stat = "DEF"
  187. elif (main_stat == 6):
  188. main_stat = "DEF%"
  189. elif (main_stat == 7):
  190. main_stat = "SPD"
  191. elif (main_stat == 8):
  192. main_stat = "CRR"
  193. elif (main_stat == 9):
  194. main_stat = "CRD"
  195. elif (main_stat == 10):
  196. main_stat = "RES"
  197. elif (main_stat == 11):
  198. main_stat = "ACC"
  199. if (innate_stat == 1):
  200. innate_stat = "HP"
  201. elif (innate_stat == 2):
  202. innate_stat = "HP%"
  203. elif (innate_stat == 3):
  204. innate_stat = "ATK"
  205. elif (innate_stat == 4):
  206. innate_stat = "ATK%"
  207. elif (innate_stat == 5):
  208. innate_stat = "DEF"
  209. elif (innate_stat == 6):
  210. innate_stat = "DEF%"
  211. elif (innate_stat == 7):
  212. innate_stat = "SPD"
  213. elif (innate_stat == 8):
  214. innate_stat = "CRR"
  215. elif (innate_stat == 9):
  216. innate_stat = "CRD"
  217. elif (innate_stat == 10):
  218. innate_stat = "RES"
  219. elif (innate_stat == 11):
  220. innate_stat = "ACC"
  221. if (substat_1 == 1):
  222. substat_1 = "HP"
  223. elif (substat_1 == 2):
  224. substat_1 = "HP%"
  225. elif (substat_1 == 3):
  226. substat_1 = "ATK"
  227. elif (substat_1 == 4):
  228. substat_1 = "ATK%"
  229. elif (substat_1 == 5):
  230. substat_1 = "DEF"
  231. elif (substat_1 == 6):
  232. substat_1 = "DEF%"
  233. elif (substat_1 == 7):
  234. substat_1 = "SPD"
  235. elif (substat_1 == 8):
  236. substat_1 = "CRR"
  237. elif (substat_1 == 9):
  238. substat_1 = "CRD"
  239. elif (substat_1 == 10):
  240. substat_1 = "RES"
  241. elif (substat_1 == 11):
  242. substat_1 = "ACC"
  243. if (substat_2 == 1):
  244. substat_2 = "HP"
  245. elif (substat_2 == 2):
  246. substat_2 = "HP%"
  247. elif (substat_2 == 3):
  248. substat_2 = "ATK"
  249. elif (substat_2 == 4):
  250. substat_2 = "ATK%"
  251. elif (substat_2 == 5):
  252. substat_2 = "DEF"
  253. elif (substat_2 == 6):
  254. substat_2 = "DEF%"
  255. elif (substat_2 == 7):
  256. substat_2 = "SPD"
  257. elif (substat_2 == 8):
  258. substat_2 = "CRR"
  259. elif (substat_2 == 9):
  260. substat_2 = "CRD"
  261. elif (substat_2 == 10):
  262. substat_2 = "RES"
  263. elif (substat_2 == 11):
  264. substat_2 = "ACC"
  265. if (substat_3 == 1):
  266. substat_3 = "HP"
  267. elif (substat_3 == 2):
  268. substat_3 = "HP%"
  269. elif (substat_3 == 3):
  270. substat_3 = "ATK"
  271. elif (substat_3 == 4):
  272. substat_3 = "ATK%"
  273. elif (substat_3 == 5):
  274. substat_3 = "DEF"
  275. elif (substat_3 == 6):
  276. substat_3 = "DEF%"
  277. elif (substat_3 == 7):
  278. substat_3 = "SPD"
  279. elif (substat_3 == 8):
  280. substat_3 = "CRR"
  281. elif (substat_3 == 9):
  282. substat_3 = "CRD"
  283. elif (substat_3 == 10):
  284. substat_3 = "RES"
  285. elif (substat_3 == 11):
  286. substat_3 = "ACC"
  287. if (substat_4 == 1):
  288. substat_4 = "HP"
  289. elif (substat_4 == 2):
  290. substat_4 = "HP%"
  291. elif (substat_4 == 3):
  292. substat_4 = "ATK"
  293. elif (substat_4 == 4):
  294. substat_4 = "ATK%"
  295. elif (substat_4 == 5):
  296. substat_4 = "DEF"
  297. elif (substat_4 == 6):
  298. substat_4 = "DEF%"
  299. elif (substat_4 == 7):
  300. substat_4 = "SPD"
  301. elif (substat_4 == 8):
  302. substat_4 = "CRR"
  303. elif (substat_4 == 9):
  304. substat_4 = "CRD"
  305. elif (substat_4 == 10):
  306. substat_4 = "RES"
  307. elif (substat_4 == 11):
  308. substat_4 = "ACC"
  309. 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))
  310. # Next page
  311. db.commit()
  312. if data["next"] != None:
  313. mlist = str(http.request('GET', data["next"]).data.decode('utf-8'))
  314. data = json.loads(mlist)
  315. else:
  316. break
  317. """
  318. Parses monster data (tables monster, monster_rune).
  319. :param db: Sqlite database connection.
  320. :param url: Swarfarm APIv2, monster-instances.
  321. """
  322. def parseMonsters(db, url):
  323. print("Parsing monsters...")
  324. http = urllib3.PoolManager()
  325. mlist = str(http.request('GET', url).data.decode('utf-8'))
  326. data = json.loads(mlist)
  327. while True:
  328. for mon in data["results"]:
  329. id = mon["id"]
  330. com2us_id = mon["com2us_id"]
  331. monster = mon["monster"]
  332. stars = mon["stars"]
  333. level = mon["level"]
  334. skill_1_level = mon["skill_1_level"]
  335. skill_2_level = mon["skill_2_level"]
  336. skill_3_level = mon["skill_3_level"]
  337. skill_4_level = mon["skill_4_level"]
  338. base_hp = mon["base_hp"]
  339. base_attack = mon["base_attack"]
  340. base_defense = mon["base_defense"]
  341. base_speed = mon["base_speed"]
  342. base_crit_rate = mon["base_crit_rate"]
  343. base_crit_damage = mon["base_crit_damage"]
  344. base_resistance = mon["base_resistance"]
  345. base_accuracy = mon["base_accuracy"]
  346. rune_hp = mon["rune_hp"]
  347. rune_attack = mon["rune_attack"]
  348. rune_defense = mon["rune_defense"]
  349. rune_speed = mon["rune_speed"]
  350. rune_crit_rate = mon["rune_crit_rate"]
  351. rune_crit_damage = mon["rune_crit_damage"]
  352. rune_resistance = mon["rune_resistance"]
  353. rune_accuracy = mon["rune_accuracy"]
  354. avg_rune_efficiency = mon["avg_rune_efficiency"]
  355. fodder = mon["fodder"]
  356. in_storage = mon["in_storage"]
  357. ignore_for_fusion = mon["ignore_for_fusion"]
  358. priority = mon["priority"]
  359. notes = mon["notes"]
  360. 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))
  361. for rune in mon["runes"]:
  362. insert(db, "monster_rune", (id, rune["id"]))
  363. # Next page
  364. db.commit()
  365. if data["next"] != None:
  366. mlist = str(http.request('GET', data["next"]).data.decode('utf-8'))
  367. data = json.loads(mlist)
  368. else:
  369. break
  370. """
  371. Begin script
  372. """
  373. db = openDatabase('application/sw.sqlite')
  374. parseBuildings(db, 'https://swarfarm.com/api/v2/profiles/' + USER + '/buildings/')
  375. parseRunes(db, 'https://swarfarm.com/api/v2/profiles/' + USER + '/runes/')
  376. parseMonsters(db, 'https://swarfarm.com/api/v2/profiles/' + USER + '/monsters/')
  377. db.commit()