Skip to content
Snippets Groups Projects
Commit fc0803d8 authored by Frederic Aust's avatar Frederic Aust
Browse files

Speicherung der aktuellen Spieleliste in eine Datei, damit beim Neustart nicht...

Speicherung der aktuellen Spieleliste in eine Datei, damit beim Neustart nicht erneut gecrawlt werden muss und Unterschiede zum vorigen Programmlauf erkannt werden
parent 94829be8
No related branches found
No related tags found
No related merge requests found
......@@ -3,12 +3,26 @@ from bs4 import BeautifulSoup # MIT
import urllib.parse
class Game:
def __init__(self, name,link,img):
self.name = name.strip()
self.link = link.strip()
self.img = img.strip()
if not name or not link or not img:
raise ValueError("Please enter a name, link and img!")
def __eq__(self, other):
return self.name == other.name and self.link == other.link and self.img == other.img
def get_csv_line(self):
return f"{self.name};{self.link};{self.img}"
class ModuleFreeGames:
def __init__(self, subscriber, send_a, log):
self.tag = "%20s - " % "mFreeGames"
self.log = log
self.game_dict = self.crawl_game_list()
self.game_dict = self.load_freegames_from_csv()
self.subscriber = subscriber
self.send_a = send_a
......@@ -27,19 +41,17 @@ class ModuleFreeGames:
img = li.find('noscript').find('img')
src = img['src']
if name not in temp_dict:
game = {}
game["name"] = name
game["link"] = link
game["img"] = f"game_{number}.jpeg"
game = Game(name, link, f"game_{number}.jpeg")
img_link = "https://www.freegamesyo.com"+urllib.parse.unquote(src)
img_data = requests.get(img_link).content
with open(game["img"], 'wb') as handler: # can be overwritten because this will be the new list
with open(game.img, 'wb') as handler: # can be overwritten because this will be the new list
handler.write(img_data)
temp_dict[name] = game
number += 1
except Exception as ex:
self.log.error(f"{self.tag}Failed crawling game list: {ex}")
self.save_gamelist(temp_dict)
return temp_dict
def check_for_new_stuff(self):
......@@ -65,9 +77,9 @@ class ModuleFreeGames:
def send_game(self, receiver):
for game in self.game_dict.values():
message = game["name"] + ":\n"
message += game["link"] + "\n"
self.send_a(message, receiver, f"/home/pi/signalbot/" + game["img"])
message = game.name + ":\n"
message += game.link + "\n"
self.send_a(message, receiver, f"/home/pi/signalbot/" + game.img)
def freegames(self, receiver):
send_update = self.check_for_new_stuff()
......@@ -79,3 +91,38 @@ class ModuleFreeGames:
self.send_newsletter()
else:
self.send_game(receiver)
def load_freegames_from_csv(self):
lines = []
try:
with open("/home/pi/signalbot/freegameslist.csv", 'r', encoding='utf16') as f:
lines = f.readlines()
except IOError as exc:
self.log.error(
f"{self.tag}Reading freegameslist from csv failed: {exc}")
temp_dict = {}
for line in lines:
try:
game = self.interpret_game_line(line)
temp_dict[game.name] = game
except (SyntaxError, ValueError) as exc:
self.log.warning(f"{self.tag}Error while interpreting game line:{line}; Error: {exc}")
return temp_dict
def interpret_game_line(self, line):
splitted = line.strip().split(";")
if not (len(splitted) == 3):
raise SyntaxError("Invalid game syntax! Needs to be: 'name;link;img_filename'")
return Game(splitted[0].strip(), splitted[1].strip(), splitted[2].strip())
def save_gamelist(self, gamelist):
try:
with open("/home/pi/signalbot/freegameslist.csv", 'w', encoding='utf16') as f:
for game in gamelist.values():
f.write(f"{game.name};{game.link};{game.img}\n")
except IOError as exc:
self.log.error(f"{self.tag}saving game to '/home/pi/signalbot/freegameslist.csv' failed: {exc}")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment