]> jfr.im git - yt-dlp.git/commitdiff
[linkedin] Don't login multiple times
authorpukkandan <redacted>
Sun, 31 Oct 2021 07:38:03 +0000 (13:08 +0530)
committerpukkandan <redacted>
Sun, 31 Oct 2021 07:38:03 +0000 (13:08 +0530)
yt_dlp/extractor/linkedin.py

index 3ce906e2f14a4938c60f3d7059371245ffe837b5..c2d347efd2437c2ba1754b9f40dc57a94b6ff249 100644 (file)
@@ -19,6 +19,7 @@
 class LinkedInLearningBaseIE(InfoExtractor):
     _NETRC_MACHINE = 'linkedin'
     _LOGIN_URL = 'https://www.linkedin.com/uas/login?trk=learning'
+    _logged_in = False
 
     def _call_api(self, course_slug, fields, video_slug=None, resolution=None):
         query = {
@@ -34,6 +35,8 @@ def _call_api(self, course_slug, fields, video_slug=None, resolution=None):
             })
             sub = ' %dp' % resolution
         api_url = 'https://www.linkedin.com/learning-api/detailedCourses'
+        if not self._get_cookies(api_url).get('JSESSIONID'):
+            self.raise_login_required()
         return self._download_json(
             api_url, video_slug, 'Downloading%s JSON metadata' % sub, headers={
                 'Csrf-Token': self._get_cookies(api_url)['JSESSIONID'].value,
@@ -50,6 +53,8 @@ def _get_video_id(self, video_data, course_slug, video_slug):
         return self._get_urn_id(video_data) or '%s/%s' % (course_slug, video_slug)
 
     def _real_initialize(self):
+        if self._logged_in:
+            return
         email, password = self._get_login_info()
         if email is None:
             return
@@ -72,6 +77,7 @@ def _real_initialize(self):
             login_submit_page, 'error', default=None)
         if error:
             raise ExtractorError(error, expected=True)
+        LinkedInLearningBaseIE._logged_in = True
 
 
 class LinkedInLearningIE(LinkedInLearningBaseIE):