forked from plexinc/scoutapm_exporter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscout_data.py
58 lines (47 loc) · 1.92 KB
/
scout_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import requests
import os
from bs4 import BeautifulSoup
import http.cookiejar
class ScoutAPMAPI:
def __init__(self, email, password):
self.email = email
self.password = password
self.url = 'https://scoutapm.com/users/sign_in'
self.session = requests.Session()
self.headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/124.0",
}
self.cookie_file = "cookies.txt"
self.cookie_jar = http.cookiejar.LWPCookieJar(self.cookie_file)
try:
self.cookie_jar.load(ignore_discard=True, ignore_expires=True)
except FileNotFoundError:
pass
self.session.cookies = self.cookie_jar
def check_cookie(self):
remember_user_token_cookie = None
for cookie in self.session.cookies:
if cookie.name == "remember_user_token" and not cookie.is_expired():
remember_user_token_cookie = cookie
break
return remember_user_token_cookie
def login(self):
response = self.session.get(self.url, headers=self.headers)
soup = BeautifulSoup(response.content, 'html.parser')
authenticity_token = soup.find('input', {'name': 'authenticity_token'})['value']
payload = {
'utf8': '✓',
'authenticity_token': authenticity_token,
'user[email]': self.email,
'user[password]': self.password,
'commit': 'Log in',
'user[remember_me]': 'true'
}
self.session.post(self.url, data=payload, headers=self.headers)
self.cookie_jar.save(ignore_discard=True, ignore_expires=True)
def get_data(self, app_id):
if not self.check_cookie():
self.login()
data_url = f"https://scoutapm.com/apps/{app_id}/data.json"
response = self.session.get(data_url, headers=self.headers)
return response.content