Skip to content

Commit

Permalink
Merge pull request #731 from rix1337/dev
Browse files Browse the repository at this point in the history
v.18.0.2
  • Loading branch information
rix1337 committed Apr 10, 2023
2 parents 9230c4c + 9584526 commit 4d25d32
Show file tree
Hide file tree
Showing 36 changed files with 698 additions and 773 deletions.
6 changes: 5 additions & 1 deletion .github/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@

### Changelog FeedCrawler:

- **18.0.2** Die Konsole der Desktop-GUI behält aus Performancegründen nur die letzten 999 ausgegebenen Zeilen.
- **18.0.2** Nutze ausschließlich manager.dict() um Objekte zwischen Prozessen zu teilen.
- **18.0.2** SF/FF werden nicht mehr als dauerhaft von Cloudflare blockierte Seiten behandelt.
- **18.0.1** Der FeedCrawler-Cache (HTTP-Aufrufe eines Suchlaufes) nutzt nun den RAM, anstelle der `FeedCrawler.db`
- **18.0.1** Entferne überflüssige Tabellen automatisch aus der `FeedCrawler.db`
- **18.0.1** Entferne überflüssige Sektionen und Optionen automatisch aus der `FeedCrawler.ini`
- **18.0.1** Aktive My JDownloader Geräteverbindungen werden nun im RAM, anstelle der `FeedCrawler.db` gespeichert
- **18.0.1** Verhindere doppelte Zeilenumbrüche in der Standard-Konsole bei aktiver Desktop-GUI
- **18.0.1** Setze das Icon aller Fenster der Desktop-GUI auf das FeedCrawler-Logo
- **18.0.0** Eigene Desktop-GUI, die anstelle der Konsole verwendet werden kann
- **18.0.0** Eigene [Desktop-GUI](https://github.com/rix1337/FeedCrawler/wiki/7.-Desktop-GUI), die anstelle der Konsole verwendet werden kann
- Wird automatisch genutzt, wenn `PySimpleGUI` und `psgtray` installiert sind
- Wird für die Windows-Exe verwendet
- Bei Erstinstallation werden My JDownloader Zugangsdaten in der GUI abgefragt (inklusive Auswahl des JDownloaders)
Expand Down
232 changes: 109 additions & 123 deletions feedcrawler/crawler.py

Large diffs are not rendered by default.

108 changes: 36 additions & 72 deletions feedcrawler/external_sites/feed_search/content_all.py

Large diffs are not rendered by default.

37 changes: 14 additions & 23 deletions feedcrawler/external_sites/feed_search/content_shows.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,7 @@ def send_package(self, title, link, language_id, season, episode, site, source,
try:
storage = self.db.retrieve_all(title)
except Exception as e:
shared_state.logger.debug(
"Fehler bei Datenbankzugriff: %s, Grund: %s" % (e, title))
shared_state.logger.debug("Fehler bei Datenbankzugriff: %s, Grund: %s" % (e, title))

if 'added' in storage or 'notdl' in storage:
shared_state.logger.debug(title + " - Release ignoriert (bereits gefunden)")
Expand Down Expand Up @@ -141,7 +140,7 @@ def periodical_task(self):
else:
feed = False
except:
print(self._SITE + u" hat die Feed-API angepasst. Breche Suche ab!")
print(self._SITE + " hat die Feed-API angepasst. Breche Suche ab!")
feed = False

if response:
Expand All @@ -162,7 +161,7 @@ def periodical_task(self):
else:
feed = False
except:
print(self._SITE + u" hat die Feed-API angepasst. Breche Suche ab!")
print(self._SITE + " hat die Feed-API angepasst. Breche Suche ab!")
feed = False

self.day += 1
Expand All @@ -173,12 +172,11 @@ def periodical_task(self):
sha = hashlib.sha256(concat.encode(
'ascii', 'ignore')).hexdigest()
else:
if self._SITE == "SF" and not shared_state.sf_blocked:
print(u"SF hat den Feed-Anruf während der Feed-Suche blockiert.")
shared_state.sf_blocked = True
if self._SITE == "SF" and not shared_state.values["sf_blocked"]:
print("SF hat den Feed-Anruf während der Feed-Suche blockiert.")
shared_state.values["sf_blocked"] = True
else:
shared_state.logger.debug(
"Feed ist leer - breche die Suche für diesen Feed ab!")
shared_state.logger.debug("Feed ist leer - breche die Suche für diesen Feed ab!")

if feed:
for post in feed.entries:
Expand All @@ -187,8 +185,7 @@ def periodical_task(self):
sha = hashlib.sha256(concat.encode(
'ascii', 'ignore')).hexdigest()
if sha == self.last_sha:
shared_state.logger.debug(
"Feed ab hier bereits gecrawlt (" + post.title + ") - breche Suche ab!")
shared_state.logger.debug("Feed ab hier bereits gecrawlt (" + post.title + ") - breche Suche ab!")
break

series_url = post.series_url
Expand Down Expand Up @@ -233,8 +230,7 @@ def periodical_task(self):
send_package(self, title, download_link, language_id, season, episode, site,
post.source, size, imdb_id)
else:
shared_state.logger.debug(
"%s - Englische Releases deaktiviert" % title)
shared_state.logger.debug("%s - Englische Releases deaktiviert" % title)

else:
continue
Expand Down Expand Up @@ -277,8 +273,7 @@ def periodical_task(self):
send_package(self, title, download_link, language_id, season, episode, site,
post.source, size, imdb_id)
else:
shared_state.logger.debug(
"%s - Englische Releases deaktiviert" % title)
shared_state.logger.debug("%s - Englische Releases deaktiviert" % title)

else:
continue
Expand Down Expand Up @@ -312,8 +307,7 @@ def periodical_task(self):
"Fehler bei Datenbankzugriff: %s, Grund: %s" % (e, title))
return
if 'added' in storage:
shared_state.logger.debug(
title + " - Release ignoriert (bereits gefunden)")
shared_state.logger.debug(title + " - Release ignoriert (bereits gefunden)")
continue
package = self.parse_download_method(self, series_url, title, language_id)
if package:
Expand All @@ -328,8 +322,7 @@ def periodical_task(self):
send_package(self, title, download_link, language_id, season, episode, site,
post.source, size, imdb_id)
else:
shared_state.logger.debug(
"%s - Englische Releases deaktiviert" % title)
shared_state.logger.debug("%s - Englische Releases deaktiviert" % title)

else:
match = re.search(self.pattern, title.lower())
Expand Down Expand Up @@ -361,8 +354,7 @@ def periodical_task(self):
"Fehler bei Datenbankzugriff: %s, Grund: %s" % (e, title))
return
if 'added' in storage:
shared_state.logger.debug(
title + " - Release ignoriert (bereits gefunden)")
shared_state.logger.debug(title + " - Release ignoriert (bereits gefunden)")
continue
package = self.parse_download_method(self, series_url, title, language_id)
if package:
Expand All @@ -377,8 +369,7 @@ def periodical_task(self):
send_package(self, title, download_link, language_id, season, episode, site,
post.source, size, imdb_id)
else:
shared_state.logger.debug(
"%s - Englische Releases deaktiviert" % title)
shared_state.logger.debug("%s - Englische Releases deaktiviert" % title)

