Beispiel #1
0
 def _extract_large_course_content(self, url):
     url = url.replace("10000", "50") if url.endswith("10000") else url
     try:
         data = self._session._get(url).json()
     except conn_error as error:
         logger.error(msg=f"Udemy Says: Connection error, {error}")
         time.sleep(0.8)
         sys.exit(0)
     else:
         _next = data.get("next")
         while _next:
             logger.progress(msg="Downloading course information .. ")
             try:
                 resp = self._session._get(_next).json()
             except conn_error as error:
                 logger.error(msg=f"Udemy Says: Connection error, {error}")
                 time.sleep(0.8)
                 sys.exit(0)
             else:
                 _next = resp.get("next")
                 results = resp.get("results")
                 if results and isinstance(results, list):
                     for d in resp["results"]:
                         data["results"].append(d)
         return data
Beispiel #2
0
 def _my_courses(self, portal_name):
     results = []
     try:
         url = MY_COURSES_URL.format(portal_name=portal_name)
         webpage = self._session._get(url).json()
     except conn_error as error:
         logger.error(msg=f"Udemy Says: Connection error, {error}")
         time.sleep(0.8)
         sys.exit(0)
     except (ValueError, Exception) as error:
         logger.error(msg=f"Udemy Says: {error}")
         time.sleep(0.8)
         sys.exit(0)
     else:
         results = webpage.get("results", [])
     return results
Beispiel #3
0
    def _extract_subscribed_courses(self):
        def clean_urls(courses):
            _urls = []
            courses = [
                dict(tupleized) for tupleized in set(
                    tuple(item.items()) for item in courses)
            ]
            for entry in courses:
                logger.progress(
                    msg="Fetching all enrolled course(s) url(s).. ")
                url = entry.get("url")
                if not url:
                    continue
                url = f"https://www.udemy.com{url}"
                _urls.append(url)
            _urls = list(set(_urls))
            return _urls

        _temp = []
        try:
            response = self._session._get(SUBSCRIBED_COURSES).json()
        except conn_error as error:
            logger.error(msg=f"Udemy Says: Connection error, {error}")
            time.sleep(0.8)
            sys.exit(0)
        except (ValueError, Exception) as error:
            logger.error(msg=f"Udemy Says: {error}")
            time.sleep(0.8)
            sys.exit(0)
        else:
            results = response.get("results", [])
            _temp.extend(results)
            _next = response.get("next")
            logger.progress(msg="Fetching all enrolled course(s) url(s).. ")
            while _next:
                logger.progress(
                    msg="Fetching all enrolled course(s) url(s).. ")
                try:
                    resp = self._session._get(_next)
                    resp.raise_for_status()
                    resp = resp.json()
                except conn_error as error:
                    logger.error(msg=f"Udemy Says: Connection error, {error}")
                    time.sleep(0.8)
                    sys.exit(0)
                except Exception as error:
                    logger.error(msg=f"Udemy Says: error, {error}")
                    time.sleep(0.8)
                    sys.exit(0)
                else:
                    _next = resp.get("next")
                    results = resp.get("results", [])
                    _temp.extend(results)
        if _temp:
            _temp = clean_urls(_temp)
        return _temp
Beispiel #4
0
 def _fetch_course(self):
     auth = {}
     if not self._cookies:
         auth = self._login(username=self._username,
                            password=self._password)
     if not auth and self._cookies:
         auth = self._login(cookies=self._cookies)
     if auth.get("login") == "successful":
         logger.info(msg="Logged in successfully.", new_line=True)
         logger.info(msg="Fetching all enrolled course(s) url(s)..")
         self._courses = self._extract_subscribed_courses()
         time.sleep(1)
         logger.success(msg="Fetching all enrolled course(s) url(s).. ")
         self._logout()
     if auth.get("login") == "failed":
         logger.error(msg="Failed to login ..\n")
         sys.exit(0)
Beispiel #5
0
 def _extract_course_json(self, url, course_id, portal_name):
     self._session._headers.update({"Referer": url})
     url = COURSE_URL.format(portal_name=portal_name, course_id=course_id)
     try:
         resp = self._session._get(url)
         if resp.status_code in [502, 503]:
             resp = self._extract_large_course_content(url=url)
         else:
             resp = resp.json()
     except conn_error as error:
         logger.error(msg=f"Udemy Says: Connection error, {error}")
         time.sleep(0.8)
         sys.exit(0)
     except (ValueError, Exception):
         resp = self._extract_large_course_content(url=url)
         return resp
     else:
         return resp
Beispiel #6
0
 def _fetch_course(self):
     if self._have_basic:
         return
     auth = {}
     if not self._cookies:
         auth = self._login(
             username=self._username,
             password=self._password,
             cache_session=self._cache_session,
         )
     if not auth and self._cookies:
         auth = self._login(cookies=self._cookies,
                            cache_session=self._cache_session)
     if auth.get("login") == "successful":
         logger.info(msg="Logged in successfully.", new_line=True)
         logger.info(msg="Downloading course information ..")
         self._info = self._real_extract(
             self._url, skip_hls_stream=self._skip_hls_stream)
         time.sleep(1)
         logger.success(msg="Downloaded course information .. ")
         access_token = self._info["access_token"]
         self._id = self._info["course_id"]
         self._title = self._info["course_title"]
         self._chapters_count = self._info["total_chapters"]
         self._total_lectures = self._info["total_lectures"]
         self._chapters = [
             InternUdemyChapter(z, access_token=access_token)
             for z in self._info["chapters"]
         ]
         logger.info(
             msg="Trying to logout now...",
             new_line=True,
         )
         if not self._cookies:
             self._logout()
         logger.info(
             msg="Logged out successfully.",
             new_line=True,
         )
         self._have_basic = True
     if auth.get("login") == "failed":
         logger.error(msg="Failed to login ..\n")
         sys.exit(0)
Beispiel #7
0
 def _subscribed_collection_courses(self, portal_name):
     url = COLLECTION_URL.format(portal_name=portal_name)
     courses_lists = []
     try:
         webpage = self._session._get(url).json()
     except conn_error as error:
         logger.error(msg=f"Udemy Says: Connection error, {error}")
         time.sleep(0.8)
         sys.exit(0)
     except (ValueError, Exception) as error:
         logger.error(msg=f"Udemy Says: {error}")
         time.sleep(0.8)
         sys.exit(0)
     else:
         results = webpage.get("results", [])
         if results:
             [
                 courses_lists.extend(courses.get("courses", []))
                 for courses in results if courses.get("courses", [])
             ]
     return courses_lists
Beispiel #8
0
 def _subscribed_courses(self, portal_name, course_name):
     results = []
     self._session._headers.update({
         "Host":
         "{portal_name}.udemy.com".format(portal_name=portal_name),
         "Referer":
         "https://{portal_name}.udemy.com/home/my-courses/search/?q={course_name}"
         .format(portal_name=portal_name, course_name=course_name),
     })
     url = COURSE_SEARCH.format(portal_name=portal_name,
                                course_name=course_name)
     try:
         webpage = self._session._get(url).json()
     except conn_error as error:
         logger.error(msg=f"Udemy Says: Connection error, {error}")
         time.sleep(0.8)
         sys.exit(0)
     except (ValueError, Exception) as error:
         logger.error(msg=f"Udemy Says: {error} on {url}")
         time.sleep(0.8)
         sys.exit(0)
     else:
         results = webpage.get("results", [])
     return results
Beispiel #9
0
 def _spinner(self, text):
     spin = self.SPINNER.__next__()
     sys.stdout.write(text + spin)
     sys.stdout.flush()
     time.sleep(0.02)