def scrape_movie(movie_id: str) -> Dict: url = f'{ENDPOINT}p/{movie_id}' try: html = RequestService(url).get() movie = Scraper(html=html).get_movie_detail() set_movie(movie_id, movie) return movie except Exception as e: Slack().post_message(f'{url}\n動画スクレイピングに失敗しました。\n{str(e)}') raise e
def scrape_movie_list(movie_id_list: List[str]): result: List[str] = [] for movie_id in movie_id_list: url = f'{ENDPOINT}p/{movie_id}' try: html = RequestService(url).get() movie = Scraper(html=html).get_movie_detail() set_movie(movie_id, movie) result.append(movie_id) except Exception as e: Slack().post_message(f'{url}\n動画スクレイピングに失敗しました。\n{str(e)}') return result return result
def grant_seq_batch_execute(): MAX_PAGE = 535 seq = 0 for idx in range(MAX_PAGE): page = MAX_PAGE - idx movie_id_list = list(reversed(_get_movie_id_list(page=page))) for movie_id in movie_id_list: if get_movie(movie_id=movie_id) is not None: seq = grant_seq(movie_id=movie_id, seq=seq) else: print(f'データがなかったため新規作成しました {movie_id}') movie: Dict = scrape_movie(movie_id=movie_id) movie['seq'] = seq set_movie(movie_id, movie) seq = seq + 1
def _only_in_japan(): """ これだけローカルで処理する """ url = 'https://front.njpwworld.com/search?query=BRITISH%20J%20CUP' html = RequestService(url).get() movie_id_list = Scraper(html=html).get_movie_id_list() result: List[str] = [] for movie_id in movie_id_list: print(movie_id) if get_movie(movie_id=movie_id) is not None: continue movie: Dict = scrape_movie(movie_id=movie_id) set_movie(movie_id, movie) result.append(movie_id) return result
def scrape_page(page: int, stop_if_exists: bool = True) -> List[str]: """ 指定されたページにある動画をスクレイピングしてデータベースに登録します。 すでに存在する動画をスクレイピングした場合は、その時点でスクレイピングを終了します。 return 登録完了した動画のIDリスト """ movie_id_list: List[str] = _get_movie_id_list(page=page) result: List[str] = [] for movie_id in movie_id_list: if get_movie(movie_id=movie_id) is not None: if stop_if_exists: break else: continue movie: Dict = scrape_movie(movie_id=movie_id) set_movie(movie_id, movie) result.append(movie_id) return result
def test_set_movie(): # setup tag = Tag(div='tag-man', id='tagtest', name='タグテスト') movie = { "id": movie_id, "title": 'test', "tags": [tag.to_dict()], "like_count": 0 } # execute # データがないときはTrueを返す actual = firestore.set_movie(movie_id=movie_id, movie=movie) assert actual # データが存在するとFalseを返す actual = firestore.set_movie(movie_id=movie_id, movie=movie) assert not actual # データのクリーニング firestore.delete_movie(movie_id=movie_id)