[boardgames] Add auth to BGG API call
This commit is contained in:
@ -6,6 +6,7 @@ from typing import TYPE_CHECKING, Optional
|
|||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@ -17,6 +18,8 @@ SEARCH_ID_URL = (
|
|||||||
"https://boardgamegeek.com/xmlapi/search?search={query}&exact=1"
|
"https://boardgamegeek.com/xmlapi/search?search={query}&exact=1"
|
||||||
)
|
)
|
||||||
GAME_ID_URL = "https://boardgamegeek.com/xmlapi/boardgame/{id}"
|
GAME_ID_URL = "https://boardgamegeek.com/xmlapi/boardgame/{id}"
|
||||||
|
BGG_ACCESS_TOKEN = getattr(settings, "BGG_ACCESS_TOKEN", "")
|
||||||
|
BASE_HEADERS = {"User-Agent": "Vrobbler 31.0", "Authorization": f"Bearer {BGG_ACCESS_TOKEN}"}
|
||||||
|
|
||||||
|
|
||||||
def take_first(thing: Optional[list]) -> str:
|
def take_first(thing: Optional[list]) -> str:
|
||||||
@ -37,10 +40,9 @@ def take_first(thing: Optional[list]) -> str:
|
|||||||
|
|
||||||
def lookup_boardgame_id_from_bgg(title: str) -> Optional[int]:
|
def lookup_boardgame_id_from_bgg(title: str) -> Optional[int]:
|
||||||
soup = None
|
soup = None
|
||||||
headers = {"User-Agent": "Vrobbler 0.11.12"}
|
|
||||||
game_id = None
|
game_id = None
|
||||||
url = SEARCH_ID_URL.format(query=title)
|
url = SEARCH_ID_URL.format(query=title)
|
||||||
r = requests.get(url, headers=headers)
|
r = requests.get(url, headers=BASE_HEADERS)
|
||||||
if r.status_code == 200:
|
if r.status_code == 200:
|
||||||
soup = BeautifulSoup(r.text, "xml")
|
soup = BeautifulSoup(r.text, "xml")
|
||||||
|
|
||||||
@ -57,7 +59,6 @@ def lookup_boardgame_id_from_bgg(title: str) -> Optional[int]:
|
|||||||
def lookup_boardgame_from_bgg(lookup_id: str) -> dict:
|
def lookup_boardgame_from_bgg(lookup_id: str) -> dict:
|
||||||
soup = None
|
soup = None
|
||||||
game_dict = {}
|
game_dict = {}
|
||||||
headers = {"User-Agent": "Vrobbler 0.11.12"}
|
|
||||||
|
|
||||||
title = ""
|
title = ""
|
||||||
bgg_id = None
|
bgg_id = None
|
||||||
@ -73,7 +74,7 @@ def lookup_boardgame_from_bgg(lookup_id: str) -> dict:
|
|||||||
bgg_id = lookup_boardgame_id_from_bgg(title)
|
bgg_id = lookup_boardgame_id_from_bgg(title)
|
||||||
|
|
||||||
url = GAME_ID_URL.format(id=bgg_id)
|
url = GAME_ID_URL.format(id=bgg_id)
|
||||||
r = requests.get(url, headers=headers)
|
r = requests.get(url, headers=BASE_HEADERS)
|
||||||
if r.status_code == 200:
|
if r.status_code == 200:
|
||||||
soup = BeautifulSoup(r.text, "xml")
|
soup = BeautifulSoup(r.text, "xml")
|
||||||
|
|
||||||
@ -109,7 +110,8 @@ def push_scrobble_to_bgg(scrobble: "Scrobble", user: User) -> Optional[bool]:
|
|||||||
login_payload = {
|
login_payload = {
|
||||||
"credentials": {"username": bgg_username, "password": bgg_password}
|
"credentials": {"username": bgg_username, "password": bgg_password}
|
||||||
}
|
}
|
||||||
headers = {"content-type": "application/json"}
|
headers = BASE_HEADERS
|
||||||
|
headers["content-type"] = "application/json"
|
||||||
|
|
||||||
# TODO Look up past plays for scrobble.media_obj.bggeek_id, and make sure we haven't scrobbled this before
|
# TODO Look up past plays for scrobble.media_obj.bggeek_id, and make sure we haven't scrobbled this before
|
||||||
|
|
||||||
|
|||||||
@ -68,6 +68,7 @@ LASTFM_SECRET_KEY = os.getenv("VROBBLER_LASTFM_SECRET_KEY")
|
|||||||
IGDB_CLIENT_ID = os.getenv("VROBBLER_IGDB_CLIENT_ID")
|
IGDB_CLIENT_ID = os.getenv("VROBBLER_IGDB_CLIENT_ID")
|
||||||
IGDB_CLIENT_SECRET = os.getenv("VROBBLER_IGDB_CLIENT_SECRET")
|
IGDB_CLIENT_SECRET = os.getenv("VROBBLER_IGDB_CLIENT_SECRET")
|
||||||
COMICVINE_API_KEY = os.getenv("VROBBLER_COMICVINE_API_KEY")
|
COMICVINE_API_KEY = os.getenv("VROBBLER_COMICVINE_API_KEY")
|
||||||
|
BGG_ACCESS_TOKEN = os.getenv("VROBBLER_BGG_ACCESS_TOKEN", "")
|
||||||
GEOLOC_ACCURACY = os.getenv("VROBBLER_GEOLOC_ACCURACY", 3)
|
GEOLOC_ACCURACY = os.getenv("VROBBLER_GEOLOC_ACCURACY", 3)
|
||||||
GEOLOC_PROXIMITY = os.getenv("VROBBLER_GEOLOC_PROXIMITY", "0.0001")
|
GEOLOC_PROXIMITY = os.getenv("VROBBLER_GEOLOC_PROXIMITY", "0.0001")
|
||||||
POINTS_FOR_MOVEMENT_HISTORY = os.getenv(
|
POINTS_FOR_MOVEMENT_HISTORY = os.getenv(
|
||||||
|
|||||||
Reference in New Issue
Block a user