osrsgamestats/scrape.py

72 lines
1.8 KiB
Python

#!/usr/bin/env python3
import sys
import requests
import re
from influxdb import InfluxDBClient
from urllib.parse import urlparse
import os
import logging
def get_rs_players(session):
r = session.get("https://www.runescape.com/player_count.js?varname=iPlayerCount&callback=jQuery3600011173447649542423_1624513024284&_=1624513024285")
matches = re.compile(r'.+\((\d+)\)').findall(r.text)
return int(matches[0])
def get_osrs_players(session):
r = session.get("https://oldschool.runescape.com")
matches = re.compile(r'There are currently ([\d,]+) people playing').findall(r.text)
return int(matches[0].replace(",", ""))
def get_influx():
url_s = os.environ.get("RSSCRAPE_INFLUX_URL")
if not url_s:
logging.critical("must set RSSCRAPE_INFLUX_URL")
sys.exit(1)
url = urlparse(url_s)
db_name = url.path[1:]
influx = InfluxDBClient(url.hostname, url.port, url.username, url.password)
influx.create_database(db_name)
influx.switch_database(db_name)
return influx
def main():
logging.basicConfig(level=logging.INFO, format="%(asctime)-15s %(levelname)-8s %(filename)s:%(lineno)d %(message)s")
influx = get_influx()
s = requests.session()
s.headers["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:85.0) Gecko/20100101 Firefox/85.0"
s.headers["DNT"] = "1"
all_players = get_rs_players(s)
osrs_players = get_osrs_players(s)
rs3_players = all_players - osrs_players
body = [
{
"measurement": "players",
"tags": {},
"fields": {
"rs3": rs3_players,
"osrs": osrs_players,
"both_games": all_players,
}
},
]
print(body)
influx.write_points(body)
if __name__ == "__main__":
main()