Repository: yt-dlp/yt-dlp

Issue:
[foxnews] None: Failed to parse JSON
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting a broken site
- [X] I've verified that I'm running yt-dlp version **2023.01.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

anywhere

### Provide a description that is worded well enough to be understood

Test link:
https://www.foxnews.com/video/6318848717112


### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
./yt-dlp -Uv -F "https://www.foxnews.com/video/6318848717112"
[debug] Command-line config: ['-Uv', '-F', 'https://www.foxnews.com/video/6318848717112']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2023.01.06 [6becd2508] (zip)
[debug] Python 3.10.9 (CPython arm64 64bit) - macOS-12.6.2-arm64-arm-64bit (OpenSSL 1.1.1s  1 Nov 2022)
[debug] exe versions: phantomjs 2.1.1
[debug] Optional libraries: sqlite3-2.6.0
[debug] Proxy map: {}
[debug] Loaded 1761 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2023.01.06, Current version: 2023.01.06
yt-dlp is up to date (2023.01.06)
[FoxNewsVideo] Extracting URL: https://www.foxnews.com/video/6318848717112
[foxnews] Extracting URL: https://video.foxnews.com/v/6318848717112
[foxnews] Downloading Akamai AMP feed
ERROR: [foxnews] 6318848717112: None: Failed to parse JSON (caused by JSONDecodeError("Expecting value in 'OK': line 1 column 1 (char 0)")); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "./yt-dlp/yt_dlp/extractor/common.py", line 682, in extract
    ie_result = self._real_extract(url)
  File "./yt-dlp/yt_dlp/extractor/foxnews.py", line 72, in _real_extract
    info = self._extract_feed_info(
  File "./yt-dlp/yt_dlp/extractor/amp.py", line 16, in _extract_feed_info
    feed = self._download_json(
  File "./yt-dlp/yt_dlp/extractor/common.py", line 1036, in download_content
    res = getattr(self, download_handle.__name__)(url_or_request, video_id, **kwargs)
  File "./yt-dlp/yt_dlp/extractor/common.py", line 1006, in download_handle
    return parse(self, content, video_id, transform_source=transform_source, fatal=fatal, errnote=errnote), urlh
  File "./yt-dlp/yt_dlp/extractor/common.py", line 996, in parse
    return getattr(ie, parser)(content, *args, **kwargs)
  File "./yt-dlp/yt_dlp/extractor/common.py", line 983, in _parse_json
    self.__print_error('Failed to parse JSON' if errnote is None else errnote, fatal, video_id, ve)
  File "./yt-dlp/yt_dlp/extractor/common.py", line 966, in __print_error
    raise ExtractorError(f'{video_id}: {errnote}', cause=err)

  File "./yt-dlp/yt_dlp/utils.py", line 606, in decode
    return super().decode(s)
  File "/opt/homebrew/Cellar/python@3.10/3.10.9/Frameworks/Python.framework/Versions/3.10/lib/python3.10/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/opt/homebrew/Cellar/python@3.10/3.10.9/Frameworks/Python.framework/Versions/3.10/lib/python3.10/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./yt-dlp/yt_dlp/extractor/common.py", line 980, in _parse_json
    return json.loads(
  File "/opt/homebrew/Cellar/python@3.10/3.10.9/Frameworks/Python.framework/Versions/3.10/lib/python3.10/json/__init__.py", line 359, in loads
    return cls(**kw).decode(s)
  File "./yt-dlp/yt_dlp/utils.py", line 609, in decode
    raise type(e)(f'{e.msg} in {s[e.pos-10:e.pos+10]!r}', s, e.pos)
json.decoder.JSONDecodeError: Expecting value in 'OK': line 1 column 1 (char 0)
```



Discussion:
I confirm the existence of the error.
The problem does not depend on the country from which I am trying to access the FOX site.

yt-dlp is up to date (2023.01.06)
This URL format was introduced last year (#5133) and fixed by redirecting to the corresponding old URL. Now the old format URLs redirect back to the new format and the feed URL used to extract JSON for the old format just returns the text `OK`, which as above is not valid JSON (and certainly not useful).

The page is structured with a Nuxt.js hydration script (pah!) and a full ld+json block (better). **But**:
* the ld+json block is invalid JSON because of a fragment like this, repeated in the Nuxt.js script, where the value should be enclosed in `[]` instead of `""`:
```
    "actor": "{
      "@type": "Person",
      "url": "https://www.foxnews.com/person/r/john-roberts",
      "name": "John Roberts"
    },{
      "@type": "Person",
      "url": "https://www.foxnews.com/person/s/sandra-smith",
      "name": "Sandra Smith"
    }",
```
* the media link (`contentUrl`) gives 403 from UK, regardless of XFF.

I have been seeing this error for two days, now.
> I have been seeing this error for two days, now.

I'm not sure what show(s) you're trying to download, but fox.com still works for grabbing them. I just had to do that myself.
> > I have been seeing this error for two days, now.
> 
> I'm not sure what show(s) you're trying to download, but fox.com still works for grabbing them. I just had to do that myself.

All I get is a "We'll be back shortly" page for the shows I usually download.
As reported by Nhb93. Success with TCT, JER, U w/DB, SMF, LL&L. Thanks Nhb93.
Can someone be more specific about what Nhb93 meant by "I just had to do that myself."  Can we see an example correct URL format?  I am specifically looking at TCT.
Examples for TCT:
https://www.fox.com/watch/8d71adb59b39f777b284dfc79ba0dde3/
https://www.fox.com/watch/1db8f30a1f11ac9dc022e4fb33154c56/
I am still not understanding what I need to do to get this to work.  Do I need to change the URL?  I tried to go to fox.com and append it with the video number but it is still not working.
Go to to https://www.fox.com/tucker-carlson-tonight/ and manually copy links from the daily thumbnails.
Thank you for that fschnell68.  Here is the link I am trying to get but do not know where to find it:

https://www.foxnews.com/video/6319105077112
Ah fschnell68, interesting, for years I would use the foxnews.com links like dpalusak noted, only recently having to manually change them to something like https://video.foxnews.com/v/6319105077112.  Neither works for me now but I wasn't aware of the fox.com links you note her and they seem to be working, thank you.

dpalusak, I tried to find the right link for you via the Wayback Machine (https://web.archive.org/web/20230000000000*/https://www.fox.com/tucker-carlson-tonight/) but there wasn't snapshot close enough to that date.

A tip for anyone interested...I use Urlooker to snap a copy of the page daily and it emails it to me so I have an entire history of the show links.

icsllcweb, thank you for that Wayback Machine site, I have never used that before but will definitely bookmark it!  I found one on that site but still unable to download it:( It looks like it is going to download it but fails...The URL I am trying is: (https://web.archive.org/web/20230131074913/https://www.foxnews.com/video/6319105077112)  oh well, thank you for looking at this for me I appreciate it.
Archive.org should have a full copy of most news broadcasts searchable by caption, but the problem is, you can only watch back the video 3 minutes at most at a time, despite the entire hour being available. yt-dlp also can't grab the entire page, only the first snippet.
Nhb93, I actually found the clip I was looking for but do not see any real way to get the url unless I am missing something.  
@dpalusak It looks like the foxnews.com links found on the Wayback Machine are working after all.  Try this, go to the Tucker page on Wayback: https://web.archive.org/web/20230000000000*/https://www.foxnews.com/shows/tucker-carlson-tonight.  Find a historical date, click on it, pick a snapshot time, right-click and copy the link.  It will look something like this: https://web.archive.org/web/20230108191014/https://www.foxnews.com/video/6318123440112

Cut the link down to the original: https://www.foxnews.com/video/6318123440112

Change the link to: https://**video**.foxnews.com/**v**/6318123440112 (change www to video and video to v)

Use this link for yt-dlp
@icsllcweb I am testing this now.  I will let you know how it goes.
@icsllcweb I have tested this and still getting errors.  My link from wayback is this: https://web.archive.org/web/20230208195307/https://www.foxnews.com/video/6319949804112

I paste it into yt-dlp and change the link as you state above but still getting errors.

This is the error if you are interested:

Error for https://video.foxnews.com/v/6319949804112
Error while retrieving info on video with URL https://video.foxnews.com/v/6319949804112 with the following message: Error: Command failed with exit code 1: node_modules/youtube-dl/bin/youtube-dl -o users/dan/video/%(title)s.mp4 --write-info-json --write-thumbnail --no-clean-info-json -j --no-simulate --dump-json -- https://video.foxnews.com/v/6319949804112 ERROR: [foxnews] 6319949804112: None: Failed to parse JSON (caused by JSONDecodeError("Expecting value in 'OK': line 1 column 1 (char 0)")); please report this issue on https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using yt-dlp -U

I also tested it with the link to Tucker Carlson and got the same error.  Weird...
Workaround: `yt-dlp --force-generic https://www.foxnews.com/video/6319105077112`
@pukkandan Am I putting this in the URL section in yt-dlp when trying to download the video?
> Workaround: `yt-dlp --force-generic https://www.foxnews.com/video/6319105077112`

This works for me.

Thank you!
@palevell That's great to hear.  I am still struggling with it.  If it is any help, I am running this is a docker container on a synology NAS.  I can take a regular youtube video and it downloads without issue.  Not sure what else to do to fix this.
After further review, I am having hit and miss again with the foxnews.com links, whether straight from the site or from the wayback machine.  And the links from fox.com work great, but the ones from wayback machine for fox.com do not.  What a mess.  I am hoping for a fix for the error that started this thread.
> Am I putting this in the URL section in yt-dlp when trying to download the video?

What "URL section"? That's the full command
In yt-dlp correct?

![image](https://user-images.githubusercontent.com/17187554/219046581-9deec1b5-7227-4728-86e1-5cd852d2dad7.png)

That is (probably) some third party for yt-dlp. You will need to figure out how to pass arbitrary options to yt-dlp in the GUI. We can't help you there
I removed that app and am now running AllTube.  @icsllcweb you may want to give that a shot.  Works well with the original link without having go to wayback machine.
When trying --force-generic I get:

2023-02-15 20:02:46,993-DEBUG-Worker_1-WARNING: [generic] Forcing generic information extractor
2023-02-15 20:02:46,993-DEBUG-Worker_1-ERROR: [generic] None: Unable to download webpage: HTTP Error 403: Forbidden (caused by <HTTPError 403: 'Forbidden'>); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
2023-02-15 20:02:46,993-DEBUG-Worker_1-Child process exited with non-zero code: 1

> This URL format was introduced last year (#5133) and fixed by redirecting to the corresponding old URL. Now the old format URLs redirect back to the new format and the feed URL used to extract JSON for the old format just returns the text `OK`, which as above is not valid JSON (and certainly not useful).
> 
> The page is structured with a Nuxt.js hydration script (pah!) and a full ld+json block (better). **But**:
> 
>     * the ld+json block is invalid JSON because of a fragment like this, repeated in the Nuxt.js script, where the value should be enclosed in `[]` instead of `""`:
> 
> 
> ```
>     "actor": "{
>       "@type": "Person",
>       "url": "https://www.foxnews.com/person/r/john-roberts",
>       "name": "John Roberts"
>     },{
>       "@type": "Person",
>       "url": "https://www.foxnews.com/person/s/sandra-smith",
>       "name": "Sandra Smith"
>     }",
> ```
> 
>     * the media link (`contentUrl`) gives 403 from UK, regardless of XFF.

While you are correct it is not proper JSON, it is proper JSON-LD which is what the ld+json block is representing.  Seems to me that for Fox news to work properly, someone will need work on JSON-LD support.   Unfortunately I'm not a developer otherwise I would assist.

I did use wget to retrieve a video line then grep for contentURL and used that to play the video.  Long way around, but it worked.

https://video.foxnews.com/v/6320653836112
http://vod.foxnews.com/media/v1/pmp4/static/clear/694940094001/f2d95c86-910e-4eca-905b-0f188cb5cd21/a0905e10-00f6-4ea9-b5b4-d65949804061/main.mp4

If this is already know, then just ignore me.
Will this possible be resolved? People outside the US cannot generate links with the generic information extractor.
It doesn't work for me either. Any chance of an update? Fox News is not some obscure little website. :-)
```diff
diff --git a/yt_dlp/extractor/amp.py b/yt_dlp/extractor/amp.py
index b0cbd775c..c6b1dc0c6 100644
--- a/yt_dlp/extractor/amp.py
+++ b/yt_dlp/extractor/amp.py
@@ -5,6 +5,7 @@
     int_or_none,
     mimetype2ext,
     parse_iso8601,
+    strip_jsonp,
     unified_timestamp,
     url_or_none,
 )
@@ -15,7 +16,7 @@ class AMPIE(InfoExtractor):  # XXX: Conventionally, base classes should end with
     def _extract_feed_info(self, url):
         feed = self._download_json(
             url, None, 'Downloading Akamai AMP feed',
-            'Unable to download Akamai AMP feed')
+            'Unable to download Akamai AMP feed', transform_source=strip_jsonp)
         item = feed.get('channel', {}).get('item')
         if not item:
             raise ExtractorError('%s said: %s' % (self.IE_NAME, feed['error']))
diff --git a/yt_dlp/extractor/foxnews.py b/yt_dlp/extractor/foxnews.py
index 52172aace..2172e0fbd 100644
--- a/yt_dlp/extractor/foxnews.py
+++ b/yt_dlp/extractor/foxnews.py
@@ -7,7 +7,7 @@
 class FoxNewsIE(AMPIE):
     IE_NAME = 'foxnews'
     IE_DESC = 'Fox News and Fox Business Video'
-    _VALID_URL = r'https?://(?P<host>video\.(?:insider\.)?fox(?:news|business)\.com)/v/(?:video-embed\.html\?video_id=)?(?P<id>\d+)'
+    _VALID_URL = r'https?://video\.(?:insider\.)?fox(?:news|business)\.com/v/(?:video-embed\.html\?video_id=)?(?P<id>\d+)'
     _TESTS = [
         {
             'url': 'http://video.foxnews.com/v/3937480/frozen-in-time/#sp=show-clips',
@@ -67,10 +67,10 @@ def _extract_embed_urls(cls, url, webpage):
             yield f'https://video.foxnews.com/v/video-embed.html?video_id={mobj.group("video_id")}'
 
     def _real_extract(self, url):
-        host, video_id = self._match_valid_url(url).groups()
+        video_id = self._match_id(url)
 
         info = self._extract_feed_info(
-            'http://%s/v/feed/video/%s.js?template=fox' % (host, video_id))
+            f'https://api.foxnews.com/v3/video-player/{video_id}?callback=uid_{video_id}')
         info['id'] = video_id
         return info
 
```

Resolving patch:
diff --git a/yt_dlp/extractor/amp.py b/yt_dlp/extractor/amp.py
--- a/yt_dlp/extractor/amp.py
+++ b/yt_dlp/extractor/amp.py
@@ -5,6 +5,7 @@
     int_or_none,
     mimetype2ext,
     parse_iso8601,
+    strip_jsonp,
     unified_timestamp,
     url_or_none,
 )
@@ -15,7 +16,7 @@ class AMPIE(InfoExtractor):  # XXX: Conventionally, base classes should end with
     def _extract_feed_info(self, url):
         feed = self._download_json(
             url, None, 'Downloading Akamai AMP feed',
-            'Unable to download Akamai AMP feed')
+            'Unable to download Akamai AMP feed', transform_source=strip_jsonp)
         item = feed.get('channel', {}).get('item')
         if not item:
             raise ExtractorError('%s said: %s' % (self.IE_NAME, feed['error']))
@@ -73,8 +74,10 @@ def get_media_node(name, default=None):
                     media_url + '?hdcore=3.4.0&plugin=aasp-3.4.0.132.124',
                     video_id, f4m_id='hds', fatal=False))
             elif ext == 'm3u8':
