fork download
  1. import os
  2. import pathlib
  3. import requests
  4. from bs4 import BeautifulSoup, Tag, NavigableString
  5. import card_structure
  6. import helpers
  7. import copy
  8. import re
  9. from alive_progress import alive_bar
  10. from langdetect import detect
  11. import time
  12. import argparse
  13. import sys
  14.  
  15. YGOPRODECK_API = "https://d...content-available-to-author-only...k.com/api/v7/cardinfo.php"
  16.  
  17. link_dict = {1: "Bottom-Left",
  18. 2: "Bottom",
  19. 3: "Bottom-Right",
  20. 4: "Left",
  21. 6: "Right",
  22. 7: "Top-Left",
  23. 8: "Top",
  24. 9: "Top-Right"}
  25.  
  26. if __name__ == "__main__":
  27.  
  28. # ARGUMENTS PARSING #
  29. parser = argparse.ArgumentParser()
  30. parser.add_argument("-l", "--language", action="store", type=str,
  31. choices=["en", "fr", "ja", "de", "it", "es", "pt", "ko"],
  32. default="en",
  33. help="Select the generation language")
  34. parser.add_argument("-f", "--fast", action='store_true', default=False)
  35.  
  36. args = parser.parse_args()
  37. ###########################
  38.  
  39. script_dir = pathlib.Path(__file__).parent.resolve()
  40.  
  41. # Check Platform
  42. helpers.check_platform()
  43.  
  44. # Clone the yugioh-card-history git
  45. repository_url = 'https://g...content-available-to-author-only...b.com/db-ygorganization-com/yugioh-card-history.git'
  46. clone_repo_path = pathlib.PurePath(script_dir, "yugioh-card-history")
  47. helpers.clone_or_pull_repo(repository_url, str(clone_repo_path))
  48.  
  49. # English="en", French="fr", Japanese="ja", Deutsch="de", Italian="it", Spanish="es", Portugese = "pt", Korean="ko"
  50. language_code = args.language
  51. scrape_additional_data = not args.fast
  52.  
  53. # Get the language database
  54. file_pattern = pathlib.PurePath(script_dir, "yugioh-card-history", language_code, "*.json")
  55. card_hashmap = helpers.combine_json_files(str(file_pattern), language_code, 'name')
  56. card_en_id_hashmap = helpers.combine_json_files(str(file_pattern), 'en', 'id')
  57.  
  58. delimiter = '$'
  59. output_path = pathlib.PurePath(script_dir, "data", language_code)
  60. wiki_URL = "https://y...content-available-to-author-only...m.com/wiki/"
  61. base_URL = "https://w...content-available-to-author-only...d.com"
  62. URL = f"https://w...content-available-to-author-only...d.com/yugiohdb/card_list.action?request_locale={language_code}"
  63.  
  64. pathlib.Path(output_path).mkdir(parents=True, exist_ok=True)
  65.  
  66. # Initiate a session and update the headers.
  67. requests_session = requests.session()
  68. headers = {
  69. 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
  70. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
  71. }
  72. requests_session.headers.update(headers)
  73.  
  74. # Initialization
  75. list_of_cards = []
  76. processed_card_database = {}
  77. count = 0
  78. pack_elements, link_elements, pack_names = helpers.get_packs_and_links(URL, requests_session)
  79.  
  80. with alive_bar(len(link_elements), dual_line=True, title='Packs Processed', force_tty=True) as bar:
  81.  
  82. for element_num in range(len(link_elements)): # Loop through Packs
  83. # If the count exceeds number of names - Exit
  84. if count >= len(pack_names):
  85. break
  86.  
  87. # Get name of the Pack from the pack HTML array
  88. pack_name = helpers.get_pack_name(pack_names, count)
  89. count += 1 # Increase the count for next iteration
  90.  
  91. if os.path.isfile(f"{output_path}/{pack_name}.csv"):
  92. bar()
  93. continue
  94.  
  95. # Get the link for each individual pack
  96. card_elements, raw_url1 = helpers.get_card_elements(base_URL, link_elements[element_num], language_code, requests_session)
  97.  
  98. bar.text = f'-> Processing pack: {pack_name}, please wait...'
  99.  
  100. # Looping through all the cards on the page
  101. card_count = 0
  102. for card_info in card_elements:
  103. card_count += 1
  104. tmp_card = card_structure.Card()
  105. name = card_info.find_all("span", class_="card_name")
  106. tmp_card.name = name[0].text
  107.  
  108. if name[0].text in processed_card_database:
  109. list_of_cards.append(copy.copy(processed_card_database[name[0].text]))
  110. continue
  111.  
  112. if name[0].text == "Armed Neos":
  113. print("e")
  114.  
  115. card_start_time = time.time()
  116.  
  117. card_hash_data = card_hashmap.get(name[0].text)
  118. process_english_name = False
  119. if card_hash_data != None:
  120.  
  121. if card_hash_data.get('localizedAttribute') != None:
  122. tmp_card.attribute = card_hash_data.get('localizedAttribute')
  123. elif card_hash_data.get('attribute') != None:
  124. tmp_card.attribute = card_hash_data.get('attribute')
  125. elif card_hash_data.get('frameType') != None:
  126. tmp_card.attribute = card_hash_data.get('frameType').upper()
  127.  
  128. if card_hash_data.get('englishAttribute') == "trap" \
  129. or card_hash_data.get('frameType') == "trap" \
  130. or card_hash_data.get('englishAttribute') == "spell" \
  131. or card_hash_data.get('frameType') == "spell":
  132. if card_hash_data.get('localizedProperty') != None:
  133. tmp_card.spell_attribute = card_hash_data.get('localizedProperty')
  134. elif card_hash_data.get('race') != None:
  135. tmp_card.spell_attribute = card_hash_data.get('race')
  136. else: # It's a monster
  137. if card_hash_data.get('level') != None:
  138. tmp_card.level = card_hash_data.get('level')
  139. if card_hash_data.get('rank') != None:
  140. tmp_card.rank = card_hash_data.get('rank')
  141. if card_hash_data.get('linkRating') != None:
  142. tmp_card.link = card_hash_data.get('linkRating')
  143. elif card_hash_data.get('linkval') != None:
  144. tmp_card.link = card_hash_data.get('linkval')
  145. if card_hash_data.get('linkArrows') != None:
  146. tmp_card.link_arrows = '/'.join(
  147. [link_dict[int(key)] for key in card_hash_data.get('linkArrows')])
  148. elif card_hash_data.get('linkmarkers') != None:
  149. tmp_card.link_arrows = card_hash_data.get('linkmarkers')
  150. if card_hash_data.get('pendScale') != None:
  151. tmp_card.pend_scale = card_hash_data.get('pendScale')
  152. elif card_hash_data.get('scale') != None:
  153. tmp_card.pend_scale = card_hash_data.get('scale')
  154.  
  155. if tmp_card.pend_scale != "":
  156. if card_hash_data.get('pendEffect') != None:
  157. tmp_card.pend_effect = card_hash_data.get('pendEffect')
  158. tmp_card.card_text = card_hash_data.get('effectText')
  159. elif card_hash_data.get('desc') != None:
  160. pattern = r"\[ Pendulum Effect \](.*?)\[ Monster Effect \](.*?)$"
  161. matches = re.search(pattern, card_hash_data.get('desc'), re.DOTALL)
  162. if matches:
  163. tmp_card.pend_effect = matches.group(1).replace('\n', '').replace('\r', '')
  164. if '\n' in matches.group(2):
  165. tmp_card.summoning_condition = matches.group(2).split('\n')[0].replace('\r', '')
  166. tmp_card.card_text = matches.group(2).split('\n')[1]
  167. else:
  168. tmp_card.card_text = matches.group(2).replace('\r', '').replace('\n', '')
  169. elif card_hash_data.get('desc') != None:
  170. if '\n' in card_hash_data.get('desc'):
  171. tmp_card.summoning_condition = card_hash_data.get('desc').split('\n')[0].replace('\r', '')
  172. tmp_card.card_text = card_hash_data.get('desc').split('\n')[1].replace('\n', '').replace('\r', '')
  173. else:
  174. tmp_card.card_text = card_hash_data.get('desc').replace('\n', '').replace('\r', '')
  175.  
  176. if card_hash_data.get('properties') != None:
  177. tmp_card.type = '/'.join(card_hash_data.get('properties'))
  178. else:
  179. tmp_card.type = f"[{card_hash_data.get('race')}/{card_hash_data.get('frameType')}]"
  180. if card_hash_data.get('atk') != None:
  181. tmp_card.attack = card_hash_data.get('atk')
  182. if card_hash_data.get('def') != None:
  183. tmp_card.defense = card_hash_data.get('def')
  184. if card_hash_data.get('effectText') != None and '\n' in card_hash_data.get('effectText'):
  185. tmp_card.summoning_condition = card_hash_data.get('effectText').split('\n')[0]
  186.  
  187.  
  188. # Use the konami code to find other information in ygoprodeck api
  189. en_hashmap_data = card_en_id_hashmap.get(card_hash_data.get('misc_info')[0].get('konami_id'))
  190. if en_hashmap_data != None:
  191. if en_hashmap_data.get('name') != None:
  192. tmp_card.card_passcode = en_hashmap_data.get('id')
  193. english_name = en_hashmap_data.get('name')
  194. else:
  195. process_english_name = True
  196. else:
  197. process_english_name = True
  198.  
  199. if process_english_name == True:
  200.  
  201. if language_code != "en":
  202. link_value_struct = card_info.find_all("input", class_="link_value")
  203. link_value = link_value_struct[0].attrs['value']
  204.  
  205. card_info_page, card_raw_url = helpers.get_page(base_URL + link_value, language_code, requests_session)
  206. try:
  207. english_name = card_info_page.find("div", {"id": "cardname"}).h1
  208. english_name = english_name.select_one("span").text
  209. except:
  210. continue
  211.  
  212. if len(english_name) > 2:
  213. if detect(english_name) != 'en':
  214. continue
  215.  
  216. else:
  217. english_name = tmp_card.name
  218.  
  219. attribute = card_info.find_all("span", class_="box_card_attribute")
  220. attribute = helpers.cleanStr(attribute[0].text, [("\n", "")])
  221. tmp_card.attribute = attribute
  222.  
  223. # Monster card specific information
  224. # Exemption list is missing japanese and korean so will not work for those two languages and will probably crash
  225. exemption_list = ['SPELL', 'TRAP', 'MAGIE', 'PIÈGE', 'ZAUBER', 'FALLE', 'MAGIA', 'TRAPPOLA', 'MÁGICA', 'TRAMPA', 'ARMADILHA', 'MAGIA', '魔法', '', '마법', '함정']
  226. monster_card_found = True
  227. for pattern in exemption_list:
  228. if re.search(pattern, attribute):
  229. monster_card_found = False
  230.  
  231. if monster_card_found:
  232. level = card_info.find_all("span", class_="box_card_level_rank level")
  233. if len(level) != 0:
  234. level = helpers.cleanStr(level[0].text, [("Level ", ""), ("\n", "")])
  235. tmp_card.level = level
  236.  
  237. rank = card_info.find_all("span", class_="box_card_level_rank rank")
  238. if len(rank) != 0:
  239. rank = helpers.cleanStr(rank[0].text, [("Rank ", ""), ("\n", "")])
  240. tmp_card.rank = rank
  241.  
  242. link = card_info.find_all("span", class_="box_card_linkmarker")
  243. if len(link) != 0:
  244. link = helpers.cleanStr(link[0].text, [("Link ", ""), ("\n", "")])
  245. tmp_card.link = link
  246.  
  247. card_type = card_info.find_all("span", class_="card_info_species_and_other_item")
  248. card_type = helpers.cleanStr(card_type[0].text, [("\n", ""), ("\t", ""), ("\r", "")])
  249. tmp_card.type = card_type
  250.  
  251. if re.search('Pendulum', card_type):
  252. pend_scale = card_info.find_all("span", class_="box_card_pen_scale")
  253. pend_scale = helpers.cleanStr(pend_scale[0].text, [("P Scale ", ""), ("\n", ""), ("\t", ""), ("\r", "")])
  254. tmp_card.pend_scale = pend_scale
  255.  
  256. pend_effect = card_info.find_all("span", class_="box_card_pen_effect c_text flex_1")
  257. pend_effect = helpers.cleanStr(pend_effect[0].text, [("\n", ""), ("\t", ""), ("\r", "")])
  258. tmp_card.pend_effect = pend_effect
  259.  
  260. attack_power = card_info.find_all("span", class_="atk_power")
  261. attack_power = helpers.cleanStr(attack_power[0].text, [("ATK ", ""), ("\n", ""), ("\t", ""), ("\r", "")])
  262. tmp_card.attack = attack_power
  263.  
  264. def_power = card_info.find_all("span", class_="def_power")
  265. def_power = helpers.cleanStr(def_power[0].text, [("DEF ", ""), ("\n", ""), ("\t", ""), ("\r", "")])
  266. tmp_card.defense = def_power
  267.  
  268. # Spell and Trap card specific information
  269. if re.search('SPELL', attribute) or re.search('TRAP', attribute):
  270. spell_attribute = card_info.find_all("span", class_="box_card_effect")
  271. if len(spell_attribute) != 0:
  272. spell_attribute = helpers.cleanStr(spell_attribute[0].text, [("\n", ""), ("\t", ""), ("\r", "")])
  273. tmp_card.spell_attribute = spell_attribute
  274.  
  275. card_text = card_info.find_all("dd", class_="box_card_text c_text flex_1")
  276. if len(card_text[0].contents) > 1 and ("Fusion" in tmp_card.type or "Synchro" in tmp_card.type
  277. or "Xyz" in tmp_card.type or "Link" in tmp_card.type):
  278. summoning_condition = helpers.cleanStr(card_text[0].contents[0], [("\n", ""), ("\t", ""), ("\r", "")])
  279. new_card_text = ""
  280. for i in range(1, len(card_text[0].contents)):
  281. if isinstance(card_text[0].contents[i], Tag):
  282. continue
  283. new_card_text += helpers.cleanStr(card_text[0].contents[i], [("\n", ""), ("\t", ""), ("\r", "")])
  284. card_text = new_card_text
  285. else:
  286. summoning_condition = ""
  287. card_text = helpers.cleanStr(card_text[0].text, [("\n", ""), ("\t", ""), ("\r", "")])
  288. tmp_card.summoning_condition = summoning_condition
  289. tmp_card.card_text = card_text
  290.  
  291. # Grab additional Card information from the wiki
  292.  
  293. extra_info_time_start = time.time()
  294. if scrape_additional_data:
  295. processed_card_name = helpers.process_english_name(english_name)
  296. debug_url = wiki_URL + processed_card_name
  297. card_url = requests_session.get(wiki_URL + processed_card_name) # Request the URL containing the card lists
  298. if card_url.status_code != 200:
  299. print(f"error occured for card {tmp_card.name} : {english_name}: url: {debug_url}")
  300. soup_deck = BeautifulSoup(card_url.content, "html.parser") # Pass through html parser
  301. ind_card_elements = soup_deck.find_all("tr", class_="cardtablerow") # Find all card structures
  302.  
  303. if card_url.status_code == 200 and len(ind_card_elements) == 0:
  304. # We'll try specifying (card) in the name
  305. card_url = requests_session.get(wiki_URL + processed_card_name + "_(card)") # Request the URL containing the card lists
  306. soup_deck = BeautifulSoup(card_url.content, "html.parser") # Pass through html parser
  307. ind_card_elements = soup_deck.find_all("tr", class_="cardtablerow") # Find all card structures
  308. if len(ind_card_elements) == 0:
  309. print(f"error occured for card {tmp_card.name} : {english_name} - failed with (card): url: {debug_url}")
  310.  
  311. for ind_card_info in ind_card_elements:
  312.  
  313. if re.search('Passcode', ind_card_info.text):
  314. lists = ind_card_info.find_all("td", class_="cardtablerowdata")
  315. if len(lists) != 0:
  316. passcode = lists[0]
  317. tmp_card.card_passcode = helpers.cleanStr(passcode.text, [("\n", ""), ("\t", ""), ("\r", "")])
  318.  
  319. if re.search('Link Arrows', ind_card_info.text):
  320. lists = ind_card_info.find_all("td", class_="cardtablerowdata")
  321. if len(lists) != 0:
  322. card_arrows = lists[0]
  323. arrows = []
  324. for arrow in card_arrows:
  325. if not isinstance(arrow, NavigableString) and arrow.text != '':
  326. arrows.append(arrow.text)
  327. tmp_card.link_arrows = arrows
  328.  
  329. if re.search('Card effect types', ind_card_info.text):
  330. lists = ind_card_info.find_all("td", class_="cardtablerowdata")
  331. if len(lists) != 0:
  332. card_effect_types = lists[0]
  333. effect_types = []
  334. for effect_type in card_effect_types:
  335. if not isinstance(effect_type, NavigableString) and effect_type.text != '\n':
  336. for effect in effect_type:
  337. if effect.text not in effect_types and not re.search('\n', effect.text):
  338. effect_types.append(effect.text)
  339. tmp_card.effect_types = effect_types
  340.  
  341. if re.search('Statuses', ind_card_info.text):
  342. lists = ind_card_info.find_all("td", class_="cardtablerowdata")
  343. if len(lists) != 0:
  344. card_status = lists[0]
  345. tmp_card.card_status = helpers.cleanStr(card_status.text, [(" ", "")])
  346.  
  347. if re.search('Card search categories', ind_card_info.text):
  348. lists = ind_card_info.find_all("div", class_="hlist")
  349. for row_list in lists:
  350. if re.search('Supports', row_list.text):
  351. card_supports = []
  352. card_search_categories = row_list.contents[1]
  353. for support in card_search_categories:
  354. if not '\n' in support.text and support.text != 'Supports ':
  355. card_supports.append(support.text)
  356. tmp_card.card_supports = card_supports
  357.  
  358. if re.search('Anti-supports', row_list.text):
  359. card_anti_supports = []
  360. card_search_categories = row_list.contents[1]
  361. for anti_support in card_search_categories:
  362. if not '\n' in anti_support.text and anti_support.text != 'Anti-supports ':
  363. card_anti_supports.append(anti_support.text)
  364. tmp_card.card_anti_supports = card_anti_supports
  365.  
  366. if re.search('Actions', row_list.text):
  367. card_actions = []
  368. card_search_categories = row_list.contents[1]
  369. for action in card_search_categories:
  370. if not re.search('\n', action.text) and action.text != 'Actions ':
  371. card_actions.append(action.text)
  372. tmp_card.card_actions = card_actions
  373.  
  374. card_end_time = time.time()
  375. #print(f"Card Process Time: {card_end_time - card_start_time} - Extra Info Time: {card_end_time - extra_info_time_start}")
  376. bar.text = f'-> Processing pack: {pack_name}, {tmp_card.name}'
  377.  
  378.  
  379. # Store the card structure into the list of cards
  380. list_of_cards.append(copy.copy(tmp_card))
  381. processed_card_database[tmp_card.name] = copy.copy(tmp_card)
  382. tmp_card.clear() # Clear the individual temporary structure for next card
  383.  
  384. helpers.outputCSV(f"{output_path}/{pack_name}.csv", list_of_cards, delimiter)
  385. list_of_cards.clear() # Reset list for the next pack
  386. bar()
  387. print("DONE")
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:1: error: '.' expected
import os
         ^
