2023-03-26 04:57:18 +09:00
|
|
|
from typing import Iterator
|
|
|
|
|
|
|
|
import requests
|
|
|
|
|
2023-04-08 03:32:34 +09:00
|
|
|
from . import __version__
|
|
|
|
from .model import ISDNRecord, ISDNRoot
|
|
|
|
from .parser import ISDNJpSitemapXMLParser
|
2023-03-26 04:57:18 +09:00
|
|
|
|
2023-04-03 04:16:28 +09:00
|
|
|
ISDN_XML_ENDPOINT = "https://isdn.jp/xml/{isdn}"
|
|
|
|
ISDN_IMAGE_ENDPOINT = "https://isdn.jp/images/thumbs/{isdn}.png"
|
2023-03-26 04:57:18 +09:00
|
|
|
ISDN_SITEMAP = "https://isdn.jp/sitemap.xml"
|
|
|
|
|
|
|
|
|
|
|
|
class ISDNClient:
|
2023-04-03 04:16:28 +09:00
|
|
|
def __init__(
|
|
|
|
self,
|
|
|
|
xml_endpoint_url: str = ISDN_XML_ENDPOINT,
|
|
|
|
image_endpoint_url: str = ISDN_IMAGE_ENDPOINT,
|
|
|
|
sitemap_url: str = ISDN_SITEMAP,
|
|
|
|
):
|
|
|
|
self.xml_endpoint_url = xml_endpoint_url
|
|
|
|
self.image_endpoint_url = image_endpoint_url
|
2023-03-26 04:57:18 +09:00
|
|
|
self.sitemap_url = sitemap_url
|
|
|
|
self.s = requests.Session()
|
|
|
|
self.set_user_agent(f"isdn-python/{__version__}")
|
|
|
|
|
|
|
|
def set_user_agent(self, user_agent: str):
|
|
|
|
self.s.headers.update({"user-agent": user_agent})
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def normalize_isdn(isdn: str) -> str:
|
|
|
|
return isdn.replace("-", "").strip()
|
|
|
|
|
2023-04-03 04:16:28 +09:00
|
|
|
def _get(self, isdn: str, endpoint_url: str) -> requests.Response:
|
|
|
|
r = self.s.get(endpoint_url.format(isdn=self.normalize_isdn(isdn)))
|
2023-03-26 04:57:18 +09:00
|
|
|
r.raise_for_status()
|
|
|
|
return r
|
|
|
|
|
|
|
|
def get(self, isdn: str) -> ISDNRecord:
|
2023-04-03 04:16:28 +09:00
|
|
|
r = self._get(isdn, self.xml_endpoint_url)
|
2023-04-08 03:32:34 +09:00
|
|
|
return ISDNRoot.from_xml_first(r.content)
|
2023-03-26 04:57:18 +09:00
|
|
|
|
|
|
|
def get_raw(self, isdn: str) -> bytes:
|
2023-04-03 04:16:28 +09:00
|
|
|
r = self._get(isdn, self.xml_endpoint_url)
|
|
|
|
return r.content
|
|
|
|
|
|
|
|
def get_image(self, isdn: str) -> bytes:
|
|
|
|
r = self._get(isdn, self.image_endpoint_url)
|
2023-03-26 04:57:18 +09:00
|
|
|
return r.content
|
|
|
|
|
|
|
|
def _list(self) -> requests.Response:
|
|
|
|
r = self.s.get(self.sitemap_url, stream=True)
|
|
|
|
r.raise_for_status()
|
|
|
|
return r
|
|
|
|
|
|
|
|
def list(self) -> Iterator[str]:
|
|
|
|
r = self._list()
|
2023-04-08 03:32:34 +09:00
|
|
|
return ISDNJpSitemapXMLParser.parse_list(r.raw)
|