diff --git a/compare.py b/compare.py index d234014..435dd66 100644 --- a/compare.py +++ b/compare.py @@ -7,38 +7,46 @@ """ from bs4 import BeautifulSoup -import datetime +from datetime import datetime from tinydb import TinyDB, Query import urllib3 import sys import scrape_listing as sl import search_eBay as se - +import export_html as exhtml if __name__ == "__main__": seller_db = TinyDB("seller_db.json") database_lenght = len(seller_db.all()) + comparison_results = list() if database_lenght == 0: print("Unable to load seller shop database!") sys.exit(-1) print("Loaded seller shop database: " + str(database_lenght) + " listings") + compare_start_timestamp = datetime.now() #set start time for comparing for shop_listing_url in seller_db.all(): #print(shop_listing_url["epid"]) for retrieve_counter in range(5): try: - shop_listing_data = sl.scrape_listing(shop_listing_url["epid"]) + seller_listing_data = sl.scrape_listing(shop_listing_url["epid"]) break except: #pass print("Unable to retrieve seller listing data from: " + shop_listing_url["epid"]) - if shop_listing_data: - print("\n\nCompare: " + shop_listing_data["title"] + " | " + str(shop_listing_data["price"]) + "€ | " + shop_listing_url["epid"]) + if seller_listing_data: + print("\n\nCompare: " + seller_listing_data["title"] + " | " + str(seller_listing_data["price"]) + "€ | " + shop_listing_url["epid"]) - competitor_listings = se.search(shop_listing_data["title"], 1) - print("Found " + str(len(competitor_listings)) + " listings from competitors with term: " + shop_listing_data["title"]) + comparison_result = { + 'seller_listing': seller_listing_data, + 'competitor_listings': list(), + 'max_price_delta': float(0.0) + } + + competitor_listings = se.search(seller_listing_data["title"], 1) + print("Found " + str(len(competitor_listings)) + " listings from competitors with term: " + seller_listing_data["title"]) sys.stdout.flush() cheaper_listings = list() for competitor_listing_url in competitor_listings: @@ -46,7 +54,6 @@ if __name__ == "__main__": #print(shop_listing_url["epid"]) if seller_db.search(Query().epid == competitor_listing_url): - #if competitor_listing_url == shop_listing_url["epid"]: print("Found listing from sellers shop --> ignore " + competitor_listing_url) continue #else: @@ -63,16 +70,41 @@ if __name__ == "__main__": if competitor_listing_data: #print(competitor_listing_data["price"]) - if competitor_listing_data["price"] < shop_listing_data["price"]: - #print("found cheaper competitor: " + str(competitor_listing_data["price"]) + "€ instead: " + str(shop_listing_data["price"]) + "€ ---> " + competitor_listing_url) + if competitor_listing_data["price"] < seller_listing_data["price"]: + #print("found cheaper competitor: " + str(competitor_listing_data["price"]) + "€ instead: " + str(seller_listing_data["price"]) + "€ ---> " + competitor_listing_url) cheaper_listings.append({ 'title': competitor_listing_data["title"], 'price': competitor_listing_data["price"], + 'image': competitor_listing_data["image"], 'url': competitor_listing_url}) for cheaper_listing in sorted(cheaper_listings, key=lambda d: d['price']) : #print(cheaper_listing) - print("found cheaper competitor: " + str(cheaper_listing["price"]) + "€ instead: " + str(shop_listing_data["price"]) + "€ ---> " + cheaper_listing["url"]) - #break + print("found cheaper competitor: " + str(cheaper_listing["price"]) + "€ instead: " + str(seller_listing_data["price"]) + "€ ---> " + cheaper_listing["url"]) + comparison_result['competitor_listings'].append(cheaper_listing) + if comparison_result['max_price_delta'] == 0.0: + comparison_result['max_price_delta'] = seller_listing_data["price"] - cheaper_listing["price"] + + if cheaper_listings: + comparison_results.append(comparison_result) + + break + + now = datetime.now() # current date and time + + exp = exhtml.exporter("./html_out/") + + for comparison in sorted(comparison_results, key=lambda d: d['max_price_delta'], reverse=True): + exp.export_comparison(comparison['seller_listing'], comparison['competitor_listings']) + + exp.export_startpage(str(database_lenght), len(comparison), datetime.timestamp(compare_start_timestamp), now.strftime("%m/%d/%Y, %H:%M:%S")) + + + + + + + + \ No newline at end of file diff --git a/export_html.py b/export_html.py index d77420e..fd41c04 100644 --- a/export_html.py +++ b/export_html.py @@ -9,6 +9,7 @@ from datetime import datetime import os import template_html as thtml +import shutil class exporter: export_dir="" @@ -21,27 +22,53 @@ class exporter: os.mkdir(self.export_dir) except FileExistsError: pass - + try: + os.mkdir(os.path.join(self.export_dir,"compare/")) + except FileExistsError: + pass + + self.copy_static_export() + + def copy_static_export(self): + try: + os.mkdir(os.path.join(self.export_dir,"css/")) + except FileExistsError: + pass + try: + os.mkdir(os.path.join(self.export_dir,"data/")) + except FileExistsError: + pass + + shutil.copy("./html/css/w3.css", os.path.join(self.export_dir,"css/","w3.css")) + shutil.copy("./html/data/favicon.ico", os.path.join(self.export_dir,"data/","favicon.ico")) + shutil.copy("./html/data/icon.png", os.path.join(self.export_dir,"data/","icon.png")) + def export_comparison(self, seller_listing, competitor_listings): self.counter +=1 - f = open(os.path.join(self.export_dir, str(self.counter) + ".html"), "a") + f = open(os.path.join(self.export_dir, "compare/", str(self.counter) + ".html"), "a") f.write(thtml.html_comparison_head()) - - - - + f.write("
") + f.write(thtml.html_comparison_navigation(self.counter)) + f.write(thtml.html_comparison_seller_listing(seller_listing)) + f.write(thtml.html_comparison_competitor_list_header()) + competitor_listing_counter = 0 + for competitor_listing in competitor_listings: + competitor_listing_counter +=1 + f.write(thtml.html_comparison_competitor_listing(competitor_listing, competitor_listing_counter)) + f.write(thtml.html_comparison_trailer()) f.close() + def export_startpage(self, seller_listings_count, cheaper_listings_count, compare_time, date): + duration_export = datetime.timestamp(self.tsStart) + print("Comparison needed: ", duration_export) - - - def export_startpage(): - duration = datetime.timestamp(self.tsStart) - print("Comparison needed: ", duration) - - - + f = open(os.path.join(self.export_dir, "index.html"), "a") + f.write(thtml.html_startpage_head()) + f.write(thtml.html_startpage_info(seller_listings_count, cheaper_listings_count, compare_time, duration_export, date)) + f.write(thtml.html_startpage_trailer()) + f.close() + if __name__ == "__main__": seller_listing_dummy = { diff --git a/html/index.html b/html/index.html index 4bca54f..e7e35b6 100644 --- a/html/index.html +++ b/html/index.html @@ -19,8 +19,21 @@Number of seller listings:
+Possibly cheaper listings:
+Compare time needed:
+Export time needed:
+Date of creation:
+