updates
parent
9613bfe054
commit
a24b36a822
|
@ -1,7 +1,12 @@
|
|||
import time
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
import traceback
|
||||
import backoff
|
||||
|
||||
class TimeOutException(Exception):
|
||||
pass
|
||||
|
||||
'''
|
||||
Wrapper around the RDRama API
|
||||
'''
|
||||
|
@ -25,33 +30,49 @@ class RDramaAPIInterface:
|
|||
'''
|
||||
Replies to the comment with the given id.
|
||||
'''
|
||||
def reply_to_comment(self,parent_fullname, parent_submission, message):
|
||||
def reply_to_comment(self,parent_fullname, parent_submission, message, file=None):
|
||||
url=f"{self.protocol}://{self.site}/comment"
|
||||
return self.post(url, data={
|
||||
'parent_fullname':parent_fullname,
|
||||
'submission': parent_submission,
|
||||
"body": message
|
||||
})
|
||||
if file == None:
|
||||
return self.post(url, data={
|
||||
'parent_fullname':parent_fullname,
|
||||
'submission': parent_submission,
|
||||
"body": message
|
||||
})
|
||||
else:
|
||||
return self.post(url, data={
|
||||
'parent_fullname':parent_fullname,
|
||||
'submission': parent_submission,
|
||||
"body": message
|
||||
}, files=file)
|
||||
|
||||
'''
|
||||
Replies to the comment with the given id.
|
||||
'''
|
||||
def reply_to_comment_easy(self,comment_id, parent_submission, message):
|
||||
return self.reply_to_comment(f"t3_{comment_id}", parent_submission, message)
|
||||
def reply_to_comment_easy(self,comment_id, parent_submission, message, file=None):
|
||||
return self.reply_to_comment(f"c_{comment_id}", parent_submission, message, file=file)
|
||||
|
||||
def reply_to_post(self, post_id, message):
|
||||
return self.reply_to_comment(f"t2_{post_id}", post_id, message)
|
||||
return self.reply_to_comment(f"p_{post_id}", post_id, message)
|
||||
|
||||
'''
|
||||
Gets "all" comments.
|
||||
'''
|
||||
def get_comments(self, number_of_pages=1, user=None, sort="new", upper_bound = 0, lower_bound = 0):
|
||||
def get_comments(self, number_of_pages=1, user=None, sort="new", upper_bound = 0, lower_bound = 0, t="all"):
|
||||
return self.search("comments", number_of_pages, user, sort, upper_bound, lower_bound, t)
|
||||
|
||||
'''
|
||||
Gets "all" posts.
|
||||
'''
|
||||
def get_posts(self, number_of_pages=1, user=None, sort="new", upper_bound = 0, lower_bound = 0, t="all"):
|
||||
return self.search("", number_of_pages, user, sort, upper_bound, lower_bound, t)
|
||||
|
||||
def search(self, root, number_of_pages, user, sort, upper_bound, lower_bound, t):
|
||||
if (user == None):
|
||||
url=f"{self.protocol}://{self.site}/comments"
|
||||
url=f"{self.protocol}://{self.site}/{root}"
|
||||
else:
|
||||
url=f"{self.protocol}://{self.site}/@{user}/comments"
|
||||
url=f"{self.protocol}://{self.site}/@{user}/{root}"
|
||||
|
||||
params = f"?sort={sort}&t=all&before={upper_bound}&after={lower_bound}"
|
||||
params = f"?sort={sort}&t={t}&before={upper_bound}&after={lower_bound}"
|
||||
url+=params
|
||||
|
||||
if number_of_pages == 1:
|
||||
|
@ -60,12 +81,12 @@ class RDramaAPIInterface:
|
|||
results = []
|
||||
for i_ in range(number_of_pages):
|
||||
i = i_ + 1
|
||||
full_url = f"{url}&page={i}"
|
||||
full_url=f"{url}&page={i}"
|
||||
results += self.get(full_url)['data']
|
||||
return {
|
||||
'data': results
|
||||
}
|
||||
|
||||
|
||||
'''
|
||||
Calls the notifications endpoint
|
||||
'''
|
||||
|
@ -272,6 +293,7 @@ class RDramaAPIInterface:
|
|||
"user_id": notification['author']['id'],
|
||||
"id": notification["id"],
|
||||
"message": notification['body'],
|
||||
"parent_comment_id": notification['parent_comment_id'] if notification['level'] != 1 else None,
|
||||
"post_id": notification['post_id']
|
||||
}
|
||||
|
||||
|
@ -328,13 +350,16 @@ class RDramaAPIInterface:
|
|||
else:
|
||||
return response.json()
|
||||
|
||||
@backoff.on_exception(backoff.expo, requests.exceptions.RequestException)
|
||||
def post(self, url, data):
|
||||
response = requests.post(url, headers=self.headers, data=data)
|
||||
@backoff.on_exception(backoff.expo, TimeOutException)
|
||||
def post(self, url, data, files = None):
|
||||
if files == None:
|
||||
response = requests.post(url, headers=self.headers, data=data)
|
||||
else:
|
||||
response = requests.post(url, headers=self.headers, data=data, files=files)
|
||||
print(f"POST {url} ({response.status_code}) {data}")
|
||||
if (response.status_code == 429):
|
||||
raise requests.exceptions.RequestException()
|
||||
raise TimeOutException
|
||||
if (response.status_code != 200):
|
||||
raise BaseException(f"POST {url} ({response.status_code}) {data} => {response.json()}")
|
||||
else:
|
||||
return response.json()
|
||||
return response.json()
|
Loading…
Reference in New Issue