Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
883af51197 | |||
814cb5ab87 | |||
3c316bada3 | |||
ea03979943 | |||
9aae685b21 | |||
cae94d7aa8 | |||
fae7b0fd37 | |||
b7771b4da2 |
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
__author__ = """Eriks Karls"""
|
__author__ = """Eriks Karls"""
|
||||||
__email__ = 'eriks@72.lv'
|
__email__ = 'eriks@72.lv'
|
||||||
__version__ = '0.25.0.1'
|
__version__ = '0.25.1'
|
||||||
|
|
||||||
from erepublik.citizen import Citizen
|
from erepublik.citizen import Citizen
|
||||||
|
|
||||||
|
@ -15,27 +15,6 @@ __all__ = ['SlowRequests', 'CitizenAPI']
|
|||||||
class SlowRequests(Session):
|
class SlowRequests(Session):
|
||||||
last_time: datetime.datetime
|
last_time: datetime.datetime
|
||||||
timeout: datetime.timedelta = datetime.timedelta(milliseconds=500)
|
timeout: datetime.timedelta = datetime.timedelta(milliseconds=500)
|
||||||
_uas: List[str] = [
|
|
||||||
# Chrome
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36',
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
|
|
||||||
|
|
||||||
# FireFox
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0',
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0',
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0',
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64; rv:82.0) Gecko/20100101 Firefox/82.0',
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0',
|
|
||||||
]
|
|
||||||
debug: bool = False
|
debug: bool = False
|
||||||
|
|
||||||
def __init__(self, proxies: Dict[str, str] = None, user_agent: str = None):
|
def __init__(self, proxies: Dict[str, str] = None, user_agent: str = None):
|
||||||
@ -43,7 +22,7 @@ class SlowRequests(Session):
|
|||||||
if proxies:
|
if proxies:
|
||||||
self.proxies = proxies
|
self.proxies = proxies
|
||||||
if user_agent is None:
|
if user_agent is None:
|
||||||
user_agent = random.choice(self._uas)
|
user_agent = random.choice(self.get_random_user_agent())
|
||||||
self.request_log_name = utils.get_file(utils.now().strftime("debug/requests_%Y-%m-%d.log"))
|
self.request_log_name = utils.get_file(utils.now().strftime("debug/requests_%Y-%m-%d.log"))
|
||||||
self.last_time = utils.now()
|
self.last_time = utils.now()
|
||||||
self.headers.update({'User-Agent': user_agent})
|
self.headers.update({'User-Agent': user_agent})
|
||||||
@ -115,6 +94,36 @@ class SlowRequests(Session):
|
|||||||
data = dump.dump_all(response)
|
data = dump.dump_all(response)
|
||||||
utils.write_file(f'debug/dumps/{fd_time}_{fd_name}{fd_extra}.{fd_ext}.dump', data.decode('utf8'))
|
utils.write_file(f'debug/dumps/{fd_time}_{fd_name}{fd_extra}.{fd_ext}.dump', data.decode('utf8'))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_random_user_agent() -> str:
|
||||||
|
windows_x64 = 'Windows NT 10.0; Win64; x64'
|
||||||
|
linux_x64 = 'X11; Linux x86_64'
|
||||||
|
android_11 = 'Android 11; Mobile'
|
||||||
|
android_10 = 'Android 10; Mobile'
|
||||||
|
android_9 = 'Android 9; Mobile'
|
||||||
|
|
||||||
|
firefox_tmplt = 'Mozilla/5.0 ({osystem}; rv:{version}.0) Gecko/20100101 Firefox/{version}.0'
|
||||||
|
ff_version = range(85, 92)
|
||||||
|
|
||||||
|
chrome_tmplt = 'Mozilla/5.0 ({osystem}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{version} Safari/537.36'
|
||||||
|
chrome_version = ['85.0.4183.121',
|
||||||
|
'86.0.4240.183',
|
||||||
|
'87.0.4280.141',
|
||||||
|
'88.0.4324.182',
|
||||||
|
'89.0.4389.128',
|
||||||
|
'90.0.4430.18',
|
||||||
|
'91.0.4472.73',
|
||||||
|
'92.0.4515.14']
|
||||||
|
uas = []
|
||||||
|
|
||||||
|
for osystem in [windows_x64, linux_x64, android_9, android_10, android_11]:
|
||||||
|
for version in ff_version:
|
||||||
|
uas.append(firefox_tmplt.format(osystem=osystem, version=version))
|
||||||
|
for version in chrome_version:
|
||||||
|
uas.append(chrome_tmplt.format(osystem=osystem, version=version))
|
||||||
|
|
||||||
|
return random.choice(uas)
|
||||||
|
|
||||||
|
|
||||||
class CitizenBaseAPI:
|
class CitizenBaseAPI:
|
||||||
url: str = "https://www.erepublik.com/en"
|
url: str = "https://www.erepublik.com/en"
|
||||||
|
@ -206,11 +206,14 @@ class BaseCitizen(access_points.CitizenAPI):
|
|||||||
citizen_js = utils.json.loads(ugly_js)
|
citizen_js = utils.json.loads(ugly_js)
|
||||||
citizen = citizen_js.get('citizen', {})
|
citizen = citizen_js.get('citizen', {})
|
||||||
|
|
||||||
|
self.details.citizen_id = int(citizen['citizenId'])
|
||||||
|
self.name = citizen['name']
|
||||||
|
|
||||||
self.eday = citizen_js.get('settings').get('eDay')
|
self.eday = citizen_js.get('settings').get('eDay')
|
||||||
self.division = int(citizen.get('division', 0))
|
self.division = int(citizen.get('division', 0))
|
||||||
|
|
||||||
self.energy.interval = citizen.get('energyPerInterval', 0)
|
self.energy.interval = citizen.get('energyPerInterval', 0)
|
||||||
self.energy.limit = citizen.get('energyPoolLimit', 0)
|
self.energy.limit = citizen.get('energyToRecover', 0)
|
||||||
self.energy.energy = citizen.get('energy', 0)
|
self.energy.energy = citizen.get('energy', 0)
|
||||||
# self.energy.set_reference_time(utils.good_timedelta(self.now, timedelta(seconds=int(next_recovery[1]) * 60 + int(next_recovery[2]))))
|
# self.energy.set_reference_time(utils.good_timedelta(self.now, timedelta(seconds=int(next_recovery[1]) * 60 + int(next_recovery[2]))))
|
||||||
|
|
||||||
@ -599,11 +602,11 @@ class BaseCitizen(access_points.CitizenAPI):
|
|||||||
|
|
||||||
def _resume_session(self):
|
def _resume_session(self):
|
||||||
resp = self._req.get(self.url)
|
resp = self._req.get(self.url)
|
||||||
re_name_id = re.search(r'<a data-fblog="profile_avatar" href="/en/citizen/profile/(\d+)" '
|
try:
|
||||||
r'class="user_avatar" title="(.*?)">', resp.text)
|
self.update_citizen_info(resp.text)
|
||||||
if re_name_id:
|
if not self.name:
|
||||||
self.name = re_name_id.group(2)
|
raise classes.ErepublikException("Unable to find player name")
|
||||||
self.details.citizen_id = re_name_id.group(1)
|
|
||||||
self.write_log(f"Resumed as: {self.name}")
|
self.write_log(f"Resumed as: {self.name}")
|
||||||
if re.search('<div id="accountSecurity" class="it-hurts-when-ip">', resp.text):
|
if re.search('<div id="accountSecurity" class="it-hurts-when-ip">', resp.text):
|
||||||
self.restricted_ip = True
|
self.restricted_ip = True
|
||||||
@ -611,7 +614,7 @@ class BaseCitizen(access_points.CitizenAPI):
|
|||||||
|
|
||||||
self.logged_in = True
|
self.logged_in = True
|
||||||
self.get_csrf_token()
|
self.get_csrf_token()
|
||||||
else:
|
except classes.ErepublikException:
|
||||||
self._login()
|
self._login()
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
bump2version==1.0.1
|
bump2version==1.0.1
|
||||||
coverage==5.5
|
coverage==5.5
|
||||||
edx-sphinx-theme==2.0.0
|
edx-sphinx-theme==3.0.0
|
||||||
flake8==3.8.4
|
flake8==3.9.2
|
||||||
ipython>=7.21.0
|
ipython>=7.25.0
|
||||||
jedi!=0.18.0
|
jedi!=0.18.0
|
||||||
isort==5.7.0
|
isort==5.9.2
|
||||||
pip==21.0.1
|
pip==21.1.3
|
||||||
pre-commit==2.10.1
|
pre-commit==2.13.0
|
||||||
pur==5.3.0
|
pur==5.4.2
|
||||||
PyInstaller==4.2
|
PyInstaller==4.3
|
||||||
PySocks==1.7.1
|
PySocks==1.7.1
|
||||||
pytest==6.2.2
|
pytest==6.2.4
|
||||||
pytz==2021.1
|
pytz==2021.1
|
||||||
requests==2.25.1
|
requests==2.25.1
|
||||||
requests-toolbelt==0.9.1
|
requests-toolbelt==0.9.1
|
||||||
responses==0.12.1
|
responses==0.13.3
|
||||||
setuptools==54.0.0
|
setuptools==57.1.0
|
||||||
Sphinx==3.5.1
|
Sphinx==4.0.3
|
||||||
twine==3.3.0
|
twine==3.4.1
|
||||||
wheel==0.36.2
|
wheel==0.36.2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.25.0.1
|
current_version = 0.25.1
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\.?(?P<dev>\d+)?
|
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\.?(?P<dev>\d+)?
|
||||||
|
18
setup.py
18
setup.py
@ -12,17 +12,17 @@ with open('HISTORY.rst') as history_file:
|
|||||||
history = history_file.read()
|
history = history_file.read()
|
||||||
|
|
||||||
requirements = [
|
requirements = [
|
||||||
'PySocks==1.7.1',
|
'PySocks>=1.7.1',
|
||||||
'pytz==2021.1',
|
'pytz>=2021.1',
|
||||||
'requests==2.25.1',
|
'requests>=2.25.0',
|
||||||
'requests-toolbelt==0.9.1',
|
'requests-toolbelt>=0.9.0',
|
||||||
]
|
]
|
||||||
|
|
||||||
setup_requirements = []
|
setup_requirements = []
|
||||||
|
|
||||||
test_requirements = [
|
test_requirements = [
|
||||||
"pytest==6.1.2",
|
"pytest==6.2.4",
|
||||||
"responses==0.12.1"
|
"responses==0.13.3"
|
||||||
]
|
]
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
@ -34,8 +34,8 @@ setup(
|
|||||||
'License :: OSI Approved :: MIT License',
|
'License :: OSI Approved :: MIT License',
|
||||||
'Natural Language :: English',
|
'Natural Language :: English',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.7',
|
|
||||||
'Programming Language :: Python :: 3.8',
|
'Programming Language :: Python :: 3.8',
|
||||||
|
'Programming Language :: Python :: 3.9',
|
||||||
],
|
],
|
||||||
description="Python package for automated eRepublik playing",
|
description="Python package for automated eRepublik playing",
|
||||||
entry_points={},
|
entry_points={},
|
||||||
@ -46,11 +46,11 @@ setup(
|
|||||||
keywords='erepublik',
|
keywords='erepublik',
|
||||||
name='eRepublik',
|
name='eRepublik',
|
||||||
packages=find_packages(include=['erepublik']),
|
packages=find_packages(include=['erepublik']),
|
||||||
python_requires='>=3.7, <4',
|
python_requires='>=3.8, <4',
|
||||||
setup_requires=setup_requirements,
|
setup_requires=setup_requirements,
|
||||||
test_suite='tests',
|
test_suite='tests',
|
||||||
tests_require=test_requirements,
|
tests_require=test_requirements,
|
||||||
url='https://github.com/eeriks/erepublik/',
|
url='https://github.com/eeriks/erepublik/',
|
||||||
version='0.25.0.1',
|
version='0.25.1',
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user