-                formats.extend(self._extract_m3u8_formats(
-                    media_url, video_id, 'mp4', m3u8_id='hls', fatal=False))
+                fmts, subs = self._extract_m3u8_formats_and_subtitles(
+                    media_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
+                formats.extend(fmts)
+                self._merge_subtitles(subs, target=subtitles)
             else:
                 formats.append({
                     'format_id': media_data.get('media-category', {}).get('@attributes', {}).get('label'),
diff --git a/yt_dlp/extractor/foxnews.py b/yt_dlp/extractor/foxnews.py
--- a/yt_dlp/extractor/foxnews.py
+++ b/yt_dlp/extractor/foxnews.py
@@ -7,8 +7,37 @@
 class FoxNewsIE(AMPIE):
     IE_NAME = 'foxnews'
     IE_DESC = 'Fox News and Fox Business Video'
-    _VALID_URL = r'https?://(?P<host>video\.(?:insider\.)?fox(?:news|business)\.com)/v/(?:video-embed\.html\?video_id=)?(?P<id>\d+)'
+    _VALID_URL = r'https?://video\.(?:insider\.)?fox(?:news|business)\.com/v/(?:video-embed\.html\?video_id=)?(?P<id>\d+)'
     _TESTS = [
+        {
+            'url': 'https://video.foxnews.com/v/6320653836112',
+            'info_dict': {
+                'id': '6320653836112',
+                'ext': 'mp4',
+                'title': 'Tucker Carlson joins \'Gutfeld!\' to discuss his new documentary',
+                'thumbnail': r're:^https?://.*\.jpg$',
+                'duration': 404,
+                'upload_date': '20230217',
+                'description': 'md5:858a8a36f59e9ca897d758855bcdfa02',
+                'timestamp': 1676611344.0,
+            },
+            'params': {'skip_download': 'm3u8'},
+        },
+        {
+            # From http://insider.foxnews.com/2016/08/25/univ-wisconsin-student-group-pushing-silence-certain-words
+            'url': 'http://video.insider.foxnews.com/v/video-embed.html?video_id=5099377331001&autoplay=true&share_url=http://insider.foxnews.com/2016/08/25/univ-wisconsin-student-group-pushing-silence-certain-words&share_title=Student%20Group:%20Saying%20%27Politically%20Correct,%27%20%27Trash%27%20and%20%27Lame%27%20Is%20Offensive&share=true',
+            'info_dict': {
+                'id': '5099377331001',
+                'ext': 'mp4',
+                'title': '82416_censoring',
+                'description': '82416_censoring',
+                'upload_date': '20160826',
+                'timestamp': 1472169708.0,
+                'thumbnail': r're:^https?://.*\.jpg$',
+                'duration': 521,
+            },
+            'params': {'skip_download': 'm3u8'},
+        },
         {
             'url': 'http://video.foxnews.com/v/3937480/frozen-in-time/#sp=show-clips',
             'md5': '32aaded6ba3ef0d1c04e238d01031e5e',
@@ -22,6 +51,7 @@ class FoxNewsIE(AMPIE):
                 'upload_date': '20110503',
                 'thumbnail': r're:^https?://.*\.jpg$',
             },
+            'skip': '404 page',
         },
         {
             'url': 'http://video.foxnews.com/v/3922535568001/rep-luis-gutierrez-on-if-obamas-immigration-plan-is-legal/#sp=show-clips',
@@ -36,10 +66,7 @@ class FoxNewsIE(AMPIE):
                 'upload_date': '20141204',
                 'thumbnail': r're:^https?://.*\.jpg$',
             },
-            'params': {
-                # m3u8 download
-                'skip_download': True,
-            },
+            'skip': 'm3u8 HTTP error 400 in web browser',
         },
         {
             'url': 'http://video.foxnews.com/v/video-embed.html?video_id=3937480&d=video.foxnews.com',
@@ -49,11 +76,6 @@ class FoxNewsIE(AMPIE):
             'url': 'http://video.foxbusiness.com/v/4442309889001',
             'only_matching': True,
         },
-        {
-            # From http://insider.foxnews.com/2016/08/25/univ-wisconsin-student-group-pushing-silence-certain-words
-            'url': 'http://video.insider.foxnews.com/v/video-embed.html?video_id=5099377331001&autoplay=true&share_url=http://insider.foxnews.com/2016/08/25/univ-wisconsin-student-group-pushing-silence-certain-words&share_title=Student%20Group:%20Saying%20%27Politically%20Correct,%27%20%27Trash%27%20and%20%27Lame%27%20Is%20Offensive&share=true',
-            'only_matching': True,
-        },
     ]
 
     @classmethod
@@ -67,10 +89,10 @@ def _extract_embed_urls(cls, url, webpage):
             yield f'https://video.foxnews.com/v/video-embed.html?video_id={mobj.group("video_id")}'
 
     def _real_extract(self, url):
-        host, video_id = self._match_valid_url(url).groups()
+        video_id = self._match_id(url)
 
         info = self._extract_feed_info(
-            'http://%s/v/feed/video/%s.js?template=fox' % (host, video_id))
+            f'https://api.foxnews.com/v3/video-player/{video_id}?callback=uid_{video_id}')
         info['id'] = video_id
         return info
 