if current_set and sha:
new_set = settings_hash(self, True)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def dw_get_download_links(self, content, title):
content = BeautifulSoup(str(content), "html.parser")
download_buttons = content.findAll("button", {"class": "show_link"})
except:
print(u"DW hat die Detail-Seite angepasst. Parsen von Download-Links für " + title + " nicht möglich!")
print("DW hat die Detail-Seite angepasst. Parsen von Download-Links für " + title + " nicht möglich!")
return False

dw = CrawlerConfig('Hostnames').get('dw')
Expand All @@ -105,7 +105,7 @@ def dw_get_download_links(self, content, title):
hoster = button.nextSibling.img["src"].split("/")[-1].replace(".png", "")
download_links.append([link, hoster])
except:
print(u"DW hat die Detail-Seite angepasst. Parsen von Download-Links nicht möglich!")
print("DW hat die Detail-Seite angepasst. Parsen von Download-Links nicht möglich!")
pass

return check_download_links(self, download_links)
Expand Down Expand Up @@ -167,7 +167,7 @@ def dw_feed_enricher(feed):
"imdb_id": imdb_id
}))
except:
print(u"DW hat den Feed angepasst. Parsen teilweise nicht möglich!")
print("DW hat den Feed angepasst. Parsen teilweise nicht möglich!")
continue

feed = {"entries": entries}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def ff_get_download_links(self, content, title):
download_link = "https://" + self.url + link['href']
break
except:
print(u"FF hat die Detail-Seite angepasst. Parsen von Download-Links nicht möglich!")
print("FF hat die Detail-Seite angepasst. Parsen von Download-Links nicht möglich!")
return False

return [download_link]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ def fx_feed_enricher(feed):
}))
i += 1
except:
print(u"FX hat den Feed angepasst. Parsen teilweise nicht möglich!")
print("FX hat den Feed angepasst. Parsen teilweise nicht möglich!")
continue

feed = {"entries": entries}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ def hw_get_download_links(self, content, title):
content = BeautifulSoup(str(content), "html.parser")
download_links = content.findAll("a", href=re.compile('filecrypt'))
except:
print(u"HW hat die Detail-Seite angepasst. Parsen von Download-Links nicht möglich!")
print("HW hat die Detail-Seite angepasst. Parsen von Download-Links nicht möglich!")
return False

