diff options
| author | Jai Grimshaw <jai@jaigrimshaw.com> | 2013-10-14 16:18:58 +1100 | 
|---|---|---|
| committer | Jai Grimshaw <jai@jaigrimshaw.com> | 2013-10-14 16:22:27 +1100 | 
| commit | 1fb07d10a3f5f2baf1ebbdbc69d8ee8615cec2f9 (patch) | |
| tree | decadb459ae00dbe508dd884df3deff843c37831 /youtube_dl/YoutubeDL.py | |
| parent | 06723d47c4f934542a626569045e489a09796975 (diff) | |
[youtube] Adds #1312 Download annotations
Adds #1321 Download annotations from youtube
Annotations are downloaded and written to a .annotations.xml file using the https://www.youtube.com/annotations_invideo?features=1&legacy=1&video_id=$VIDEOID API.
Added unit test for annotations.
Diffstat (limited to 'youtube_dl/YoutubeDL.py')
| -rw-r--r-- | youtube_dl/YoutubeDL.py | 17 | 
1 files changed, 17 insertions, 0 deletions
diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index e85e03fa4..c8054544a 100644 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -71,6 +71,7 @@ class YoutubeDL(object):      logtostderr:       Log messages to stderr instead of stdout.      writedescription:  Write the video description to a .description file      writeinfojson:     Write the video description to a .info.json file +    writeannotations:  Write the video annotations to a .annotations.xml file      writethumbnail:    Write the thumbnail image to a file      writesubtitles:    Write the video subtitles to a file      writeautomaticsub: Write the automatic subtitles to a file @@ -258,6 +259,10 @@ class YoutubeDL(object):          """ Report that the metadata file has been written """          self.to_screen(u'[info] Video description metadata as JSON to: ' + infofn) +    def report_writeannotations(self, annofn): +        """ Report that the annotations file has been written. """ +        self.to_screen(u'[info] Writing video annotations to: ' + annofn) +      def report_file_already_downloaded(self, file_name):          """Report file has already been fully downloaded."""          try: @@ -522,6 +527,18 @@ class YoutubeDL(object):                  self.report_error(u'Cannot write description file ' + descfn)                  return +        if self.params.get('writeannotations', False): +            try: +               annofn = filename + u'.annotations.xml' +               self.report_writeannotations(annofn) +               with io.open(encodeFilename(annofn), 'w', encoding='utf-8') as annofile: +                   annofile.write(info_dict['annotations']) +            except (KeyError, TypeError): +                self.report_warning(u'There are no annotations to write.') +            except (OSError, IOError): +                 self.report_error(u'Cannot write annotations file: ' + annofn) +                 return +          subtitles_are_requested = any([self.params.get('writesubtitles', False),                                         self.params.get('writeautomaticsub')])  | 
