|
@@ -1,6 +1,8 @@
|
|
|
import asyncio
|
|
import asyncio
|
|
|
from webbot.webbot import Browser
|
|
from webbot.webbot import Browser
|
|
|
import time
|
|
import time
|
|
|
|
|
+from lxml import html
|
|
|
|
|
+from lxml import etree
|
|
|
import requests
|
|
import requests
|
|
|
from requests_futures import sessions
|
|
from requests_futures import sessions
|
|
|
import re
|
|
import re
|
|
@@ -15,6 +17,22 @@ class Client:
|
|
|
self.username = username
|
|
self.username = username
|
|
|
self.password = password
|
|
self.password = password
|
|
|
self.expires = expires
|
|
self.expires = expires
|
|
|
|
|
+ self.resource_id = {'oil': 3,
|
|
|
|
|
+ 'ore': 4,
|
|
|
|
|
+ 'uranium': 11,
|
|
|
|
|
+ 'diamond': 15,
|
|
|
|
|
+ 'liquid oxygen': 21,
|
|
|
|
|
+ 'helium-3': 24,
|
|
|
|
|
+ 'antirad': 13,
|
|
|
|
|
+ 'energy drink': 17,
|
|
|
|
|
+ 'spacerockets': 20,
|
|
|
|
|
+ 'tanks': 2,
|
|
|
|
|
+ 'aircrafts': 1,
|
|
|
|
|
+ 'missiles': 14,
|
|
|
|
|
+ 'bombers': 16,
|
|
|
|
|
+ 'battleships': 18,
|
|
|
|
|
+ 'moon tanks': 22,
|
|
|
|
|
+ 'space stations': 23}
|
|
|
self.session_id = None
|
|
self.session_id = None
|
|
|
self.c = None
|
|
self.c = None
|
|
|
self.show_window = show_window
|
|
self.show_window = show_window
|
|
@@ -96,11 +114,43 @@ class Client:
|
|
|
'title': title,
|
|
'title': title,
|
|
|
'region': region})
|
|
'region': region})
|
|
|
|
|
|
|
|
|
|
+ def market_info(self, resource, r_id=False):
|
|
|
|
|
+ """
|
|
|
|
|
+ Returns a list of data about current resource market state.
|
|
|
|
|
+ In form price, amount selling, player id, player name string, total offers on market.
|
|
|
|
|
+ """
|
|
|
|
|
|
|
|
- #f"lang={article_lang}&newspaper={paper_id}&category={category}&paper={article}&title={title}®ion={region}&c={self.c}")
|
|
|
|
|
- print(r.text)
|
|
|
|
|
|
|
+ if not r_id:
|
|
|
|
|
+ res_id = self.resource_id[resource]
|
|
|
|
|
+ else:
|
|
|
|
|
+ res_id = resource
|
|
|
|
|
+ r = self.s.get(f'http://rivalregions.com/storage/market/{res_id}?{self.c}')
|
|
|
|
|
+ return self.parse_market_response(r, res_id)
|
|
|
|
|
+
|
|
|
|
|
+ def get_all_market_info(self):
|
|
|
|
|
+ session = sessions.FuturesSession(session=self.s)
|
|
|
|
|
+ results = {}
|
|
|
|
|
+ for type_ in self.resource_id:
|
|
|
|
|
+ if type_ == 'energy drink':
|
|
|
|
|
+ continue
|
|
|
|
|
+ results[type_] = session.get(f'http://rivalregions.com/storage/market/{self.resource_id[type_]}?{self.c}')
|
|
|
|
|
+ for res in results:
|
|
|
|
|
+ r = results[res].result()
|
|
|
|
|
+ price, selling_amount, player_id, player_name, total_offers = self.parse_market_response(r, self.resource_id[res])
|
|
|
|
|
+ results[res] = {'price': price,
|
|
|
|
|
+ 'amount': selling_amount,
|
|
|
|
|
+ 'player_id': player_id,
|
|
|
|
|
+ 'player_name': player_name,
|
|
|
|
|
+ 'total_offers':total_offers}
|
|
|
|
|
+ return results
|
|
|
|
|
+
|
|
|
|
|
+ @staticmethod
|
|
|
|
|
+ def parse_market_response(r, res_id):
|
|
|
|
|
+ price = re.search('<input price="(.*)" type', r.text).group(1)
|
|
|
|
|
+ selling_amount = re.search('<span max="(.*)" url="', r.text).group(1)
|
|
|
|
|
+ player_id = re.search('<span action="slide/profile/(.*)" class="storage_see pointer dot hov2', r.text).group(1)
|
|
|
|
|
+ player_name = re.search(f'<span action="slide/profile/{player_id}" class="storage_see pointer dot hov2">(.*)</span>', r.text).group(1)
|
|
|
|
|
+ total_offers = re.search(f'Best offer out of <span action="storage/listed/{res_id}" class="storage_see pointer hov2"><span class="dot">(.*)</span></span>:', r.text).group(1)
|
|
|
|
|
+ return price, selling_amount, player_id, player_name, total_offers
|
|
|
|
|
|
|
|
- async def do_something(self):
|
|
|
|
|
- #TODO Get some request done
|
|
|
|
|
- pass
|
|
|
|
|
|
|
|