summaryrefslogtreecommitdiff
path: root/htmlcache.py
blob: 2f727a72d1104c0cc7ab2d0fdea9a9689238dab5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import os

import aiohttp

import main


class TexSourceGenerationError(Exception):
    pass


class HtmlCache:

    def __init__(self, cache_path: str):
        self._cache_path = os.path.abspath(cache_path)

    async def get_utaten_tex_source(self, item_id: str) -> str:
        cache_file_path = os.path.join(self._cache_path, f'{item_id}.html')
        if os.path.isfile(cache_file_path):
            with open(cache_file_path, 'r', encoding='utf-8') as f:
                html = f.read()
        else:
            async with aiohttp.ClientSession() as ses:
                async with ses.get(f'https://utaten.com/lyric/{item_id}/') as r:
                    if not r.ok:
                        raise TexSourceGenerationError('HTTP request failed when reading page source')
                    html = await r.text()
                    try:
                        with open(cache_file_path, 'w', encoding='utf-8') as f:
                            f.write(html)
                    except IOError as e:
                        print(f'Failed to update cache for song `{item_id}`: {e}')
        return main.html_to_tex(html)