Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
taux1c
GitHub Repository: taux1c/onlyfans-scraper
Path: blob/main/onlyfans_scraper/api/messages.py
961 views
1
r"""
2
_ __
3
___ _ __ | | _ _ / _| __ _ _ __ ___ ___ ___ _ __ __ _ _ __ ___ _ __
4
/ _ \ | '_ \ | || | | || |_ / _` || '_ \ / __| _____ / __| / __|| '__| / _` || '_ \ / _ \| '__|
5
| (_) || | | || || |_| || _|| (_| || | | |\__ \|_____|\__ \| (__ | | | (_| || |_) || __/| |
6
\___/ |_| |_||_| \__, ||_| \__,_||_| |_||___/ |___/ \___||_| \__,_|| .__/ \___||_|
7
|___/ |_|
8
"""
9
10
import httpx
11
12
from ..constants import messagesEP, messagesNextEP
13
from ..utils import auth
14
15
16
def scrape_messages(headers, user_id, message_id=0) -> list:
17
ep = messagesNextEP if message_id else messagesEP
18
url = ep.format(user_id, message_id)
19
20
with httpx.Client(http2=True, headers=headers) as c:
21
auth.add_cookies(c)
22
c.headers.update(auth.create_sign(url, headers))
23
24
r = c.get(url, timeout=None)
25
if not r.is_error:
26
messages = r.json()['list']
27
if not messages:
28
return messages
29
messages += scrape_messages(headers, user_id, messages[-1]['id'])
30
return messages
31
r.raise_for_status()
32
33
34
def parse_messages(messages: list, user_id):
35
messages_with_media = [(message['media'], message['createdAt'])
36
for message in messages if message['fromUser']['id'] == user_id and message['media']]
37
38
messages_urls = []
39
for message in messages_with_media:
40
media, date = message
41
for m in media:
42
if m['canView']:
43
messages_urls.append((m['src'], date, m['id'], m['type']))
44
45
return messages_urls
46
47