from bs4 import BeautifulSoup import requests import json def get_instance_name(domain): soup = BeautifulSoup(requests.get("https://" + domain).text, "lxml") title = soup.find('title') if title: return title.text else: return "PeerTube Instance" def video(domain, id): video_url = "https://" + domain + "/api/v1/videos/" + id video_object = json.loads(requests.get(video_url).text) return video_object def search(domain, term, start = 0, count = 10): search_url = "https://" + domain + "/api/v1/search/videos?start=" + str(start) + "&count=" + str(count) + "&search=" + term + "&sort=-match&searchTarget=local" search_object = json.loads(requests.get(search_url).text) amount = search_object["total"] results = search_object["data"] return amount, results def get_comments(domain, id): url = "https://" + domain + "/api/v1/videos/" + id + "/comment-threads" return json.loads(requests.get(url).text) def get_videos_trending(domain): url = "https://" + domain + "/api/v1/videos?sort=-trending" return json.loads(requests.get(url).text) def get_videos_most_liked(domain): url = "https://" + domain + "/api/v1/videos?sort=-likes" return json.loads(requests.get(url).text) def get_videos_recently_added(domain): url = "https://" + domain + "/api/v1/videos?sort=-publishedAt" return json.loads(requests.get(url).text) def get_videos_local(domain): url = "https://" + domain + "/api/v1/videos?sort=-publishedAt&filter=local" return json.loads(requests.get(url).text) # --- Accounts --- def account_video_channels(domain, name): url = "https://" + domain + "/api/v1/accounts/" + name + "/video-channels" return json.loads(requests.get(url).text) def account_videos(domain, name): url = "https://" + domain + "/api/v1/accounts/" + name + "/videos" return json.loads(requests.get(url).text) def account(domain, name): url = "https://" + domain + "/api/v1/accounts/" + name return json.loads(requests.get(url).text) # --- Video Channels --- def video_channel_videos(domain, name): url = "https://" + domain + "/api/v1/video-channels/" + name + "/videos" return json.loads(requests.get(url).text) def video_channel_video_playlists(domain, name): url = "https://" + domain + "/api/v1/video-channels/" + name + "/video-playlists" return json.loads(requests.get(url).text) def video_channel(domain, name): url = "https://" + domain + "/api/v1/video-channels/" + name return json.loads(requests.get(url).text) if __name__ == "__main__": #name = get_instance_name("videos.lukesmith.xyz") #print(name) #com = get_comments("videos.lukesmith.xyz", "d1bfb082-b203-43dc-9676-63d28fe65db5") #print(json.dumps(com, indent=2)) #vid = video("diode.zone", "c4f0d71b-bd8b-4641-87b0-6d9edd4fa9ce") #print(json.dumps(vid, indent=2)) _, results = search("diode.zone", "test") print(json.dumps(results, indent=2)) #video_channels = account_video_channels("peer.tube", "mouse@peertube.dsmouse.net") #print(json.dumps(video_channels, indent=2))