[facebook:post] Add extractor (Closes #8321)
authorSergey M․ <dstftw@gmail.com>
Mon, 25 Jan 2016 16:18:34 +0000 (22:18 +0600)
committerSergey M․ <dstftw@gmail.com>
Mon, 25 Jan 2016 16:18:34 +0000 (22:18 +0600)
youtube_dl/extractor/__init__.py
youtube_dl/extractor/facebook.py

index 245e4d044e40653d877bcb1163e275e62f485a3b..532be7e4cb4e260338a47f6d2acf424ba8e94bf1 100644 (file)
@@ -196,7 +196,10 @@ from .everyonesmixtape import EveryonesMixtapeIE
 from .exfm import ExfmIE
 from .expotv import ExpoTVIE
 from .extremetube import ExtremeTubeIE
-from .facebook import FacebookIE
+from .facebook import (
+    FacebookIE,
+    FacebookPostIE,
+)
 from .faz import FazIE
 from .fc2 import FC2IE
 from .fczenit import FczenitIE
index f9fd8ed4ec7950a4e35f70125eaa071632e0a3d7..cb5dd57fb4a6cd54400ebd03631dda7e3f07962a 100644 (file)
@@ -199,3 +199,33 @@ class FacebookIE(InfoExtractor):
             'formats': formats,
             'uploader': uploader,
         }
+
+
+class FacebookPostIE(InfoExtractor):
+    IE_NAME = 'facebook:post'
+    _VALID_URL = r'https?://(?:\w+\.)?facebook\.com/[^/]+/posts/(?P<id>\d+)'
+    _TEST = {
+        'url': 'https://www.facebook.com/maxlayn/posts/10153807558977570',
+        'md5': '037b1fa7f3c2d02b7a0d7bc16031ecc6',
+        'info_dict': {
+            'id': '544765982287235',
+            'ext': 'mp4',
+            'title': '"What are you doing running in the snow?"',
+            'uploader': 'FailArmy',
+        }
+    }
+
+    def _real_extract(self, url):
+        post_id = self._match_id(url)
+
+        webpage = self._download_webpage(url, post_id)
+
+        entries = [
+            self.url_result('facebook:%s' % video_id, FacebookIE.ie_key())
+            for video_id in self._parse_json(
+                self._search_regex(
+                    r'(["\'])video_ids\1\s*:\s*(?P<ids>\[.+?\])',
+                    webpage, 'video ids', group='ids'),
+                post_id)]
+
+        return self.playlist_result(entries, post_id)