Main.java:2: error: '.' expected
import pathlib
              ^
Main.java:3: error: '.' expected
import requests
               ^
Main.java:4: error: ';' expected
from bs4 import BeautifulSoup, Tag, NavigableString
    ^
Main.java:4: error: '.' expected
from bs4 import BeautifulSoup, Tag, NavigableString
                             ^
Main.java:5: error: '.' expected
import card_structure
                     ^
Main.java:6: error: '.' expected
import helpers
              ^
Main.java:7: error: '.' expected
import copy
           ^
Main.java:8: error: '.' expected
import re
         ^
Main.java:9: error: ';' expected
from alive_progress import alive_bar
    ^
Main.java:9: error: '.' expected
from alive_progress import alive_bar
                                    ^
Main.java:10: error: ';' expected
from langdetect import detect
    ^
Main.java:10: error: '.' expected
from langdetect import detect
                             ^
Main.java:11: error: '.' expected
import time
           ^
Main.java:12: error: '.' expected
import argparse
               ^
Main.java:13: error: '.' expected
import sys
          ^
Main.java:15: error: ';' expected
YGOPRODECK_API = "https://db.ygoprodeck.com/api/v7/cardinfo.php"
              ^
Main.java:28: error: illegal character: '#'
    # ARGUMENTS PARSING #
    ^
