コード例 #1
0
ファイル: atcoder.py プロジェクト: manabu/online-judge-tools
 def download(self, session=None):
     session = session or utils.new_default_session()
     # get
     resp = utils.request('GET', self.get_url(), session=session)
     msgs = AtCoderService._get_messages_from_cookie(resp.cookies)
     if AtCoderService._report_messages(msgs, unexpected=True):
         # example message: "message: You cannot see this page."
         log.warning('are you logged in?')
         return []
     # parse
     soup = bs4.BeautifulSoup(resp.content.decode(resp.encoding),
                              utils.html_parser)
     samples = utils.SampleZipper()
     lang = None
     for pre, h3 in self._find_sample_tags(soup):
         s = utils.textfile(utils.dos2unix(pre.string.lstrip()))
         name = h3.string
         l = self._get_tag_lang(pre)
         if lang is None:
             lang = l
         elif lang != l:
             log.info(
                 'skipped due to language: current one is %s, not %s: %s ',
                 lang, l, name)
             continue
         samples.add(s, name)
     return samples.get()
コード例 #2
0
 def download(self, session=None):
     session = session or requests.Session()
     url = self.get_url()
     # get
     log.status('GET: %s', url)
     resp = session.get(url)
     log.status(utils.describe_status_code(resp.status_code))
     resp.raise_for_status()
     msgs = AtCoderService._get_messages_from_cookie(resp.cookies)
     if AtCoderService._report_messages(msgs, unexpected=True):
         return []
     # parse
     soup = bs4.BeautifulSoup(resp.content.decode(resp.encoding),
                              utils.html_parser)
     samples = utils.SampleZipper()
     lang = None
     for pre, h3 in self._find_sample_tags(soup):
         s = utils.textfile(utils.dos2unix(pre.string.lstrip()))
         name = h3.string
         l = self._get_tag_lang(pre)
         if lang is None:
             lang = l
         elif lang != l:
             log.info(
                 'skipped due to language: current one is %s, not %s: %s ',
                 lang, l, name)
             continue
         samples.add(s, name)
     return samples.get()
コード例 #3
0
 def _parse_sample_tag(self, tag):
     assert isinstance(tag, bs4.Tag)
     assert tag.name == "h2"
     name = tag.contents[0]
     if ":" in name:
         name = name[:name.find(":")]
     if name in ["Sample input", "Sample output"]:
         nxt = tag.next_sibling
         while nxt and nxt.string.strip() == "":
             nxt = nxt.next_sibling
         if nxt.name == "pre":
             s = utils.textfile(utils.dos2unix(nxt.string.lstrip()))
         else:
             s = ""
         return s, name
コード例 #4
0
 def _parse_sample_tag(self, tag):
     assert isinstance(tag, bs4.Tag)
     assert tag.name == 'h2'
     name = tag.contents[0]
     if ':' in name:
         name = name[:  name.find(':') ]
     if name in [ 'Sample input', 'Sample output' ]:
         nxt = tag.next_sibling
         while nxt and nxt.string.strip() == '':
             nxt = nxt.next_sibling
         if nxt.name == 'pre':
             s = utils.textfile(utils.dos2unix(nxt.string.lstrip()))
         else:
             s = ''
         return s, name
コード例 #5
0
 def download_sample_cases(
     self,
     session: Optional[requests.Session] = None
 ) -> List[onlinejudge.type.TestCase]:
     session = session or utils.new_default_session()
     # get
     # 自分で書き換えた箇所(初期 AtCoder の問題 URl は末尾が数字になっているため)
     url = self.get_url()
     for _ in range(2):
         resp = _request('GET', url, session=session)
         msgs = AtCoderService._get_messages_from_cookie(resp.cookies)
         if AtCoderService._report_messages(msgs, unexpected=True):
             # example message: "message: You cannot see this page."
             log.warning('are you logged in?')
             return []
         # parse
         soup = bs4.BeautifulSoup(resp.content.decode(resp.encoding),
                                  utils.html_parser)
         samples = utils.SampleZipper()
         if len(list(self._find_sample_tags(soup))) > 0:
             break
         else:
             url = url[:-1] + chr(ord(url[-1]) - ord('a') + ord('1'))
     lang = None
     for pre, h3 in self._find_sample_tags(soup):
         s = utils.textfile(utils.dos2unix(pre.string.lstrip()))
         name = h3.string
         l = self._get_tag_lang(pre)
         if lang is None:
             lang = l
         elif lang != l:
             log.info(
                 'skipped due to language: current one is %s, not %s: %s ',
                 lang, l, name)
             continue
         samples.add(s, name)
     return samples.get()