@@ -78,6 +100,19 @@ def _real_extract(self, url):
 class FoxNewsVideoIE(InfoExtractor):
     _VALID_URL = r'https?://(?:www\.)?foxnews\.com/video/(?P<id>\d+)'
     _TESTS = [{
+        'url': 'https://www.foxnews.com/video/6328632286112',
+        'info_dict': {
+            'id': '6328632286112',
+            'ext': 'mp4',
+            'title': 'Review: 2023 Toyota Prius Prime',
+            'duration': 155,
+            'thumbnail': r're:^https://.+\.jpg$',
+            'timestamp': 1685720177.0,
+            'upload_date': '20230602',
+            'description': 'md5:b69aafb125b41c1402e9744f53d6edc4',
+        },
+        'params': {'skip_download': 'm3u8'},
+    }, {
         'url': 'https://www.foxnews.com/video/6313058664112',
         'info_dict': {
             'id': '6313058664112',
@@ -89,8 +124,7 @@ class FoxNewsVideoIE(InfoExtractor):
             'title': 'Gutfeld! - Thursday, September 29',
             'timestamp': 1664527538,
         },
-        'expected_warnings': ['Ignoring subtitle tracks'],
-        'params': {'skip_download': 'm3u8'},
+        'skip': '404 page',
     }]
 
     def _real_extract(self, url):