Main.java:28: error: illegal character: '#'
    # ARGUMENTS PARSING #
                        ^
Main.java:34: error: unclosed character literal
    parser.add_argument("-f", "--fast", action='store_true', default=False)
                                               ^
Main.java:34: error: unclosed character literal
    parser.add_argument("-f", "--fast", action='store_true', default=False)
                                                          ^
Main.java:37: error: illegal character: '#'
    ###########################
    ^
Main.java:37: error: illegal character: '#'
    ###########################
     ^
Main.java:37: error: illegal character: '#'
    ###########################
      ^
Main.java:37: error: illegal character: '#'
    ###########################
       ^
Main.java:37: error: illegal character: '#'
    ###########################
        ^
Main.java:37: error: illegal character: '#'
    ###########################
         ^
Main.java:37: error: illegal character: '#'
    ###########################
          ^
Main.java:37: error: illegal character: '#'
    ###########################
           ^
Main.java:37: error: illegal character: '#'
    ###########################
            ^
Main.java:37: error: illegal character: '#'
    ###########################
             ^
Main.java:37: error: illegal character: '#'
    ###########################
              ^
Main.java:37: error: illegal character: '#'
    ###########################
               ^
Main.java:37: error: illegal character: '#'
    ###########################
                ^
Main.java:37: error: illegal character: '#'
    ###########################
                 ^
Main.java:37: error: illegal character: '#'
    ###########################
                  ^
Main.java:37: error: illegal character: '#'
    ###########################
                   ^
Main.java:37: error: illegal character: '#'
    ###########################
                    ^
Main.java:37: error: illegal character: '#'
    ###########################
                     ^
Main.java:37: error: illegal character: '#'
    ###########################
                      ^
Main.java:37: error: illegal character: '#'
    ###########################
                       ^
Main.java:37: error: illegal character: '#'
    ###########################
                        ^
Main.java:37: error: illegal character: '#'
    ###########################
                         ^
Main.java:37: error: illegal character: '#'
    ###########################
                          ^
Main.java:37: error: illegal character: '#'
    ###########################
                           ^
Main.java:37: error: illegal character: '#'
    ###########################
                            ^
Main.java:37: error: illegal character: '#'
    ###########################
                             ^
Main.java:37: error: illegal character: '#'
    ###########################
                              ^
Main.java:41: error: illegal character: '#'
    # Check Platform
    ^
Main.java:44: error: illegal character: '#'
    # Clone the yugioh-card-history git
    ^
Main.java:45: error: unclosed character literal
    repository_url = 'https://github.com/db-ygorganization-com/yugioh-card-history.git'
                     ^
Main.java:49: error: illegal character: '#'
    # English="en", French="fr", Japanese="ja", Deutsch="de", Italian="it", Spanish="es", Portugese = "pt", Korean="ko"
    ^
Main.java:53: error: illegal character: '#'
    # Get the language database
    ^
Main.java:55: error: unclosed character literal
    card_hashmap = helpers.combine_json_files(str(file_pattern), language_code, 'name')
                                                                                ^
Main.java:55: error: unclosed character literal
    card_hashmap = helpers.combine_json_files(str(file_pattern), language_code, 'name')
                                                                                     ^
Main.java:56: error: unclosed character literal
    card_en_id_hashmap = helpers.combine_json_files(str(file_pattern), 'en', 'id')
                                                                       ^
Main.java:56: error: unclosed character literal
    card_en_id_hashmap = helpers.combine_json_files(str(file_pattern), 'en', 'id')
                                                                          ^
Main.java:56: error: unclosed character literal
    card_en_id_hashmap = helpers.combine_json_files(str(file_pattern), 'en', 'id')
                                                                             ^
Main.java:56: error: unclosed character literal
    card_en_id_hashmap = helpers.combine_json_files(str(file_pattern), 'en', 'id')
                                                                                ^
Main.java:66: error: illegal character: '#'
    # Initiate a session and update the headers.
    ^
Main.java:69: error: unclosed character literal
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
        ^
Main.java:69: error: unclosed character literal
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
                        ^
Main.java:69: error: unclosed character literal
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
                           ^
Main.java:69: error: class, interface, or enum expected
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
                                     ^
Main.java:69: error: class, interface, or enum expected
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
                                              ^
Main.java:69: error: class, interface, or enum expected
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
                                                          ^
Main.java:69: error: unclosed character literal
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
                                                               ^
Main.java:70: error: unclosed character literal
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
        ^
Main.java:70: error: unclosed character literal
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
                   ^
Main.java:70: error: unclosed character literal
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
                      ^
Main.java:70: error: class, interface, or enum expected
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
                                               ^
Main.java:70: error: unclosed character literal
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
                                                                                                                                                ^
Main.java:74: error: illegal character: '#'
    # Initialization
    ^
Main.java:80: error: unclosed character literal
    with alive_bar(len(link_elements), dual_line=True, title='Packs Processed', force_tty=True) as bar:
                                                             ^
Main.java:80: error: unclosed character literal
    with alive_bar(len(link_elements), dual_line=True, title='Packs Processed', force_tty=True) as bar:
                                                                             ^
Main.java:82: error: illegal character: '#'
        for element_num in range(len(link_elements)):   # Loop through Packs
                                                        ^
Main.java:83: error: illegal character: '#'
            # If the count exceeds number of names - Exit
            ^
Main.java:87: error: illegal character: '#'
            # Get name of the Pack from the pack HTML array
            ^
