• [theWord] 一种英文字典的基类设计


    theWord --- 一种英文字典的基类设计

    py23 MIT devel

    使用场景

    想写一个应用,来记录自己背单词时候,对每个单词的记忆状况之类的东西。至于为什么做这个,试过了一些背单词软件,并不觉得好用,自己做一个吧。

    那么在对英文单词的中文释义获取方面,手动输入太累了,就是懒。。。解决方案就是打算使用网络词典(有道、百度什么的)获取英文单词的中文释义,这个就是最初设计时候的应用场景。

    该类的代码-->> basicDict.py,还依赖一个读配置文件的类-->>configFile.py

    基类

    打算不止使用一种词典,一个是参考多个词典对学习来说有帮助,二是万一一个词典炸了,就不好了。所以设计了这么一个基类,给具体的各个词典的类继承。

    粗略看了一下,因为各个词典网络都会要求使用者提供一个API_KEY,主要是为了限制并发访问次数和总访问次数之类的,毕竟是免费的;所以这个基类做的事情就是获取API_KEY

    但是API_KEY的申请,请使用者自己完成,反正也不困难。

    几种方式

    这里设计了3中方式获取开发者已经申请好了的KEY

    在程序初始化时:

    • 直接提供给程序。
    • 提供配置文件路径,从中获取。
    • 提供URL,获取URL内容,获取KEY。

    根据以上情况,本类应该具有一下几个变量:

    • API_KEY:用来存储KEY的字符串形式。
    • API_URL:获取KEY的URL
    • has_API:一个状态变量,用来存储是否已经有了KEY。

    那么代码如下:

    class basicDict(object):
        '''
        An API_KEY is required.
        '''
        name ='DEFAULT_DICTIONARY_NAME'
        API_KEY = ''
        has_API = False
        default_api_url = "http://127.0.0.1/api-key/youdao.html"
        API_url = ''
    

    上面还加了一个默认的URL,这个是在自己的电脑上,为了使用方便添加的;下面就具体的看3种方式的具体实现。

    那么在初始化的时候,应该在init函数中定义函数的默认参数:

        def __init__(self,API_KEY = 'DEFAULT',API_URL= 'DEFAULT',API_PATH = "DEFAULT"):
    

    1. 直接提供给程序

    最简单粗暴的在初始化的时候赋值就可以了:

            if not API_KEY == 'DEFAULT':
                self.API_KEY = API_KEY
                self.has_API = True
                return
    

    2. 使用URL获取

    对于这种情况,单独写了一个方法:

        def get_api_key_from_url(self , url = 'DEFAULT'):
            if url == 'DEFAULT':
                url = self.API_URL
                pass
            try:
                q = requests.get(url)
                html_string = q.text
                code = q.status_code
                if code != 200:
                    raise RuntimeError('Request Failed!')
                    pass
                self.API_KEY = html_string.replace('
    ','')
                self.has_API = True
                return True
            except:
                return False
            pass
    

    然后在初始化的过程中进行调用:

            # use URL
            if not API_URL == 'DEFAULT':
                self.API_URL = API_URL
                self.get_api_key_from_url()
                return 
    

    3. 使用配置文件

    最后是使用配置文件进行获取:

            # use conf file
            if not API_PATH == 'DEFAULT':
                config_file = configFile(API_PATH)
                key = config_file.get(self.name ,'api_key')
                if not key == False:
                    self.API_KEY = key
                    self.has_API = True
                else:
                    pass
                return
    

    这里面使用了一个类:configFile,关于这个类的说明,随笔还没有写完,等写完了在这里放链接。

    4. 若还没有API_KEK

    由于API_KEY是必须的,所以如果没有的话,无法进行下面的操作,在这里使用raise抛出异常。

            # no key
            error_message = 'Need ' +self.name + ' API_KEY!'
            raise RuntimeError(error_message)
    

    测试

    最后可以测试一下:

    def main():
        e = basicDict(API_PATH='conf.ini',name='youdao')
        print(e.API_KEY)
    
    if __name__ == "__main__":
        main()
    

    后续

    可以使用该类作为基类,完成-->> 使用有道API 的设计。

  • 相关阅读:
    linux内存查看方法
    setInterval/setTimeout传参方法
    MBT简述:基于模型的测试
    mac如何挂载移动硬盘、存储设备、U盘
    Jquery获取元素方法
    jquery如何判断元素是否被点击、属性操作、class操作
    SQL Server数据库中还原孤立用户的方法集合
    密码有效性验证失败。该密码不够复杂,不符合 Windows 策略要求
    还原SQLServer2008数据库报用户无法登录 .
    disable jboss JMXInvokerServlet .
  • 原文地址:https://www.cnblogs.com/guoyunzhe/p/5814111.html
Copyright © 2020-2023  润新知