pnut-matrix/pnutlib.py

273 lines
9.3 KiB
Python

import requests
import json
# API root: https://api.pnut.io/v0
class Pnut:
def __init__(self, token=""):
self.token = token
self.username = self._getme()
def logout(self):
url = "https://api.pnut.io/v0/token";
headers = { "Authorization": "Bearer " + self.token }
r = requests.delete(url, headers=headers)
return r
def get_stream(self,since_id=None):
url = "https://api.pnut.io/v0/posts/streams/me"
headers = { "Authorization": "Bearer " + self.token }
parameters = {}
if since_id:
parameters = { "since_id": since_id }
r = requests.get(url, headers=headers, params=parameters)
return r
def get_unified_stream(self,since_id=None):
url = "https://api.pnut.io/v0/posts/streams/unified"
headers = { "Authorization": "Bearer " + self.token }
parameters = {}
if since_id:
parameters = { "since_id": since_id }
r = requests.get(url, headers=headers, params=parameters)
return r
def get_global_stream(self,since_id=None):
url = "https://api.pnut.io/v0/posts/streams/global?include_raw=1"
headers = { "Authorization": "Bearer " + self.token }
parameters = {}
if since_id:
parameters = { "since_id": since_id }
try:
r = requests.get(url, headers=headers, params=parameters)
except requests.exceptions.ConnectionError:
r = None
except:
r = None
raise
return r
def get_channel_stream(self,chan_id,since_id=None):
url = "https://api.pnut.io/v0/channels/" + str(chan_id) + "/messages?include_raw=1"
headers = { "Authorization": "Bearer " + self.token }
parameters = {}
if since_id:
parameters = { "since_id": since_id }
try:
r = requests.get(url, headers=headers, params=parameters)
except requests.exceptions.ConnectionError:
r = None
except:
r = None
raise
return r
def get_user(self, uid):
url = "https://api.pnut.io/v0/users/" + str(uid)
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
return r
def get_post(self, postid):
url = "https://api.pnut.io/v0/posts/" + str(postid) + "?include_raw=1"
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
return r
def get_bookmarks(self):
url = "https://api.pnut.io/v0/users/me/bookmarks"
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
return r
def add_bookmark(self, postid):
url = "https://api.pnut.io/v0/posts/" + str(postid) + "/bookmark"
headers = { "Authorization": "Bearer " + self.token }
r = requests.put(url, headers=headers)
return r
def delete_bookmark(self, postid):
url = "https://api.pnut.io/v0/posts/" + str(postid) + "/bookmark"
headers = { "Authorization": "Bearer " + self.token }
r = requests.delete(url, headers=headers)
return r
def add_repost(self, postid):
url = "https://api.pnut.io/v0/posts/" + str(postid) + "/repost"
headers = { "Authorization": "Bearer " + self.token }
r = requests.put(url, headers=headers)
return r
def delete_repost(self, postid):
url = "https://api.pnut.io/v0/posts/" + str(postid) + "/repost"
headers = { "Authorization": "Bearer " + self.token }
r = requests.delete(url, headers=headers)
return r
def follow_user(self, uid):
url = "https://api.pnut.io/v0/users/" + str(uid) + "/follow"
headers = { "Authorization": "Bearer " + self.token }
r = requests.put(url, headers=headers)
return r
def unfollow_user(self, uid):
url = "https://api.pnut.io/v0/users/" + str(uid) + "/follow"
headers = { "Authorization": "Bearer " + self.token }
r = requests.delete(url, headers=headers)
return r
def get_followers(self):
url = "https://api.pnut.io/v0/users/me/followers"
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
return r
def get_following(self):
url = "https://api.pnut.io/v0/users/me/following"
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
return r
def get_mentions(self):
url = "https://api.pnut.io/v0/users/me/mentions"
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
return r
def post(self, text):
url = "https://api.pnut.io/v0/posts"
headers = { "Authorization": "Bearer " + self.token }
body = {
"text": text
}
r = requests.post(url, data=body, headers=headers)
return r
def channel_post(self, chan_id, text, raw):
url = "https://api.pnut.io/v0/channels/" + str(chan_id) + "/messages"
headers = {
"Authorization": "Bearer " + self.token,
"Content-Type": "application/json"
}
data = {"text": text }
if raw:
url += "?include_raw=1"
data["raw"] = raw
body = json.dumps(data)
r = requests.post(url, data=body, headers=headers)
return r
def delete_channel_post(self, chan_id, msg_id):
url = "https://api.pnut.io/v0/channels/" + str(chan_id) + "/messages/" + str(msg_id)
headers = {
"Authorization": "Bearer " + self.token,
"Content-Type": "application/json"
}
r = requests.delete(url, data=json.dumps({}), headers=headers)
return r
def global_post_oembed(self, text, embed):
url = "https://api.pnut.io/v0/posts?include_raw=1"
headers = {
"Authorization": "Bearer " + self.token,
"Content-Type": "application/json"
}
body = json.dumps({"text": text, "raw": embed})
r = requests.post(url, data=body, headers=headers)
return r
def process_text(self, text):
url = "https://api.pnut.io/v0/text/process"
headers = { "Authorization": "Bearer " + self.token }
body = {
"text": text
}
r = requests.post(url, json=body, headers=headers)
return r
def reply(self, postid, text):
url = "https://api.pnut.io/v0/posts"
headers = { "Authorization": "Bearer " + self.token }
me = self.username
author = self._getauthor(postid)
if author == me or author == None:
mtext = text
else:
mtext = "@%s %s" % (author, text)
body = {}
body["text"] = mtext
if len(postid) > 0:
body["reply_to"] = postid
r = requests.post(url, data=body, headers=headers)
return r
def replyall(self, postid, text):
url = "https://api.pnut.io/v0/posts"
headers = { "Authorization": "Bearer " + self.token }
me = self.username
author = self._getauthor(postid)
mentions = self._getmentions(postid)
mtext = "@%s " % (author)
mentions = [m for m in mentions if m != me]
mentions = [m for m in mentions if m != author]
if mentions:
mtext += " "
for nick in mentions:
mtext += "@%s " % nick
mtext += ""
mtext += text
body = {}
body["text"] = mtext
if len(str(postid)) > 0:
body["reply_to"] = postid
r = requests.post(url, data=body, headers=headers)
return r
def _getme(self):
if len(self.token) > 0:
url = "https://api.pnut.io/v0/users/me"
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
if r.status_code == 200:
rdata = rdata = json.loads(r.text)
return rdata["data"]["username"]
else:
return None
else:
return None
def _getpost(self, postid):
url = "https://api.pnut.io/v0/posts/" + str(postid)
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
if r.status_code == 200:
rdata = json.loads(r.text)
else:
return None
return rdata["data"]
def _getauthor(self, postid):
url = "https://api.pnut.io/v0/posts/" + str(postid)
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
if r.status_code == 200:
rdata = json.loads(r.text)
else:
return None
return rdata["data"]["user"]["username"]
def _getmentions(self, postid):
url = "https://api.pnut.io/v0/posts/" + str(postid)
headers = { "Authorization": "Bearer " + self.token }
r = requests.get(url, headers=headers)
if r.status_code == 200:
rdata = json.loads(r.text)
else:
return None
mentions = []
entities = rdata["data"]["content"]["entities"]
if "mentions" in entities:
for m in entities["mentions"]:
mentions.append(m["text"])
return mentions