aboutsummaryrefslogtreecommitdiffstats
path: root/youtube_podcaster/youtube
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2015-10-11 00:15:23 +0200
committerGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2015-10-11 13:29:38 +0200
commitf1ddf104809017784aa136ebb8ff7e2cfb96d5f4 (patch)
tree42e28ab543cc151658151714d66a9fdd2549cc5e /youtube_podcaster/youtube
parent71fb4d6c853cd3d42178758326b474b225a06425 (diff)
downloadyoutube-podcaster-f1ddf104809017784aa136ebb8ff7e2cfb96d5f4.tar.gz
youtube-podcaster-f1ddf104809017784aa136ebb8ff7e2cfb96d5f4.tar.bz2
youtube-podcaster-f1ddf104809017784aa136ebb8ff7e2cfb96d5f4.zip
Changed directory structure to use pyscaffold
Diffstat (limited to 'youtube_podcaster/youtube')
-rw-r--r--youtube_podcaster/youtube/__init__.py6
-rw-r--r--youtube_podcaster/youtube/downloader.py42
-rw-r--r--youtube_podcaster/youtube/youtube.py44
3 files changed, 92 insertions, 0 deletions
diff --git a/youtube_podcaster/youtube/__init__.py b/youtube_podcaster/youtube/__init__.py
new file mode 100644
index 0000000..d26ae61
--- /dev/null
+++ b/youtube_podcaster/youtube/__init__.py
@@ -0,0 +1,6 @@
1#!/usr/bin/env python3
2
3from youtube.youtube import Youtube
4from youtube.downloader import Downloader
5
6# vim: set ts=8 sw=4 tw=0 et :
diff --git a/youtube_podcaster/youtube/downloader.py b/youtube_podcaster/youtube/downloader.py
new file mode 100644
index 0000000..ca1327b
--- /dev/null
+++ b/youtube_podcaster/youtube/downloader.py
@@ -0,0 +1,42 @@
1#!/usr/bin/env python3
2
3import youtube_dl
4import os
5
6
7class Downloader:
8 instance = None
9
10 def get_instance(file_format, location, base_url):
11 if Downloader.instance:
12 return Downloader.instance
13 else:
14 Downloader.instance = Downloader(file_format, location, base_url)
15 return Downloader.instance
16
17 def __init__(self, file_format, location, base_url):
18 self.file_format = file_format
19 self.location = location
20 self.base_url = base_url
21
22 def download(self, video, video_id, feed_id):
23 output = "%s/%s/%s.ogg" % (self.location, feed_id, video_id)
24 options = {"format": "bestaudio/best",
25 "outtmpl": output,
26 "postprocessors": [{
27 "key": "FFmpegExtractAudio",
28 "preferredcodec": self.file_format
29 }],
30 "nooverwrites": True
31 }
32
33 video_url = "https://www.youtube.com/watch?v=%s" % (video["snippet"]["resourceId"]["videoId"])
34 youtube_dl.YoutubeDL(options).download([video_url])
35
36 url = "%s/%s/%s.ogg" % (self.base_url, feed_id, video_id)
37 size = str(os.path.getsize(output))
38 mime = "audio/ogg"
39
40 return (url, size, mime)
41
42# vim: set ts=8 sw=4 tw=0 et :
diff --git a/youtube_podcaster/youtube/youtube.py b/youtube_podcaster/youtube/youtube.py
new file mode 100644
index 0000000..bcbff21
--- /dev/null
+++ b/youtube_podcaster/youtube/youtube.py
@@ -0,0 +1,44 @@
1#!/usr/bin/env python3
2
3from urllib import parse, request
4import json
5
6
7class Youtube:
8
9 def __init__(self, api_key):
10 self.api_key = api_key
11
12 def _api_call(self, section, parameters):
13 parameters["key"] = self.api_key
14 data = parse.urlencode(parameters)
15 api_base = "https://www.googleapis.com/youtube/v3"
16 response = request.urlopen("%s/%s?%s" % (api_base, section, data))
17 return json.loads(response.read().decode("UTF-8"))["items"]
18
19 def search(self, query):
20 return self._api_call("search", {"part": "snippet",
21 "q": query})
22
23 def get_channel(self, username):
24 return self._api_call("channels", {"part": "snippet",
25 "forUsername": username})
26
27 def get_uploads(self, channel):
28 content_details = self._api_call("channels", {"part": "contentDetails",
29 "id": channel["id"]})
30 uploads_id = content_details[0]["contentDetails"]["relatedPlaylists"]["uploads"]
31 return self._api_call("playlists", {"part": "snippet",
32 "id": uploads_id})
33
34 def get_playlists(self, channel, max_results=5):
35 return self._api_call("playlists", {"part": "snippet",
36 "channelId": channel["id"],
37 "maxResults": max_results})
38
39 def get_playlist_items(self, playlist, max_results=5):
40 return self._api_call("playlistItems", {"part": "snippet",
41 "playlistId": playlist["id"],
42 "maxResults": max_results})
43
44# vim: set ts=8 sw=4 tw=0 et :