@@ -104,19 +138,22 @@ class FoxNewsArticleIE(InfoExtractor):
 
     _TESTS = [{
         # data-video-id
-        'url': 'http://www.foxnews.com/politics/2016/09/08/buzz-about-bud-clinton-camp-denies-claims-wore-earpiece-at-forum.html',
-        'md5': '83d44e1aff1433e7a29a7b537d1700b5',
+        'url': 'https://www.foxnews.com/politics/2016/09/08/buzz-about-bud-clinton-camp-denies-claims-wore-earpiece-at-forum.html',
+        'md5': 'd2dd6ce809cedeefa96460e964821437',
         'info_dict': {
             'id': '5116295019001',
             'ext': 'mp4',
             'title': 'Trump and Clinton asked to defend positions on Iraq War',
-            'description': 'Veterans react on \'The Kelly File\'',
+            'description': 'Veterans and Fox News host Dana Perino react on \'The Kelly File\' to NBC\'s presidential forum',
             'timestamp': 1473301045,
             'upload_date': '20160908',
+            'thumbnail': r're:^https?://.*\.jpg$',
+            'duration': 426,
         },
+        'params': {'skip_download': 'm3u8'},
     }, {
         # iframe embed
-        'url': 'http://www.foxnews.com/us/2018/03/09/parkland-survivor-kyle-kashuv-on-meeting-trump-his-app-to-prevent-another-school-shooting.amp.html?__twitter_impression=true',
+        'url': 'https://www.foxnews.com/us/2018/03/09/parkland-survivor-kyle-kashuv-on-meeting-trump-his-app-to-prevent-another-school-shooting.amp.html?__twitter_impression=true',
         'info_dict': {
             'id': '5748266721001',
             'ext': 'flv',
@@ -127,9 +164,7 @@ class FoxNewsArticleIE(InfoExtractor):
             'timestamp': 1520594670,
             'upload_date': '20180309',
         },
-        'params': {
-            'skip_download': True,
-        },
+        'skip': '404 page',
     }, {
         'url': 'http://insider.foxnews.com/2016/08/25/univ-wisconsin-student-group-pushing-silence-certain-words',
         'only_matching': True,


Test patch: