From bac8110ba345ad3821ac56e1479bba4d4f5f5f3e Mon Sep 17 00:00:00 2001 From: mdjorup Date: Mon, 1 Jul 2024 11:35:06 -0400 Subject: [PATCH 1/6] integrate to serve gruvian ads --- main.py | 71 +++++++++++++++++++++++++++++++-------- requirements.txt | 3 +- templates/gruvian_ad.html | 5 +++ templates/index.html | 10 ++++-- 4 files changed, 71 insertions(+), 18 deletions(-) create mode 100644 templates/gruvian_ad.html diff --git a/main.py b/main.py index f7bc14113..8213e99c9 100644 --- a/main.py +++ b/main.py @@ -1,24 +1,25 @@ # -*- coding: utf-8 -*- -import json -import re -import markdown -import os +import binascii import cgi -import urllib.request, urllib.parse, urllib.error -import time +import datetime import functools +import json import logging -import binascii -import datetime -import geoip2.database - -from flask import Flask, render_template, request, make_response, session, Response - +import os +import re +import time +import urllib.error +import urllib.parse +import urllib.request -from ideone import Ideone +import geoip2.database +from flask import (Flask, Response, make_response, render_template, request, + session) +import urllib3 import constants - +import markdown +from ideone import Ideone courses = json.load(open("courses.json")) @@ -270,6 +271,38 @@ def get_tutorial(tutorial_id, language="en"): else: return td +pool_manager = urllib3.PoolManager() # using this connection pool reduces latency + +def get_gruvian_ad(): + + env = 'dev' if request.host == 'localhost:5000' else 'prod' + + gruvian_api_key = os.environ.get('GRUVIAN_API_KEY', "") + + if not gruvian_api_key: + return None + + url = 'https://api.gruvian.com/v1/auctions' + + request_body = json.dumps( + { + "network_id": 13, + "test_mode": env == 'dev', + } + ) + + headers = { + "Authorization": "Bearer " + gruvian_api_key, + "Content-Type": "application/json", + } + + try: + r = pool_manager.request("POST", url, headers=headers, body=request_body) + resp_body = json.loads(r.data.decode("utf-8")) + return resp_body + except Exception: + return None + def error404(): domain_data = get_domain_data() @@ -409,6 +442,15 @@ def index(title, language="en"): response = None is_german_user = response and response.country.iso_code == 'DE' + gruvian_ad = None + + if domain_data['language'] != 'python' and domain_data['language'] != 'sql': + # any domain that doesn't have a sponsorship from DataCamp + gruvian_ad = get_gruvian_ad() + + if gruvian_ad and not gruvian_ad.get('filled', False): + gruvian_ad = None + return make_response(render_template( "index-python.html" if (language == "en" and domain_data["language"] == "python") else "index.html", tutorial_page=tutorial != "Welcome", @@ -425,6 +467,7 @@ def index(title, language="en"): uid=uid, env="dev" if request.host == "localhost:5000" else "prod", is_german_user=is_german_user, + gruvian_ad=gruvian_ad, **current_tutorial_data )) diff --git a/requirements.txt b/requirements.txt index 4cd30c329..61f16c56c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ flask redis gunicorn -geoip2 \ No newline at end of file +geoip2 +urllib3 \ No newline at end of file diff --git a/templates/gruvian_ad.html b/templates/gruvian_ad.html new file mode 100644 index 000000000..14a70e0fd --- /dev/null +++ b/templates/gruvian_ad.html @@ -0,0 +1,5 @@ +
+ + Ad Image + +
\ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 4d783e462..ded1fa491 100644 --- a/templates/index.html +++ b/templates/index.html @@ -149,9 +149,13 @@

Sponsors

{# #} {# #}
- - - +{# #} +{# #} +{# #} + {% if gruvian_ad %} + {% include "gruvian_ad.html" %} + {% endif %} + {# #} {# #} {# Date: Mon, 1 Jul 2024 11:52:14 -0400 Subject: [PATCH 2/6] render coding for kids when not filled --- templates/gruvian_ad.html | 5 ----- templates/index.html | 8 +++++++- 2 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 templates/gruvian_ad.html diff --git a/templates/gruvian_ad.html b/templates/gruvian_ad.html deleted file mode 100644 index 14a70e0fd..000000000 --- a/templates/gruvian_ad.html +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index ded1fa491..17be8f267 100644 --- a/templates/index.html +++ b/templates/index.html @@ -153,7 +153,13 @@

Sponsors

{# #} {# #} {% if gruvian_ad %} - {% include "gruvian_ad.html" %} + + Ad Image + + {% else %} + + + {% endif %} {# #} From 52f02b6c62b33151b0e29ce2dd1af2011eafe233 Mon Sep 17 00:00:00 2001 From: mdjorup Date: Mon, 1 Jul 2024 12:50:52 -0400 Subject: [PATCH 3/6] bug fixes --- main.py | 2 +- templates/index.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 8213e99c9..76a9d340f 100644 --- a/main.py +++ b/main.py @@ -13,9 +13,9 @@ import urllib.request import geoip2.database +import urllib3 from flask import (Flask, Response, make_response, render_template, request, session) -import urllib3 import constants import markdown diff --git a/templates/index.html b/templates/index.html index 17be8f267..dfbcf2e07 100644 --- a/templates/index.html +++ b/templates/index.html @@ -153,8 +153,8 @@

Sponsors

{# #} {# #} {% if gruvian_ad %} - - Ad Image + + Ad Image {% else %} From 31d48f58d6a607440333c6ef26096015c5fc0637 Mon Sep 17 00:00:00 2001 From: mdjorup Date: Mon, 1 Jul 2024 13:27:14 -0400 Subject: [PATCH 4/6] button with link to advertise --- templates/index.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/templates/index.html b/templates/index.html index dfbcf2e07..355171f23 100644 --- a/templates/index.html +++ b/templates/index.html @@ -188,6 +188,13 @@

Sponsors

+
+
+ + Sponsor this Site + + +

Chapters


From 031046be3852e48c4e73c36f654e548349c9b172 Mon Sep 17 00:00:00 2001 From: mdjorup Date: Fri, 5 Jul 2024 12:06:41 -0400 Subject: [PATCH 5/6] language tags --- main.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 76a9d340f..f4415b96b 100644 --- a/main.py +++ b/main.py @@ -273,7 +273,7 @@ def get_tutorial(tutorial_id, language="en"): pool_manager = urllib3.PoolManager() # using this connection pool reduces latency -def get_gruvian_ad(): +def get_gruvian_ad(tag=None): env = 'dev' if request.host == 'localhost:5000' else 'prod' @@ -287,6 +287,7 @@ def get_gruvian_ad(): request_body = json.dumps( { "network_id": 13, + "tags": [tag] if tag else [], "test_mode": env == 'dev', } ) @@ -444,9 +445,11 @@ def index(title, language="en"): gruvian_ad = None - if domain_data['language'] != 'python' and domain_data['language'] != 'sql': + language = domain_data['language'] + + if language != 'python' and language != 'sql': # any domain that doesn't have a sponsorship from DataCamp - gruvian_ad = get_gruvian_ad() + gruvian_ad = get_gruvian_ad(language) if gruvian_ad and not gruvian_ad.get('filled', False): gruvian_ad = None From 9652f7d936afcf7f9622647807f238651126ab33 Mon Sep 17 00:00:00 2001 From: mdjorup Date: Thu, 1 Aug 2024 08:06:20 -0400 Subject: [PATCH 6/6] new gruvian api integration --- main.py | 2 +- templates/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index f4415b96b..dd9eacf00 100644 --- a/main.py +++ b/main.py @@ -286,7 +286,7 @@ def get_gruvian_ad(tag=None): request_body = json.dumps( { - "network_id": 13, + "format_id": 6, "tags": [tag] if tag else [], "test_mode": env == 'dev', } diff --git a/templates/index.html b/templates/index.html index 355171f23..a5fe799bb 100644 --- a/templates/index.html +++ b/templates/index.html @@ -154,7 +154,7 @@

Sponsors

{# #} {% if gruvian_ad %} - Ad Image + {{ gruvian_ad.ad.image.alt if gruvian_ad.ad.image.alt else 'Gruvian Ad' }} {% else %}