环境:Ubuntu via linux deploy

物理机:小米2s

Python相关库:json、re、requests、time、signal(requests库需要下载,包名大概是”python3-requests“)

做这个东西的原因无他:Chromium内核太吃内存了,就想看个数字,并不想被网站花里胡哨的界面吃掉我太多电脑资源,有个小窗口定期看看就可以了。

基本功能的实现

CSDN有位博主:austin_he2020,他给出了Python获取基金实时估值的大致实现原理,主要是API的调用。

但实际测试跑起来,并不能解放双手,而是在想看估值的时候就要去执行这段python文件;甚至我们想查询其他基金还需要将python文件打开更改,这很难受。本着懒是科技进步的动力原则,要对代码进行丰富,以达到期望的效果:在cmd用ssh连接到linuxdeploy,然后只执行一次python文件就可以滚动更新。所以我在austin_he2020的代码基础上略微做了一点修改。


使基本功能更好用

为了实现自动更新,我想到了利用死循环来让估值自动更新(没想到死循环用处还挺大的),将austin_he2020的部分代码整个放进while循环中。设计初期我使用了time库的time.sleep()函数,效果非常好。可以自己设置秒数,每隔这些秒更新一次,如果不使用”Ctrl+C“,那么就会不停的更新,初步实现了想要的功能。


使之前的成果能适用于更多的人

然而,基友们(是真的基友,玩基金的朋友)手里肯定不止一只鸡,所以想到如果在滚动更新中可以随时改变想查看的基金,岂不美哉?然后,我就在网上一顿搜罗。果不其然,找到了中断的功能,相关库为signal同时利用异常处理

原理是设置一个信号时钟函数,函数内所设置的依然是秒数,然后使用try+except(这里还没学到,大致有点像if+else)分两种情况判断。

try下我们用input函数来获取后续输入,然后使用continue直接开始下一次循环。

except下我们使用print来提示计时已到,等待下次滚动更新后再输入,然后依然用continue直接开始下一次循环(其实except已经是循环体最后一句了,但是为了以防万一,防止不能继续循环,用continue保险一些


至此,我们实现以下——

1.获取基金实时估值及昨日收盘净值等数据
2.实现了定时滚动更新
3.实现了在滚动更新过程中,随时可以更改为获取其他基金实时估值等信息
4.查询次数及查询时间显示

理财有风险,投资需谨慎!希望大家好好上班,天天发财!


代码实现:

import json
import re
import requests
import time
import signal
class OverTime(Exception):
    pass
def interrupted(signum, frame):
    raise OverTime

count=0
cod = input("基金代码:")
iTime = input("每隔多少秒刷新?")
i=int(iTime)
while True:
    count+=1
    code = str(cod)
    url = 'http://fundgz.1234567.com.cn/js/%s.js' % code
    result = requests.get(url)  # 发送请求
    data = json.loads(re.match(".*?({.*}).*", result.text, re.S).group(1))
    print('##############基金详情##############')
    print('基金编码:%s' % data['fundcode'])
    print('基金名称:%s' % data['name'])
    print('单位净值:%s' % data['dwjz'])
    print('净值日期:%s' % data['jzrq'])
    print('估算值:%s' % data['gsz'])
    print('估算增量:%s%%' % data['gszzl'])
    print('估值时间:%s' % data['gztime'])
    print ("###时间戳###:",time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    print("###查询次数###",count)
    print('\n')
    signal.signal(signal.SIGALRM, interrupted)
    signal.alarm(i)
    try:
        cod = input('请在%i秒内输入基金代码:' % i)
    except OverTime:
        print('\n超时,请等待下次输入')
        print('\n')
        continue
    signal.alarm(0)  # 读到输入的话重置信号
    print('\n')
    continue
    #time.sleep(120) 等待120秒继续循环(此为出版功能实现代码)

实现效果:

1.png

2.png

引用

austin_he2020python获取基金实时估值的基本功能

原文链接:https://blog.csdn.net/austin_he2020/article/details/107793202

标签: Python, 基金, linux

添加新评论