ソースを参照

Fix issue with date parse in perks

JoostSijm 4 年 前
コミット
e1403e47b7

+ 10 - 2
rival_regions_wrapper/api_wrapper/overview.py

@@ -1,6 +1,7 @@
 """Profile class"""
 
 import re
+from datetime import timedelta
 
 from bs4 import BeautifulSoup
 from dateutil import parser
@@ -19,12 +20,19 @@ class Overview(object):
         soup = BeautifulSoup(response, 'html.parser')
         perks = soup.select('.perk_source_4')
         upgrade_perk = None
-        date_string = None
+        upgrade_date = None
         for perk in perks:
             date_string = perk.select_one('.small')
             if date_string:
                 upgrade_perk = int(perk['perk'])
                 date_string = re.sub(r'^.*:\s', '', soup.select_one('.perk_source_4 .small').text)
+                if 'tomorrow' in date_string:
+                    time = re.search(r'\d\d:\d\d', date_string)
+                    upgrade_date = parser.parse(time.group(0)) + timedelta(days=1)
+                elif 'today' in date_string:
+                    time = re.search(r'\d\d:\d\d', date_string)
+                else:
+                    upgrade_date = parser.parse(date_string)
                 break
         auto_war = soup.select_one('.war_index_war span.pointer:nth-child(4)')
         if auto_war and auto_war.has_attr('action'):
@@ -36,7 +44,7 @@ class Overview(object):
                 'strenght': int(soup.find('div', {'perk': 1, 'class': 'perk_source_2'}).text),
                 'education': int(soup.find('div', {'perk': 2, 'class': 'perk_source_2'}).text),
                 'endurance': int(soup.find('div', {'perk': 3, 'class': 'perk_source_2'}).text),
-                'upgrade_date': parser.parse(date_string),
+                'upgrade_date': upgrade_date,
                 'upgrade_perk': upgrade_perk
             },
             'war': {

+ 18 - 7
rival_regions_wrapper/api_wrapper/perks.py

@@ -1,6 +1,7 @@
 """Profile class"""
 
 import re
+from datetime import timedelta
 
 from bs4 import BeautifulSoup
 from dateutil import parser
@@ -17,17 +18,27 @@ class Perks(object):
         path = 'main/content'
         response = MIDDLEWARE.get(path)
         soup = BeautifulSoup(response, 'html.parser')
-        date_string = re.sub(r'^.*:\s', '', soup.select_one('.perk_source_4 .small').text)
-        current_perk = soup.select_one('.perk_source_4:has(.small)')
-        if current_perk.has_attr('perk'):
-            upgrade_perk = int(current_perk['perk'])
-        else:
-            upgrade_perk = None
+        perks = soup.select('.perk_source_4')
+        upgrade_perk = None
+        upgrade_date = None
+        for perk in perks:
+            date_string = perk.select_one('.small')
+            if date_string:
+                upgrade_perk = int(perk['perk'])
+                date_string = re.sub(r'^.*:\s', '', soup.select_one('.perk_source_4 .small').text)
+                if 'tomorrow' in date_string:
+                    time = re.search(r'\d\d:\d\d', date_string)
+                    upgrade_date = parser.parse(time.group(0)) + timedelta(days=1)
+                elif 'today' in date_string:
+                    time = re.search(r'\d\d:\d\d', date_string)
+                else:
+                    upgrade_date = parser.parse(date_string)
+                break
         perks = {
             'strenght': int(soup.find('div', {'perk': 1, 'class': 'perk_source_2'}).text),
             'education': int(soup.find('div', {'perk': 2, 'class': 'perk_source_2'}).text),
             'endurance': int(soup.find('div', {'perk': 3, 'class': 'perk_source_2'}).text),
-            'upgrade_date': parser.parse(date_string),
+            'upgrade_date': upgrade_date,
             'upgrade_perk': upgrade_perk
         }
         return perks