From 883ecd54949fa90174094628bf002f179edf6767 Mon Sep 17 00:00:00 2001
From: cntrl-s <65956966+cntrl-s@users.noreply.github.com>
Date: Sat, 27 Nov 2021 00:05:39 +0530
Subject: [PATCH] Streamff extractor (#1736)

Closes #1359
Authored by: cntrl-s
---
 yt_dlp/extractor/extractors.py |  1 +
 yt_dlp/extractor/streamff.py   | 31 +++++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)
 create mode 100644 yt_dlp/extractor/streamff.py

diff --git a/yt_dlp/extractor/extractors.py b/yt_dlp/extractor/extractors.py
index 4dda3705a..163efc748 100644
--- a/yt_dlp/extractor/extractors.py
+++ b/yt_dlp/extractor/extractors.py
@@ -1404,6 +1404,7 @@ from .streamable import StreamableIE
 from .streamanity import StreamanityIE
 from .streamcloud import StreamcloudIE
 from .streamcz import StreamCZIE
+from .streamff import StreamFFIE
 from .streetvoice import StreetVoiceIE
 from .stretchinternet import StretchInternetIE
 from .stripchat import StripchatIE
diff --git a/yt_dlp/extractor/streamff.py b/yt_dlp/extractor/streamff.py
new file mode 100644
index 000000000..6b190bb3b
--- /dev/null
+++ b/yt_dlp/extractor/streamff.py
@@ -0,0 +1,31 @@
+# coding: utf-8
+from .common import InfoExtractor
+from ..utils import int_or_none, parse_iso8601
+
+
+class StreamFFIE(InfoExtractor):
+    _VALID_URL = r'https?://(?:www\.)?streamff\.com/v/(?P<id>[a-zA-Z0-9]+)'
+
+    _TESTS = [{
+        'url': 'https://streamff.com/v/55cc94',
+        'md5': '8745a67bb5e5c570738efe7983826370',
+        'info_dict': {
+            'id': '55cc94',
+            'ext': 'mp4',
+            'title': '55cc94',
+            'timestamp': 1634764643,
+            'upload_date': '20211020',
+            'view_count': int,
+        }
+    }]
+
+    def _real_extract(self, url):
+        video_id = self._match_id(url)
+        json_data = self._download_json(f'https://streamff.com/api/videos/{video_id}', video_id)
+        return {
+            'id': video_id,
+            'title': json_data.get('name') or video_id,
+            'url': 'https://streamff.com/%s' % json_data['videoLink'],
+            'view_count': int_or_none(json_data.get('views')),
+            'timestamp': parse_iso8601(json_data.get('date')),
+        }