• 欢迎访问佰阅部落
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Covid19case:英文版全球疫情图部分开发笔记

数据可视化 佰阅 3年前 (2020-03-26) 2988次浏览 0个评论

全球疫情愈加严重,关注度越来越高。实际上开源社区对越这次疫情的参与也是非常积极的,有很多项目都可以拿来学习或参与其中。这次分享的是英文版疫情开发的一些经验。

预览地址:https://www.covid19case.com

0.最终效果

Covid19case:英文版全球疫情图部分开发笔记

Covid19case:英文版全球疫情图部分开发笔记

Covid19case:英文版全球疫情图部分开发笔记

1.主要技术栈

  • 前端:VUE+echrt.js
  • 后端:flask+mysql+docker

2.后端开发笔记

  • 问题1:flask调用数据库,如果非常频繁会导致访问异常,需要添加一个roolback()
def query_record(query_sql):
    try:
        result = session.execute(query_sql)
        session.commit()
    except SQLAlchemyError as e:
        session.rollback()
        #print("we have error in add_costumer, {}".format(e))
        result = session.execute(query_sql)
        session.commit()
    return result

  • 问题2:处理动态页面请求时,比如vue开发的疫情图,像百度那样数据都在js文件里,无法用requests获得,后来使用urllib3就可以完整的获取到。

            http = urllib3.PoolManager()
            r = http.request('GET', 'https://voice.baidu.com/act/newpneumonia/newpneumonia')
            r.data
    

     

  • 问题3:处理"\u"开头的字符串时,我以为转换为str类型后,用replace替换就行,结果试了多次无果。

    比如:\\u8868\\u53551中将双\变成单\。无法用replace.最终需要用unicode_escape的编码方法去解决

    a = '\\u8868\\u53551'
    a.encode('utf-8').decode('unicode_escape')
    
  • 问题4:多个列表之间带序列编号的操作

    list_a = [4,1,5,3]
    list_b = [5,2,6,1]
    for i,(x,y) in enumerate(zip(list_a,list_b)):  #
    # 其中i代表序列号,从0开始,x,y代表列表里的值。如果有第三个列表,可以写成如下
    for i,(x,y,z) in enumerate(zip(list_a,list_b,list_c)):  #
    
    
  • 问题5:列表去重,直接使用用set,原先的排序会打乱,再次使用sort可以保留原始排序

                >liast_a = [5,6,6,4,4,1]
                >result = list(set(liast_a))   #去重无序结果
                >result.sort(key=liast_a.index)    #按原来排序
                最终输出:[5,6,4,1]
    

    最好在加个TG通知的,用于异常提醒

    om requests import post
    """
    TG 消息推送
    """
    TG_TOKEN = 'XXXXXXXXXXXXXXXXXXXXX'
    CHAT_ID = 'XXXXXXXXX'
    def post_tg(message):
        telegram_message = f"{message}"
                   
        params = (
            ('chat_id', CHAT_ID),
            ('text', telegram_message),
            ('parse_mode', "Markdown"), #可选Html或Markdown
            ('disable_web_page_preview', "yes")
        )    
        telegram_url = "https://api.telegram.org/bot" + TG_TOKEN + "/sendMessage"
        telegram_req = post(telegram_url, params=params)
        telegram_status = telegram_req.status_code
        if telegram_status == 200:
            print(f"INFO: Telegram Message sent")
        else:
            print("Telegram Error")
            
    if __name__ == "__main__":
        post_tg('你好,佰阅!')    
    

     

3.一些感悟

本项目是聂老板主持开发的,虽然不清楚最终能否通过赞助费获得实际收益,但是开发这个比之前自己开发的疫情图要漫长的多。基于pyechart的基本一天就可以完工,基于flask+mysql+echart的前端,当时花了2天左右,而这个虽然有前面的积累,但是维护这块耗时却很大。看来一个项目要想持续运作,必须要连续不断的去处理异常,否则无法顺产。

由于python是一门解释型语言,所以代码书写的时候,感觉写起来越来越顺畅,这也是python的优势,不像php那样,让你前仆后继,很耗耐心。python主要是针对最基础的元素【字符串、数字、列表、字典】去操作的,因此逻辑处理上比较顺畅。相对于前端的永无止境的美化,后端最终只有几张表展现,因此维护和开发相对迅速。


佰阅部落 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Covid19case:英文版全球疫情图部分开发笔记
喜欢 (0)

您必须 登录 才能发表评论!