由于公司的系统用的是Java版本,开通了企业号打卡之后又没有预算让供应商做数据对接,所以只能自己捣鼓这个,以下是个人设置的一些内容,仅供大家参考

安装python

python的安装,这里就不详细写了,大家可自行度娘或google。

安装第三方库

python安装好之后别忘记配置环境变量!另外,所以的内容都是安装在服务器上的,且服务器需要能够上外网,否则,只能配置在本地,因为需要外网连接微信企业号的接口。这里需要用到几个第三方库:

python的pip命令,一般python安装好之后都会默认有,如果不确定,可输入命令查询,通过cmd进入命令提示符,输入

pip list

如果提示你需要更新,你可以更新,也可以不更新,更新命令其实给到你了python -m pip install --upgrade pip

安装所需要的库

Step.1

pip install pymssql

如果安装pymssql出错,提示什么visual C++ 14,则先安装wheel,如不报错则忽略step2、step3

Step.2

pip install wheel

Step.3

下载pymssql-2.1.4.dev5-cp37-cp37m-win_amd64.whl

可去这里下载最新版本的。pymssql下载

下载好之后,进入该文件所在的目录,通过pip install安装即可cd D:\

pip install pymssql-2.1.4.dev5-cp37-cp37m-win_amd64.whl

step.4

pip install requests

至此,所有第三方库都配置好了。

写主程序

# !/usr/bin/python

# -*- coding:utf-8 -*-

# @Time: 2018/7/26 16:05

# @Author: hychen.cc

import json # 因微信企业号返回的格式为json,所以引入json

import requests

import pymssql

import math # 引入数学方法

import time

import datetime

server = 'XX.XX.XX.XX' # 数据库服务器地址

user = 'sa' # 数据库登录名,可以用sa

password = '******' # 数据库用户对应的密码

dbName = 'DBNAME' # 数据库名称

CORP_ID = 'XXXXXX' # 微信企业号提供的CORP_ID

CORP_SECRET = 'XXXXX' # 微信企业号提供的CORP_SECRET

"""

因微信接口所需要unix时间戳,所以需要把时间转为为Unix时间戳格式

定义时间转换为Unix时间方法

"""def datetime_timestamp(dt):

# dt为字符串

# 中间过程,一般都需要将字符串转化为时间数组

time.strptime(dt, '%Y-%m-%d %H:%M:%S')

## time.struct_time(tm_year=2018, tm_mon=10, tm_mday=25, tm_hour=10, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=88, tm_isdst=-1)

# 将"2018-10-25 10:00:00"转化为时间戳

s = time.mktime(time.strptime(dt, '%Y-%m-%d %H:%M:%S'))

return int(s)

# 定义连接数据库方法

def get_link_server():

connection = pymssql.connect(server, user, password, database=dbName)

if connection:

return connection

else:

raise ValueError('Connect DBServer failed.')

"""

定义获取用户列表,因为微信企业号一次最大只能获取100个,所以需要转换为列表格式,分批次获取

我这里设置是从DB中获取有权限微信打卡的人员(Select * From Table),换成自己的方式即可

"""

def get_userid_list():

"""

获取用户列表

:return:

"""

conn = get_link_server()

cursor = conn.cursor()

sql = "Select * From Table"

cursor.execute(sql)

row = cursor.fetchone()

userlist = []

while row:

userlist.append(row[0])

row = cursor.fetchone()

if userlist:

return userlist

else:

raise ValueError('Get Userlist failed.')

conn.close()

"""

获取Access_Token,因为Token有时效(2小时),所以需要存在本地,这样不需要频繁调用,所以我定义了存储过程(sP_GetWX_access_token)来判断之前存储的token是否有效,有效的话就不需要重复获取了

"""

def get_access_token(refresh=False):

"""

获取Access Token

:return:

"""

if not refresh:

API_ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s" % (

CORP_ID, CORP_SECRET)

response = requests.get(API_ACCESS_TOKEN_URL, verify=False)

if response.status_code == 200:

rep_dict = json.loads(response.text)

errcode = rep_dict.get('errcode')

if errcode:

raise ValueError('Get wechat Access Token failed, errcode=%s.' % errcode)

else:

access_token = rep_dict.get('access_token')

if access_token:

conn = get_link_server()

cursor = conn.cursor()

cursor.execute('exec sP_GetWX_access_token @Access_Token=%s', access_token)

conn.commit()

conn.close()

return access_token

else:

raise ValueError('Get wechat Access Token failed.')

else:

raise ValueError('Get wechat Access Token failed.')

