From 232e6db30c474d1b387e405342f34173ceeaf832 Mon Sep 17 00:00:00 2001
From: Hank Brown <h@0ti.me>
Date: Tue, 13 Aug 2024 18:26:55 -0500
Subject: [PATCH] [ie/PatreonCampaign] Support API URLs (#10734)

Closes #10733
Authored by: hibes, bashonly

Co-authored-by: bashonly <88596187+bashonly@users.noreply.github.com>
---
 yt_dlp/extractor/patreon.py | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/yt_dlp/extractor/patreon.py b/yt_dlp/extractor/patreon.py
index 7d6e8439c6..4489d533a6 100644
--- a/yt_dlp/extractor/patreon.py
+++ b/yt_dlp/extractor/patreon.py
@@ -420,7 +420,7 @@ class PatreonIE(PatreonBaseIE):
 
 class PatreonCampaignIE(PatreonBaseIE):
 
-    _VALID_URL = r'https?://(?:www\.)?patreon\.com/(?!rss)(?:(?:m/(?P<campaign_id>\d+))|(?P<vanity>[-\w]+))'
+    _VALID_URL = r'https?://(?:www\.)?patreon\.com/(?!rss)(?:(?:m|api/campaigns)/(?P<campaign_id>\d+)|(?P<vanity>[-\w]+))'
     _TESTS = [{
         'url': 'https://www.patreon.com/dissonancepod/',
         'info_dict': {
@@ -442,25 +442,44 @@ class PatreonCampaignIE(PatreonBaseIE):
         'url': 'https://www.patreon.com/m/4767637/posts',
         'info_dict': {
             'title': 'Not Just Bikes',
-            'channel_follower_count': int,
             'id': '4767637',
             'channel_id': '4767637',
             'channel_url': 'https://www.patreon.com/notjustbikes',
-            'description': 'md5:595c6e7dca76ae615b1d38c298a287a1',
+            'description': 'md5:9f4b70051216c4d5c58afe580ffc8d0f',
             'age_limit': 0,
             'channel': 'Not Just Bikes',
             'uploader_url': 'https://www.patreon.com/notjustbikes',
-            'uploader': 'Not Just Bikes',
+            'uploader': 'Jason',
             'uploader_id': '37306634',
             'thumbnail': r're:^https?://.*$',
         },
         'playlist_mincount': 71,
+    }, {
+        'url': 'https://www.patreon.com/api/campaigns/4243769/posts',
+        'info_dict': {
+            'title': 'Second Thought',
+            'channel_follower_count': int,
+            'id': '4243769',
+            'channel_id': '4243769',
+            'channel_url': 'https://www.patreon.com/secondthought',
+            'description': 'md5:69c89a3aba43efdb76e85eb023e8de8b',
+            'age_limit': 0,
+            'channel': 'Second Thought',
+            'uploader_url': 'https://www.patreon.com/secondthought',
+            'uploader': 'JT Chapman',
+            'uploader_id': '32718287',
+            'thumbnail': r're:^https?://.*$',
+        },
+        'playlist_mincount': 201,
     }, {
         'url': 'https://www.patreon.com/dissonancepod/posts',
         'only_matching': True,
     }, {
         'url': 'https://www.patreon.com/m/5932659',
         'only_matching': True,
+    }, {
+        'url': 'https://www.patreon.com/api/campaigns/4243769',
+        'only_matching': True,
     }]
 
     @classmethod