Ver código fonte

Improve work and work wrapper

JoostSijm 4 anos atrás
pai
commit
4440868e38

+ 55 - 20
src/rival_regions_wrapper/api_wrapper/war.py

@@ -38,7 +38,9 @@ class War():
         soup = BeautifulSoup(response, 'html.parser')
         war_info = {
             'war_id': war_id,
-            'damage': int(soup.select_one('.war_w_target_o').text.replace('.', '')),
+            'damage': int(
+                soup.select_one('.war_w_target_o').text.replace('.', '')
+            ),
             'attack_hourly_available': bool(soup.select_one('.hide_once_war')),
         }
         heading = soup.find('h1')
@@ -46,19 +48,24 @@ class War():
         if energ_drinks:
             war_info['energ_drinks'] = int(energ_drinks.group(0))
 
-        war_info['type'] = re.sub(r',.*', '', heading.text).lower()
+        war_info['type'] = re.sub(r'(,|▶).*', '', heading.text).strip().lower()
         war_type = soup.select_one('.no_pointer')
         if war_type and war_type.text == 'Revolution powers':
             war_info['type'] = 'revolution'
 
         max_hero = heading.select_one('.max_hero')
-        war_info['max_hero_name'] = max_hero.text
-        war_info['max_hero_id'] = max_hero['action'].replace('slide/profile/', '')
+        if max_hero is not None:
+            war_info['max_hero_name'] = max_hero.text
+            war_info['max_hero_id'] = \
+                max_hero['action'].replace('slide/profile/', '')
 
-        max_hero_damage_str = ''.join(heading.find_all(text=True, recursive=False)).strip()
+        max_hero_damage_str = ''.join(heading.find_all(
+                text=True, recursive=False
+            )).strip()
         max_hero_damage = re.search(r'(\d|\.)+', max_hero_damage_str)
         if max_hero_damage:
-            war_info['max_hero_damage'] = int(max_hero_damage.group(0).replace('.', ''))
+            war_info['max_hero_damage'] = \
+                int(max_hero_damage.group(0).replace('.', ''))
 
         script = soup.find('script', text=re.compile('.war_det_cou'))
         search_result = re.search(r'\'\d+\'', str(script))
@@ -68,9 +75,13 @@ class War():
             war_info['finish_date'] = datetime.utcnow() + war_info['time_left']
         else:
             war_info['time_left'] = None
-            results = re.search(r'(?<=: ).*', soup.select_one('.slide_title .small').text)
+            results = re.search(
+                    r'(?<=: ).*',
+                    soup.select_one('.slide_title .small').text
+                )
             if results:
-                war_info['finish_date'] = functions.parse_date(results.group(0))
+                war_info['finish_date'] = \
+                    functions.parse_date(results.group(0))
 
         war_info['war_units'] = {}
         for war_unit in soup.select('.war_w_unit_div'):
@@ -79,29 +90,53 @@ class War():
         attack_side = soup.select('#war_w_ata_s .hov2')
         if len(attack_side) >= 3:
             war_info['attack'] = {
-                'state_id': int(attack_side[0]['action'].replace('map/state_details/', '')),
-                'state_name': unicodedata.normalize("NFKD", attack_side[0].text),
-                'region_id': int(attack_side[1]['action'].replace('map/details/', '')),
-                'region_name': unicodedata.normalize("NFKD", attack_side[1].text),
-                'damage': int(soup.select_one('.war_w_target_a').text.replace('.', '')),
+                'state_id': int(attack_side[0]['action'].replace(
+                    'map/state_details/', '')
+                ),
+                'state_name': unicodedata.normalize(
+                    'NFKD', attack_side[0].text
+                ),
+                'region_id': int(attack_side[1]['action'].replace(
+                    'map/details/', ''
+                )),
+                'region_name': unicodedata.normalize(
+                    'NFKD', attack_side[1].text
+                ),
+                'damage': int(soup.select_one('.war_w_target_a').text.replace(
+                    '.', '')
+                ),
             }
         else:
             war_info['attack'] = {
-                'damage': int(soup.select_one('.war_w_target_a').text.replace('.', '')),
+                'damage': int(soup.select_one('.war_w_target_a').text.replace(
+                    '.', '')
+                ),
             }
 
         defend_side = soup.select('#war_w_def_s .hov2')
         if len(defend_side) >= 3:
             war_info['defend'] = {
-                'state_id': int(defend_side[0]['action'].replace('map/state_details/', '')),
-                'state_name': unicodedata.normalize("NFKD", defend_side[0].text),
-                'region_id': int(defend_side[1]['action'].replace('map/details/', '')),
-                'region_name': unicodedata.normalize("NFKD", defend_side[1].text),
-                'damage': int(soup.select_one('.war_w_target_d').text.replace('.', '')),
+                'state_id': int(defend_side[0]['action'].replace(
+                    'map/state_details/', '')
+                ),
+                'state_name': unicodedata.normalize(
+                    'NFKD', defend_side[0].text
+                ),
+                'region_id': int(defend_side[1]['action'].replace(
+                    'map/details/', '')
+                ),
+                'region_name': unicodedata.normalize(
+                    'NFKD', defend_side[1].text
+                ),
+                'damage': int(soup.select_one('.war_w_target_d').text.replace(
+                    '.', ''
+                )),
             }
         else:
             war_info['defend'] = {
-                'damage': int(soup.select_one('.war_w_target_d').text.replace('.', '')),
+                'damage': int(soup.select_one('.war_w_target_d').text.replace(
+                    '.', ''
+                )),
             }
 
         return war_info

+ 33 - 17
src/rival_regions_wrapper/api_wrapper/work.py

@@ -13,6 +13,7 @@ RESOURCE_DICT = {
     'diamond': 'diamond'
 }
 
+
 class Work():
     """Wrapper class for work"""
     def __init__(self, api_wrapper):
@@ -26,27 +27,39 @@ class Work():
 
         factory = soup.select_one('.work_item:nth-child(9)')
         factory_slide = factory.select_one('.factory_slide')
-        factory_owner = factory.select_one('.factory_whose')
         factory_dict = {
             'id': int(factory_slide['action'].replace('factory/index/', '')),
-            'name': factory_slide.text,
-            'owner_name': factory_owner.text,
-            'owner_id': factory_owner['action'].replace('slide/profile/', ''),
+            'name': factory_slide.text
         }
-        level_str = re.search(r'level\s\d+', factory.select_one('.work_source_1').text)
+        factory_owner = factory.select_one('.factory_whose')
+        if factory_owner:
+            factory_dict['owner_name'] = factory_owner.text
+            factory_dict['owner_id'] = factory_owner['action'].replace(
+                    'slide/profile/', ''
+                )
+
+        level_str = re.search(
+                r'level\s\d+', factory.select_one('.work_source_1').text
+            )
         if level_str:
-            factory_dict['level'] = int(re.sub(r'level\s', '', level_str.group(0)))
+            factory_dict['level'] = int(re.sub(
+                r'level\s', '', level_str.group(0)
+            ))
 
         string_list = []
-        for string in factory.select_one('.work_factory_button, .button_white').strings:
-            string_list.append(string.strip())
-        try:
-            wage = string_list[2]
-            if '%' in wage:
-                factory_dict['wage_type'] = 'procentage'
-                factory_dict['wage'] = float(wage.replace(' %', ''))
-        except IndexError:
-            pass
+        factory_button = soup.select_one(
+                    '.work_factory_button'
+                )
+        if factory_button:
+            for string in factory_button.strings:
+                string_list.append(string.strip())
+            try:
+                wage = string_list[2]
+                if '%' in wage:
+                    factory_dict['wage_type'] = 'procentage'
+                    factory_dict['wage'] = float(wage.replace(' %', ''))
+            except IndexError:
+                pass
 
         work_page = {
             'factory': factory_dict,
@@ -58,10 +71,13 @@ class Work():
             classses = resource_left.get('class')
             for class_name, resource_name in RESOURCE_DICT.items():
                 if class_name in classses:
-                    work_page['resources_left'][resource_name] = float(resource_left.text)
+                    work_page['resources_left'][resource_name] = \
+                        float(resource_left.text)
                     break
 
         for work_exp in soup.select('.work_exp'):
-            work_exp_amount = int(re.sub(r'exp: | Pt\.', '', work_exp.text.strip()))
+            work_exp_amount = int(re.sub(
+                    r'exp: | Pt\.', '', work_exp.text.strip()
+                ))
             work_page['work_exp'][work_exp['url']] = work_exp_amount
         return work_page