From d90549e60afc95ed2231ea5047c2a315ed6ff319 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sun, 2 Sep 2018 10:47:19 +0200 Subject: [PATCH] Added example on how to use HTTP API --- examples/http-api/README.md | 33 +++++++++++++++++ examples/http-api/streamtorrent.py | 57 ++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 examples/http-api/README.md create mode 100644 examples/http-api/streamtorrent.py diff --git a/examples/http-api/README.md b/examples/http-api/README.md new file mode 100644 index 0000000..922b519 --- /dev/null +++ b/examples/http-api/README.md @@ -0,0 +1,33 @@ +# HTTP API + +Stream using the HTTP API built into Deluge Streaming. + +## Requirements + +* Python +* requests package + +## Config + +You need to enable HTTP API in Deluge Streaming config. + +## Example + +```python +from streamtorrent import stream_torrent + +if __name__ == '__main__': + with open('TPB.AFK.2013.1080p.h264-SimonKlose', 'rb') as f: + torrent_data = f.read() + + # Stream 1080p TPB AFK using infohash to avoid posting the torrent + # if it already exist. + url = stream_torrent( + 'http://stream:password@127.0.0.1:46123/streaming/stream', + infohash='411a7a164505636ab1a8276395b375a3a30bff32', + torrent_body=torrent_data, + label='tpbafk' + ) + print('we can stream %s' % (url, )) +``` + diff --git a/examples/http-api/streamtorrent.py b/examples/http-api/streamtorrent.py new file mode 100644 index 0000000..72800ff --- /dev/null +++ b/examples/http-api/streamtorrent.py @@ -0,0 +1,57 @@ +import requests + +class FailedToStreamException(Exception): + pass + + +def stream_torrent(remote_control_url, infohash=None, path=None, wait_for_end_pieces=True, label=None, torrent_body=None): + """ + Add a torrent to deluge, stream it and return a URL to where it can be watched. + + All optional parameters are optional but you will need to at least provide an infohash (if the torrent is already added) + or a torrent_body (if you want the torrent added). + + remote_control_url - The URL found in Deluge Streaming config + infohash - Torrent infohash, makes it faster if the torrent is already added + path - path inside the torrent you want to stream + wait_for_end_pieces - make sure the first and last piece are downloaded before returning url. + This might be necessary for some players + label - Label to set in deluge + torrent_body - The content of the .torrent file you want to stream + """ + first_part, second_part = remote_control_url.split('@') + username, password = first_part.split('/')[2].split(':') + url = '/'.join(first_part.split('/')[:2]) + '/' + second_part + + params = {} + if infohash: + params['infohash'] = infohash + + if wait_for_end_pieces: + params['wait_for_end_pieces'] = wait_for_end_pieces + + if path: + params['path'] = path + + if label: + params['label'] = label + + if infohash: # try to stream it without posting torrent body first + r = requests.get(url, auth=(username, password), params=params) + if r.status_code != 200: + raise FailedToStreamException('Got non-200 error code from Deluge') + + data = r.json() + if data['status'] == 'success': + return data['url'] + + if torrent_body: + r = requests.post(url, auth=(username, password), params=params, data=torrent_body) + if r.status_code != 200: + raise FailedToStreamException('Got non-200 error code from Deluge') + + data = r.json() + if data['status'] == 'success': + return data['url'] + + raise FailedToStreamException('Streaming was never successful')