else:

conn = get_link_server()

cursor = conn.cursor()

cursor.execute("Select Access_Token From wx_AccessToken Where ID=1")

access_token = cursor.fetchone()

if access_token:

return access_token[0]

conn.close()

else:

API_ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s" % (

CORP_ID, CORP_SECRET)

response = requests.get(API_ACCESS_TOKEN_URL, verify=False)

if response.status_code == 200:

rep_dict = json.loads(response.text)

errcode = rep_dict.get('errcode')

if errcode:

raise ValueError('Get wechat Access Token failed, errcode=%s.' % errcode)

else:

access_token = rep_dict.get('access_token')

if access_token:

conn = get_link_server()

cursor = conn.cursor()

cursor.execute('exec sP_GetWX_access_token @Access_Token=%s', access_token)

conn.commit()

conn.close()

return access_token

else:

raise ValueError('Get wechat Access Token failed.')

else:

raise ValueError('Get wechat Access Token failed.')

# 获取微信打卡的json格式

def get_punchcard_info(access_token, opencheckindatatype, starttime, endtime, useridlist):

API_PUNCH_CARD_URL = 'https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata?access_token=' + access_token

json_str = json.dumps(

{'opencheckindatatype': opencheckindatatype, 'starttime': starttime, 'endtime': endtime, 'useridlist': useridlist})

response = requests.post(API_PUNCH_CARD_URL, data=json_str, verify=False)

if response.status_code == 200:

rep_dic = json.loads(response.text)

errcode = rep_dic.get('errcode')

if errcode == 42001:

access_token = get_access_token(True)

API_PUNCH_CARD_URL = 'https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata?access_token=' + access_token

json_str = json.dumps(

{'opencheckindatatype': opencheckindatatype, 'starttime': starttime, 'endtime': endtime,

'useridlist': useridlist})

response = requests.post(API_PUNCH_CARD_URL, data=json_str, verify=False)

rep_dic = json.loads(response.text)

errcode = rep_dic.get('errcode')

if errcode:

raise ValueError('Get punch data failed1, errcode=%s' % errcode)

else:

value_str = rep_dic.get('checkindata')

if value_str:

return value_str

else:

raise ValueError('Get punch data failed2.')

elif errcode:

raise ValueError ('Get punch data failed3, errcode=%s' % errcode)

else:

value_str = rep_dic.get('checkindata')

if value_str:

return value_str

else:

raise ValueError('I do not find employee punch data.')

else:

raise ValueError ('Get punch data failed5.')

# 调用接口,获得数据

if __name__ == '__main__':

today = datetime.date.today()

oneday = datetime.timedelta(days=3) # days,即获取几天内的

yesterday = today - oneday

starttime = datetime_timestamp(yesterday.strftime('%Y-%m-%d') + ' 00:00:00')

endtime = datetime_timestamp(today.strftime('%Y-%m-%d') + ' 23:59:59')

opencheckindatatype = 3

access_token = get_access_token()

if access_token:

useridlist = get_userid_list()

if useridlist:

step = 100

total = len(useridlist)

n = math.ceil(total/step)

for i in range(n):

# print (useridlist[i*step:(i+1)*step])

punch_card = get_punchcard_info(access_token, opencheckindatatype, starttime, endtime,useridlist[i*step:(i+1)*step])

# print (punch_card)

if punch_card:

conn = get_link_server()

cursor = conn.cursor()

for dic_obj in punch_card:

cursor.execute('exec sp_AnalysisPunchCard @Json=%s',

(json.dumps(dic_obj, ensure_ascii=False)))

# print((json.dumps(dic_obj, ensure_ascii=False))),sp_AnalysisPunchCard把获取到的数据解析后存入数据库中

conn.commit()

conn.close()

print ('Get punch card successed.')

else:

raise ValueError('No userlist exists')

设置Windows计划任务

通过控制面板-管理工具-任务计划程序,右击选择创建基本任务,这里注意的是路径和程序。

程序或脚本:python.exe

添加参数(可选)(A):你的py文件目录

起始于:python目录,如果不知道python安装到哪去了,按照下列cmd命令,输入python后进入python命令查询

import sys

sys.prefix,回车

到此,配置完成,可自行右击任务-执行查询效果,或者通过python命令执行py文件

进入到py文件目录

python xxx.py

总结

以上所述是小编给大家介绍的python获取微信企业号打卡数据并生成windows计划任务,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本文标题: python获取微信企业号打卡数据并生成windows计划任务

