|
|
@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING, Optional
|
|
|
import requests
|
|
|
from bs4 import BeautifulSoup
|
|
|
from django.contrib.auth import get_user_model
|
|
|
+from django.conf import settings
|
|
|
|
|
|
User = get_user_model()
|
|
|
if TYPE_CHECKING:
|
|
|
@@ -17,6 +18,8 @@ SEARCH_ID_URL = (
|
|
|
"https://boardgamegeek.com/xmlapi/search?search={query}&exact=1"
|
|
|
)
|
|
|
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:
|
|
|
@@ -37,10 +40,9 @@ def take_first(thing: Optional[list]) -> str:
|
|
|
|
|
|
def lookup_boardgame_id_from_bgg(title: str) -> Optional[int]:
|
|
|
soup = None
|
|
|
- headers = {"User-Agent": "Vrobbler 0.11.12"}
|
|
|
game_id = None
|
|
|
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:
|
|
|
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:
|
|
|
soup = None
|
|
|
game_dict = {}
|
|
|
- headers = {"User-Agent": "Vrobbler 0.11.12"}
|
|
|
|
|
|
title = ""
|
|
|
bgg_id = None
|
|
|
@@ -73,7 +74,7 @@ def lookup_boardgame_from_bgg(lookup_id: str) -> dict:
|
|
|
bgg_id = lookup_boardgame_id_from_bgg(title)
|
|
|
|
|
|
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:
|
|
|
soup = BeautifulSoup(r.text, "xml")
|
|
|
|
|
|
@@ -109,7 +110,8 @@ def push_scrobble_to_bgg(scrobble: "Scrobble", user: User) -> Optional[bool]:
|
|
|
login_payload = {
|
|
|
"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
|
|
|
|