105 lines
3.7 KiB
Python
105 lines
3.7 KiB
Python
"""
|
|
API Endpoints to use:
|
|
Open/Close a question: https://api2-eu-west-1.insided.com/docs/community/#tag/Questions/operation/toggleQuestionClosed
|
|
Respond to a question: https://api2-eu-west-1.insided.com/docs/community/#tag/Questions/operation/replyQuestion
|
|
Delete a question: https://api2-eu-west-1.insided.com/docs/community/#tag/Questions/operation/toggleQuestionTrashedAction
|
|
|
|
Posting and Response need to be from different users. Response needs to happen 500 times to trigger the AWS threshold.
|
|
|
|
For Kaitlyn's Sandbox:
|
|
{"token_type":"bearer","access_token":"R6ltj5LZmUii5jPZ6ruORE6qDP69GlL9","expires_in":7200}%
|
|
"""
|
|
|
|
import requests
|
|
|
|
APIKEY = "R6ltj5LZmUii5jPZ6ruORE6qDP69GlL9"
|
|
HEADERS = {"Content-Type": "application/json", "Authorization": f"Bearer {APIKEY}"}
|
|
# EU
|
|
# BASEURL = "https://api2-eu-west-1.insided.com/v2"
|
|
# US
|
|
BASEURL = "https://api2-us-west-2.insided.com/v2"
|
|
|
|
# My admin user id = userid=21
|
|
# Responder user id = 24 (nrasmussen+insidetest@gainsight.com)
|
|
|
|
def get_access_token():
|
|
client_id = "6142ab56-8c2e-473c-bcb0-7b48f2aa8477"
|
|
client_secret = "73b04f70280331e1a230c47c20b4fa9a43629d386fa69c6ba411d731aaa2cf55"
|
|
token_url = "https://api2-us-west-2.insided.com/oauth2/token"
|
|
token_headers = {
|
|
"Content-Type": "application/x-www-form-urlencoded"
|
|
}
|
|
token_load = f"grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}&scope=write"
|
|
token_resp = requests.post(token_url, data=token_load, headers=token_headers)
|
|
# print(token_resp.text)
|
|
# print(token_resp.status_code)
|
|
tokenjson = token_resp.json()
|
|
access_token = tokenjson['access_token']
|
|
ask_question(access_token)
|
|
|
|
def ask_question(access_token):
|
|
# /questions/ask"
|
|
ask_authid = 21
|
|
askurl = f"{BASEURL}/questions/ask?authorId={ask_authid}"
|
|
askload = {
|
|
"title": "Test Question",
|
|
"content": "I'm trapped please help!",
|
|
"categoryId": 38, # Hidden category in Kaitlyn's Sandbox
|
|
}
|
|
askresp = requests.post(askurl, json=askload, headers=HEADERS)
|
|
if askresp.status_code == 201:
|
|
question_id = get_question_id()
|
|
reply_question(question_id)
|
|
else:
|
|
print("something went wrong")
|
|
print(askresp.text, askresp.status_code)
|
|
|
|
def get_question_id():
|
|
# GET List questions for a category
|
|
get_quest_url = f"{BASEURL}/categories/38/questions"
|
|
get_quest = requests.get(get_quest_url, headers=HEADERS)
|
|
queston = get_quest.json()
|
|
return queston['result'][0]['id']
|
|
|
|
def reply_question(question_id):
|
|
# "/questions/{id}/reply"
|
|
rep_authid = 24
|
|
quest_id = question_id
|
|
reply_url = f"{BASEURL}/questions/{quest_id}/reply?authorId={rep_authid}"
|
|
error_list = []
|
|
for i in range(5):
|
|
replyload = {
|
|
"content": f"This is response {i}",
|
|
}
|
|
try:
|
|
replyresp = requests.post(reply_url, json=replyload, headers=HEADERS)
|
|
if replyresp.raise_for_status():
|
|
print(f"Raised Status occurred on number {i}")
|
|
except TabError as exc:
|
|
code = exc.response.status_code
|
|
error_list.append((code, i))
|
|
|
|
if len(error_list) > 0:
|
|
print("Some errors exist. Here's the list:")
|
|
print(error_list)
|
|
else:
|
|
print("No errors.")
|
|
delete_question(question_id)
|
|
|
|
|
|
def delete_question(question_id):
|
|
# /questions/{id}/toggleTrashed"
|
|
moderatorid = 21
|
|
delete_url = (
|
|
f"{BASEURL}/questions/{question_id}/toggleTrashed?moderatorId={moderatorid}"
|
|
)
|
|
delete_payload = {"trashed": True}
|
|
deleteresp = requests.post(delete_url, json=delete_payload, headers=HEADERS)
|
|
if deleteresp.status_code == 204:
|
|
print("Completed!")
|
|
else:
|
|
print(deleteresp.status_code)
|
|
|
|
if __name__ == "__main__":
|
|
get_access_token()
|