diff --git a/science_article_cnki/science_article_cnki/models/cnki_model.py b/science_article_cnki/science_article_cnki/models/cnki_model.py index 96077b2..5500784 100644 --- a/science_article_cnki/science_article_cnki/models/cnki_model.py +++ b/science_article_cnki/science_article_cnki/models/cnki_model.py @@ -8,7 +8,7 @@ from typing import Union, List, Dict from datetime import datetime, timedelta from science_article_cnki.models.enum_cls import ( - ResourceType, SourceDatabaseEnum, + ResourceType, SourceDatabaseEnum, ResourceLanguageEnum, KuaKuCodeEnum, SearchTypeId, SearchFieldEnum, OperatorEnum, LogicEnum, SingleResultEnum ) @@ -436,6 +436,17 @@ def add_search_word(search_content: str, base_query: dict = None): return words_query +def add_muti_filters(base_query: dict, filters: List[dict] = None): + """ + 对一个检索式批量添加多个筛选项 + """ + if not filters: + return base_query + for filter in filters: + add_muti_group(**filter, base_query=base_query) + return base_query + + def add_muti_group( project: Union[SingleResultEnum, str], value: Union[str, List[str]], @@ -586,6 +597,7 @@ def temp_refine_search( year: int = None, updated_date: str = None, resource_type: str = '学术期刊', + lang: Union[str, ResourceLanguageEnum] = ResourceLanguageEnum.中文, **kwargs ): """ @@ -594,9 +606,12 @@ def temp_refine_search( :param updated_date: 更新时间:不限、最近一周/一月/半年/一年、今年迄今、上一年度 :param year: 指定筛选的年份,如果需要与updated_date参数同时使用,需要在限制更新时间后再筛选 :param resource_type: + :param lang: :param kwargs: :return: """ + if isinstance(lang, str): + lang = ResourceLanguageEnum[lang] _query = { "Platform": "", "Resource": ResourceType[resource_type].value, @@ -614,8 +629,8 @@ def temp_refine_search( }, "ExScope": "1", "SearchType": 1, - "Rlang": "CHINESE", - "KuaKuCode": "", + "Rlang": lang.value, + "KuaKuCode": KuaKuCodeEnum[resource_type].value, "Expands": {}, "View": "changeDBOnlyFT", "SearchFrom": 1 @@ -644,6 +659,16 @@ def temp_query_search(query_body, query: str = None, page: int = 1, page_size: i :param updated_date: 默认不限 :return: """ + def getFromString(): + rr = kwargs.get('resource_type', "总库") + d = "" + d += f"资源范围:{rr}; " + time_range = '更新时间:%(updated_date)s' % {"updated_date": updated_date} + d += f'时间范围:{time_range}; ' + if rr == '学术期刊': + d += '来源类别:全部期刊' + d += '; ' + return d page = str(page) page_size = str(page_size) if page == '1': @@ -658,8 +683,7 @@ def temp_query_search(query_body, query: str = None, page: int = 1, page_size: i "dstyle": "listmode", "boolSortSearch": "false", "aside": aside, - "searchFrom": "资源范围:学术期刊; 仅看有全文,中英文扩展; 时间范围:更新时间:%(updated_date)s; 来源类别:全部期刊; " % { - "updated_date": updated_date}, + "searchFrom": getFromString(), "subject": "", "language": "", "uniplatform": "",