def create_db(self, user_name: str) -> bool:
        """ DB生成
        """
        try:
            # 接続
            self.__connect_db()
            # テーブル生成
            # 未生成時のみ生成を行う
            #self.__user_info_tbl_cursor.execute("drop table if exists %s" % USER_INFO)
            # ユーザ情報テーブル
            self.__user_info_tbl_cursor.execute(
                "create table if not exists %s (user_name text primary key, table_name text)"
                % USER_INFO)
            #
            self.__book_info_tbl_name = user_name + BOOK_INFO
            #self.__book_info_tbl_cursor.execute("drop table if exists %s" % (table_name))
            self.__book_info_tbl_cursor.execute(
                "create table if not exists %s (author_name text primary key, date text)"
                % (self.__book_info_tbl_name))

            # 検索情報テーブルを追加
            query_str = "insert into " + USER_INFO + " values (?, ?)"
            # 現データ数取得
            #self.__user_info_tbl_cursor.execute("select count(*) from %s " % self.__user_info_tbl_name)
            #data_max = self.__user_info_tbl_cursor.fetchall()
            self.__user_info_tbl_cursor.execute(
                query_str, (user_name, self.__book_info_tbl_name))

        except sqlite3.Error as e:
            # 検索対象情報テーブル名保持
            self.__book_info_tbl_name = user_name + BOOK_INFO
            Debug.dprint(e.args[0])
            return False

        # output
        for row in self.__user_info_tbl_cursor.execute("select * from %s" %
                                                       USER_INFO):
            Debug.tmpprint(row)
            for row_sub in self.__book_info_tbl_cursor.execute(
                    "select * from %s" % row[1]):
                Debug.tmpprint(row_sub)

        # 接続解除
        self.__disconnect_db()
        return True
 def add_book_info(self, author: str, date: str):
     """ 検索対象情報追加  
     [I] author : 著者名 [I] date 出力対象日閾値
     """
     # 接続
     self.__connect_db()
     # 追加
     try:
         query_str = "insert into " + self.__book_info_tbl_name + " values (?, ?)"
         self.__book_info_tbl_cursor.execute(query_str, (author, date))
     except sqlite3.Error as e:
         Debug.dprint(e.args[0])
     # output
     for row in self.__book_info_tbl_cursor.execute(
             "select * from %s" % self.__book_info_tbl_name):
         Debug.tmpprint(row)
     # 接続解除
     self.__disconnect_db()
 def set_user_info_key(self, user_name: str) -> bool:
     """ ユーザ情報テーブル主キー設定  
     [I] username ユーザ名  
     [O] 結果
     """
     result = False
     try:
         # DB接続
         self.__connect_db()
         # 検索
         query_str = "select * from " + USER_INFO + " where user_name=?"
         self.__user_info_tbl_cursor.execute(query_str, (user_name, ))
         if self.__user_info_tbl_cursor.fetchone is not None:
             # 検索対象情報テーブル名保持
             self.__book_info_tbl_name = user_name + BOOK_INFO
             result = True
     except sqlite3.Error as e:
         Debug.dprint(e.args[0])
     # 未登録情報
     self.__disconnect_db()
     return result
 def get_db_search_list(self) -> list:
     """ 著者名リスト取得  
     [O] 著者リスト(DBAuthorInfo型)
     """
     search_list = []
     try:
         # DB接続
         self.__connect_db()
         # 全データ取得
         query_str = "select * from " + self.__book_info_tbl_name
         self.__book_info_tbl_cursor.execute(query_str)
         # 1データずつリストに保持
         for row in self.__book_info_tbl_cursor.fetchall():
             book_info = DBAuthorInfo()
             book_info.author_name = row[0]
             book_info.search_date = row[1]
             search_list.append(book_info)
     except sqlite3.Error as e:
         Debug.dprint(e.args[0])
     # 接続解除
     self.__disconnect_db()
     return search_list
 def exec_search(self, url:str) -> List[webdriver.remote.webelement.WebElement]:
     """ 検索実行
     渡されたURLから検索処理を実行する  
     [I] url : 検索実行URL  
     [O] 検索結果
     """
     Debug.tmpprint("func : exec_search")
     self.__driver.get(url)
     body = self.__driver.find_element_by_tag_name("body")
     body.send_keys(Keys.CONTROL + 't')
     divs = self.__driver.find_elements_by_class_name('s-result-item')
     # 失敗時は一定時間待ってから再度取得を試みる
     if len(divs) == 0:
         is_ok = False
         for retry in range(0,REQUEST_RETRY_NUM,1):
             time.sleep(REQUEST_WAIT_TIME *( retry+1))
             # 再度実行
             divs = self.__driver.find_elements_by_class_name('s-result-item')
             if len(divs) != 0:
                 is_ok = True
                 break
             else:
                 if retry == REQUEST_RETRY_NUM:
                     # リトライ上限に達した
                     Debug.dprint("request err -> " + self.__author_list[self.__search_cnt])
         if is_ok == False:
             # 最後まで成功しなかった場合該当データ削除
             self.__search_infos.pop(self.__author_list[self.__search_cnt])
             self.__author_list.pop(self.__search_cnt)
             # 結果なし
             divs = []
     # 検索ログ出力
     Debug.dprint("search author(" +  str(self.__search_cnt + 1) + "/" + str(self.get_author_list_num()) + ") -> " + self.__author_list[self.__search_cnt])
     # 検索数を進める
     self.__search_cnt += 1
     # 結果を返す
     return divs