标签 python 下的文章

朋友求助,他儿子停学不停课家长在家要监督上网课,容易错过上课签到。找来了个python的课程表导入工具问我怎么整。(链接文末)。
我看了下,要自己整理excel模板,还得手动编辑json文件,又要py环境。对文科生确实不太友善的样子。

我想既然目的是生成一个可以导入outlook日历/google日历/ios日历的 ics文件,我直接看看源码是个什么结构语法吧。

py代码片段

def icsCreateAndSave():
    icsString = "BEGIN:VCALENDAR\nMETHOD:PUBLISH\nVERSION:2.0\nX-WR-CALNAME:课程表\nPRODID:-//Apple Inc.//Mac OS X 10.12//EN\nX-APPLE-CALENDAR-COLOR:#FC4208\nX-WR-TIMEZONE:Asia/Shanghai\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Asia/Shanghai\nBEGIN:STANDARD\nTZOFFSETFROM:+0900\nRRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYMONTH=9;BYDAY=3SU\nDTSTART:19890917T000000\nTZNAME:GMT+8\nTZOFFSETTO:+0800\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+0800\nDTSTART:19910414T000000\nTZNAME:GMT+8\nTZOFFSETTO:+0900\nRDATE:19910414T000000\nEND:DAYLIGHT\nEND:VTIMEZONE\n"
    global classTimeList, DONE_ALARMUID, DONE_UnitUID
    eventString = ""
    for classInfo in classInfoList :
        i = int(classInfo["classTime"]-1)
        className = classInfo["className"]+"|"+classTimeList[i]["name"]+"|"+classInfo["classroom"]
        endTime = classTimeList[i]["endTime"]
        startTime = classTimeList[i]["startTime"]
        index = 0
        for date in classInfo["date"]:
            eventString = eventString+"BEGIN:VEVENT\nCREATED:"+classInfo["CREATED"]
            eventString = eventString+"\nUID:"+classInfo["UID"][index]
            eventString = eventString+"\nDTEND;TZID=Asia/Shanghai:"+date+"T"+endTime
            eventString = eventString+"00\nTRANSP:OPAQUE\nX-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC\nSUMMARY:"+className
            eventString = eventString+"\nDTSTART;TZID=Asia/Shanghai:"+date+"T"+startTime+"00"
            eventString = eventString+"\nDTSTAMP:"+DONE_CreatedTime
            eventString = eventString+"\nSEQUENCE:0\nBEGIN:VALARM\nX-WR-ALARMUID:"+DONE_ALARMUID
            eventString = eventString+"\nUID:"+DONE_UnitUID
            eventString = eventString+"\nTRIGGER:"+DONE_reminder
            eventString = eventString+"\nDESCRIPTION:事件提醒\nACTION:DISPLAY\nEND:VALARM\nEND:VEVENT\n"

            index += 1
    icsString = icsString + eventString + "END:VCALENDAR"

竟然不是json也不是xml。
BEGIN:VCALENDAR 这格式好眼熟,和10多年前我做二维码名片的时候那个VCARD协议很像,经过一番搜索,果然!
那就自己做一个网页版的好了!

最终成品如下:

https://gen8.orz.com.cn/beta/classtab/

用法:
设定一周的课程安排、
设置提前提醒的时间、
设置提醒的截止日期(不设置会永远每周循环下去),
点生成,就能到一个ics文件
在iphone/ipad/win10的outlook/部分安卓手机 上打开ics文件(或浏览器下载)
即可把日程导入到日历,可以随时查看和得到提醒。

微信图片_20200312071852.png

作为变体,也适用于 周例行工作提醒、电视节目(追番)表、健身计划 提醒。

以下是实现的原理结构,前端细节就不po了,源码打包了可以下载自行研究

源码下载










- 阅读剩余部分 -

上篇已经解决了如何大批量查询号码归属地的问题。
此时已经把一批号码资料导出成了csv(部分数据由于录入并不规范,所以存在不少无效错误的数据需要在入库和查询归属地接口前加工处理)
以下需要注意的若干点的备忘:

  1. 处理csv要去掉换行符及包裹数据的双引号;
  2. 文本编码,建议统一处理为utf-8;
  3. 多个csv 遍历建议处理完后移动或标记文件,避免遇错中断时无法分辨哪些数据已经处理;
  4. phone调用返回结果可能为None(归属地库无匹配);
  5. 手机号码合法性检查(长度、组成);
  6. 客户端或用户录入可能会自动在手机号码间插入字符“ ”或“-”, 例如 138-0013-8000;


- 阅读剩余部分 -

不是第一次弄这个东西,一套流程下来觉得步骤还是有点繁琐,所以备忘一下。

需求

设计网页的时候常会用到一些非系统自带的字体,要实现的做法不外乎以下几种

  1. 把所有艺术字体部分作为图片素材处理
  2. 在CSS中引用外部的自定义 ttf字体库文件
  3. 提着菜刀找产品经理和设计师,让他们把字体改回用宋体(笑)

无论1或是2,都有比较明显的缺点。
作为图片处理的话,每次出现一个小改动比如说需要改动个别文字,那就得打开PS重新做一个图片素材,而且网页加载图片展现效果和对带宽的利用都不甚理想。
外挂ttf字库的话浪费带宽流量的问题则更为严重,如果是西文字库还好(也就十几个符号和大小写52个字母)中文的话字库文件通常2M起步,整套粗细斜字库像阿里普惠体一共30M+。用户手机打开你的页面单单为了显示文字就不见30M流量是不实际的,如果同时来一千几百个用户,服务器更是会因为带宽堵塞直接扑街。

那有没有好的解决方案,有!把项目需要用到的字提取出来重新打包成一个定制化的字库文件,也就是做TTF压缩。

啰嗦科普完,下面开干。内容分上下两篇

不知道是不是业内还有其他更专业更成熟更快捷傻瓜高效优雅的方法,以下仅仅是自己的一点摸索罢了。



- 阅读剩余部分 -

微信公众号导出的文章统计数据xlsx 文档结构如下。需要用到的数据第6行起,第1列是标题及链接,第3列是发表日期。
php方式解构excel文档已经做过了,最近都是拿python练手,顺便就试试在py中完成这个任务

excel导出公众号数据.png

下文无特别说明是python3.x代码,需要跳过弯路看正确解决方案的的直接跳到最后方案


- 阅读剩余部分 -