Main.java:89: error: illegal character: '#'
            count += 1  # Increase the count for next iteration
                        ^
Main.java:95: error: illegal character: '#'
            # Get the link for each individual pack
            ^
Main.java:98: error: unclosed character literal
            bar.text = f'-> Processing pack: {pack_name}, please wait...'
                        ^
Main.java:98: error: illegal line end in character literal
            bar.text = f'-> Processing pack: {pack_name}, please wait...'
                                                                        ^
Main.java:100: error: illegal character: '#'
            # Looping through all the cards on the page
            ^
Main.java:121: error: unclosed character literal
                    if card_hash_data.get('localizedAttribute') != None:
                                          ^
Main.java:121: error: unclosed character literal
                    if card_hash_data.get('localizedAttribute') != None:
                                                             ^
Main.java:122: error: unclosed character literal
                        tmp_card.attribute = card_hash_data.get('localizedAttribute')
                                                                ^
Main.java:122: error: unclosed character literal
                        tmp_card.attribute = card_hash_data.get('localizedAttribute')
                                                                                   ^
Main.java:123: error: unclosed character literal
                    elif card_hash_data.get('attribute') != None:
                                            ^
Main.java:123: error: unclosed character literal
                    elif card_hash_data.get('attribute') != None:
                                                      ^
Main.java:124: error: unclosed character literal
                        tmp_card.attribute = card_hash_data.get('attribute')
                                                                ^
Main.java:124: error: unclosed character literal
                        tmp_card.attribute = card_hash_data.get('attribute')
                                                                          ^
Main.java:125: error: unclosed character literal
                    elif card_hash_data.get('frameType') != None:
                                            ^
Main.java:125: error: unclosed character literal
                    elif card_hash_data.get('frameType') != None:
                                                      ^
Main.java:126: error: unclosed character literal
                        tmp_card.attribute = card_hash_data.get('frameType').upper()
                                                                ^
Main.java:126: error: unclosed character literal
                        tmp_card.attribute = card_hash_data.get('frameType').upper()
                                                                          ^
Main.java:128: error: unclosed character literal
                    if card_hash_data.get('englishAttribute') == "trap" \
                                          ^
Main.java:128: error: unclosed character literal
                    if card_hash_data.get('englishAttribute') == "trap" \
                                                           ^
Main.java:128: error: illegal character: '\'
                    if card_hash_data.get('englishAttribute') == "trap" \
                                                                        ^
Main.java:129: error: unclosed character literal
                        or card_hash_data.get('frameType') == "trap" \
                                              ^
Main.java:129: error: unclosed character literal
                        or card_hash_data.get('frameType') == "trap" \
                                                        ^
100 errors
stdout
Standard output is empty