本文地址: http://www.cppcns.com/jiaoben/python/258084.html

python 打卡程序_python获取微信企业号打卡数据并生成windows计划任务相关推荐

  1. 利用python获取微信企业号打卡数据,并生成windows计划任务

    利用python获取微信企业号打卡数据,并生成windows计划任务 安装python 安装第三方库 写主程序 设置Windows计划任务 由于公司的系统用的是Java版本,开通了企业号打卡之后又没有 ...

  2. python分配红包程序_Python版微信红包分配算法

    Python版微信红包分配算法 发布于 2015-05-08 10:54:23 | 151 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向对象.解释型计算机 ...

  3. python qq群文件_python 获取qq群成员列表数据

    #!/usr/bin/python # -*- coding: utf-8 -*- import re import time import xlsxwriter from selenium impo ...

  4. Python爬虫系列之爬取微信公众号新闻数据

    Python爬虫系列之爬取微信公众号新闻数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学习交流 ...

  5. uni-app利用uniCloud获取微信步数并将数据写入数据库

    uni-app利用uniCloud获取微信步数并将数据写入数据库 本项目依赖了uni-id 只是毕业设计,想法不完善,没有对用户授权失败做处理,如果编写的时候需要注意 第一步:调用wx.login() ...

  6. 微信小程序python解析获取用户手机号_python获取微信小程序openid及用户信息

    填坑记录:1.个人微信公众订阅号是不能申请微信认证的.公众号的类型在注册时一旦选择就不能更改,微信公众号认证的功能除个人订阅号外,都可以申请认证,因而个人订阅号不能申请认证.这句话的意思就是个人订阅号 ...

  7. python微信好友_python 获取微信好友列表的方法(微信web)

    如下所示: import urllib import urllib2 import os import time import re import cookielib import xml.dom.m ...

  8. python判断性别的源代码_Python 获取微信好友地区、性别、签名信息并将结果可视化...

    序言 我之前在CSDN博客上分享过两篇有关 itchat库的教程, 本篇博客是itchat库系列的第三篇文章,它主要实现的功能是获取微信好友地区.性别.签名信息并将结果可视化 正文 根据itchat库 ...

  9. python购物记录程序_python ATM购物程序

    )),即调用dbapi模块中的load_data_from_db方法来展示用户信息 4.定义login函数,输入用户名和密码 (1).调用user_exists,判断用户是否存在,不存在则使用comm ...

最新文章

  1. c语言写程序计算表达式的值,C语言 写的 表达式求值。
  2. Golang函数,包笔记
  3. Fantageek翻译系列之《使用Autolayout显示变化高度的UITableViewCell》
  4. codeforces-148D-Bag of mice-概率DP
  5. 哪些是计算机应用基金,计算机应用的基金有哪些
  6. Android之——自己定义TextView
  7. 51CTO网友感谢信:昨天以940分的成绩顺利通过NE考试 在此特地感谢网工泡泡
  8. mysql 中like怎么用_mysql中like怎么用?
  9. linux 字幕制作工具,Arctime for Linux免费字幕软件
  10. 20个开源的工业设计软件
  11. 虚幻浏览器插件 播放视频
  12. 进程同步与互斥——吸烟者问题源码实现(cigarette smoker’s problem)
  13. theos tweak导入自定义类
  14. linux下格式化SD卡
  15. 【1】使用分类学习APP - Classification Learner App 训练分类模型
  16. linux iio 设备驱动,Linux设备驱动之IIO子系统——IIO框架数据读取,linuxiio
  17. python 小于号和大于号同时使用
  18. windows下,基于python3的wxpython体验+cxfreeze6.0使用
  19. c语言程序设计迷宫问题,C语言迷宫问题
  20. java计时器脚本_在倒数计时器脚本中跳过很多秒

热门文章

  1. iOS 苹果企业账号申请流程,流水式申请步骤
  2. 用C++写一个自己的QQ(九、界面交互)
  3. MBTI职业性格测试(Psytopic特别版) 1
  4. 解决百度云网盘下载卡,慢的问题
  5. 配AR HUD 上汽大众ID4X光荷4X售价25万内
  6. GBK 汉字内码扩展规范编码表(二)
  7. 在筛选试管受精胚胎方面_AI(人工智能)比胚胎学家更靠谱
  8. 2021牛客多校9 A Math Challenge(类欧几里得算法+自然数幂前缀和)
  9. 能在一台电脑上装好系统,然后把硬盘换到另外一台电脑上用吗?
  10. 使用kubeadm配置kubernetes(v1.17.4)环境