links_string = ""
Expand Down Expand Up @@ -141,7 +141,7 @@ def hw_feed_enricher(feed):
"imdb_id": imdb_id
}))
except:
print(u"HW hat den Feed angepasst. Parsen teilweise nicht möglich!")
print("HW hat den Feed angepasst. Parsen teilweise nicht möglich!")
continue

feed = {"entries": entries}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ def nx_feed_enricher(feed):
}))

except:
print(u"NX hat den Feed angepasst. Parsen teilweise nicht möglich!")
print("NX hat den Feed angepasst. Parsen teilweise nicht möglich!")
continue

feed = {"entries": entries}
Expand Down
12 changes: 6 additions & 6 deletions feedcrawler/external_sites/feed_search/sites/content_all_ww.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,9 @@ def ww_post_url_headers(url, headers=False):
response = post_url_headers(url, headers, data)
if not response["text"] or response["status_code"] is not (200 or 304) or not '<span class="main-rls">' in \
response["text"]:
if not shared_state.ww_blocked:
print(u"WW hat den Feed-Anruf während der Feed-Suche blockiert.")
shared_state.ww_blocked = True
if not shared_state.values["ww_blocked"]:
print("WW hat den Feed-Anruf während der Feed-Suche blockiert.")
shared_state.values["ww_blocked"] = True
return ""
return response
except:
Expand All @@ -118,10 +118,10 @@ def ww_get_download_links(self, content, title):
try:
response = get_url(content)
if not response or "NinjaFirewall 429" in response:
if not shared_state.ww_blocked:
if not shared_state.values["ww_blocked"]:
print(
u"WW hat den Link-Abruf für " + title + " blockiert. Eine spätere Anfrage hat möglicherweise Erfolg!")
shared_state.ww_blocked = True
"WW hat den Link-Abruf für " + title + " blockiert. Eine spätere Anfrage hat möglicherweise Erfolg!")
shared_state.values["ww_blocked"] = True
return False
links = BeautifulSoup(response, "html.parser").findAll("div", {"id": "download-links"})
for link in links:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def periodical_task(self):
links = post.links
storage = self.db.retrieve_all(post.title)
if not links:
shared_state.logger.debug(u"Release ignoriert - keine Links gefunden")
shared_state.logger.debug("Release ignoriert - keine Links gefunden")
elif 'added' in storage:
shared_state.logger.debug(post.title + " - Release ignoriert (bereits gefunden)")
else:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,14 +117,13 @@ def sf_releases_to_feedparser_dict(releases, list_type, base_url, check_seasons_

def sf_parse_download(self, series_url, title, language_id):
if not check_valid_release(title, self.retail_only, self.hevc_retail):
shared_state.logger.debug(title + u" - Release ignoriert (Gleiche oder bessere Quelle bereits vorhanden)")
shared_state.logger.debug(title + " - Release ignoriert (Gleiche oder bessere Quelle bereits vorhanden)")
return False
if self.filename == 'List_ContentAll_Seasons':
if not self.config.get("seasonpacks"):
staffelpack = re.search(r"s\d.*(-|\.).*s\d", title.lower())
if staffelpack:
shared_state.logger.debug(
"%s - Release ignoriert (Staffelpaket)" % title)
shared_state.logger.debug("%s - Release ignoriert (Staffelpaket)" % title)
return False
if not re.search(self.seasonssource, title.lower()):
shared_state.logger.debug(title + " - Release hat falsche Quelle")
Expand Down Expand Up @@ -260,5 +259,5 @@ def sf_parse_download(self, series_url, title, language_id):
"imdb_id": imdb_id
}
except:
print(u"SF hat die Serien-API angepasst. Breche Download-Prüfung ab!")
print("SF hat die Serien-API angepasst. Breche Download-Prüfung ab!")
return False
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,13 @@ def sj_releases_to_feedparser_dict(releases, list_type, base_url, check_seasons_

def sj_parse_download(self, series_url, title, language_id):
if not check_valid_release(title, self.retail_only, self.hevc_retail):
shared_state.logger.debug(title + u" - Release ignoriert (Gleiche oder bessere Quelle bereits vorhanden)")
shared_state.logger.debug(title + " - Release ignoriert (Gleiche oder bessere Quelle bereits vorhanden)")
return False
if self.filename == 'List_ContentAll_Seasons':
if not self.config.get("seasonpacks"):
staffelpack = re.search(r"s\d.*(-|\.).*s\d", title.lower())
if staffelpack:
shared_state.logger.debug(
"%s - Release ignoriert (Staffelpaket)" % title)
shared_state.logger.debug("%s - Release ignoriert (Staffelpaket)" % title)
return False
if not re.search(self.seasonssource, title.lower()):
shared_state.logger.debug(title + " - Release hat falsche Quelle")
Expand Down Expand Up @@ -158,5 +157,5 @@ def sj_parse_download(self, series_url, title, language_id):
"imdb_id": "" # Info not available
}
except:
print(self._INTERNAL_NAME + u" hat die Serien-API angepasst. Breche Download-Prüfung ab!")
print(self._INTERNAL_NAME + " hat die Serien-API angepasst. Breche Download-Prüfung ab!")
return False
15 changes: 7 additions & 8 deletions feedcrawler/external_sites/metadata/imdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,7 @@ def get_imdb_id_from_title(title, current_list="NoList", language="de", year_in_
break
else:
print("IMDb-Abfrage fehlgeschlagen: " + str(request["status_code"]))
shared_state.logger.debug(
"IMDb-Abfrage fehlgeschlagen: " + str(request["status_code"]))
shared_state.logger.debug("IMDb-Abfrage fehlgeschlagen: " + str(request["status_code"]))

if not imdb_id:
shared_state.logger.debug("[IMDb] - %s - Keine ID gefunden" % title.replace("+", " "))
Expand Down Expand Up @@ -146,7 +145,7 @@ def original_language_not_german(imdb_id):
return False

if not original_language:
print(u"[IMDb] - %s - Original-Sprache nicht ermittelbar" % imdb_id)
print("[IMDb] - %s - Original-Sprache nicht ermittelbar" % imdb_id)
shared_state.logger.debug("[IMDb] - %s - Original-Sprache nicht ermittelbar" % imdb_id)

return original_language
Expand Down Expand Up @@ -177,7 +176,7 @@ def get_episodes(imdb_id):
pass

if not episodes:
print(u"[IMDb] - %s - Keine Episoden gefunden" % imdb_id)
print("[IMDb] - %s - Keine Episoden gefunden" % imdb_id)
shared_state.logger.debug("[IMDb] - %s - Keine Episoden gefunden" % imdb_id)

return episodes
Expand All @@ -199,7 +198,7 @@ def get_localized_title(imdb_id):
pass

if not localized_title:
print(u"[IMDb] - %s - Deutscher Titel nicht ermittelbar" % imdb_id)
print("[IMDb] - %s - Deutscher Titel nicht ermittelbar" % imdb_id)
shared_state.logger.debug("[IMDb] - %s - Deutscher Titel nicht ermittelbar" % imdb_id)

return localized_title
Expand All @@ -219,7 +218,7 @@ def get_rating(imdb_id):
pass

if not rating:
print(u"[IMDb] - %s - Bewertungen nicht ermittelbar" % imdb_id)
print("[IMDb] - %s - Bewertungen nicht ermittelbar" % imdb_id)
shared_state.logger.debug("[IMDb] - %s - Bewertungen nicht ermittelbar" % imdb_id)

return rating
Expand All @@ -239,7 +238,7 @@ def get_votes(imdb_id):
pass

if not votes:
print(u"[IMDb] - %s - Anzahl der Bewertungen nicht ermittelbar" % imdb_id)
print("[IMDb] - %s - Anzahl der Bewertungen nicht ermittelbar" % imdb_id)
shared_state.logger.debug("[IMDb] - %s - Anzahl der Bewertungen nicht ermittelbar" % imdb_id)

return votes
Expand All @@ -257,7 +256,7 @@ def get_year(imdb_id):
pass

if not year:
print(u"[IMDb] - %s - Erscheinungsjahr nicht ermittelbar" % imdb_id)
print("[IMDb] - %s - Erscheinungsjahr nicht ermittelbar" % imdb_id)
shared_state.logger.debug("[IMDb] - %s - Erscheinungsjahr nicht ermittelbar" % imdb_id)

return year
4 changes: 2 additions & 2 deletions feedcrawler/external_sites/web_search/content_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def get_best_result(title):
best_payload = payload

if not best_match or not best_payload:
shared_state.logger.debug(u'Kein Treffer für die Suche nach ' + title + '! Suchliste ergänzt.')
shared_state.logger.debug('Kein Treffer für die Suche nach ' + title + '! Suchliste ergänzt.')
liste = "List_ContentAll_Movies"
cont = ListDb(liste).retrieve()
if not cont:
Expand All @@ -63,7 +63,7 @@ def get_best_result(title):
ListDb(liste).store(title)
return False
if not is_retail(best_match, True):
shared_state.logger.debug(u'Kein Retail-Release für die Suche nach ' + title + ' gefunden! Suchliste ergänzt.')
shared_state.logger.debug('Kein Retail-Release für die Suche nach ' + title + ' gefunden! Suchliste ergänzt.')
liste = "List_ContentAll_Movies"
cont = ListDb(liste).retrieve()
if not cont:
Expand Down

0 comments on commit 4d25d32

Please sign in to comment.