Tushare-完美的大数据开放社区

使用Tushare获取与分析A股历史数据
本文介绍了如何利用Tushare数据平台获取和分析A股历史数据。首先,通过注册并设置Tushare API,可以获取当前上市股票的基本信息,包括股票代码、名称、地区、行业等。接着,通过循环遍历日期,获取每日股票交易数据,包括开盘价、收盘价等关键指标,便于后续行业和板块的深入分析。Tushare还提供了复权数据和更多高级功能,是一个强大的金融数据获取工具。

阿灵屯米亭最近想review一下A股的历史数据,来判断江湖上的各种传言,such as红三兵,波浪理论等等,所以就找到了Tushare,发现这个数据平台(Tushare大数据社区)真的是完美。个人tushare ID:461716。提供了非常丰富的数据接口。

 然后就开始了我们的获取数据之路,接下来简单介绍一下如何获取相关的股票数据。

首先需要一个账户,直接注册,学生可完成认证后免费使用数据接口。这里先接上设置一下,code如下:

import tushare as ts
import pandas as pd

ts.set_token('0ec2e266d6d28e8e208ca83d3fc23c73f6202353da6a89ce602221a2') ###仅第一次设置需要,在个人设置内可以看到
pro = ts.pro_api()

然后需要获取当前在上市的股票列表:

data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,market,list_date')

这里就有非常丰富的信息了,如下:

ts_codesymbolnameareaindustrymarketlist_date
000001.SZ000001平安银行深圳银行主板19910403
000002.SZ000002万科A深圳全国地产主板19910129
000004.SZ000004国华网安深圳软件服务主板19910114
000005.SZ000005ST星源深圳环境保护主板19901210
000006.SZ000006深振业A深圳区域地产主板19920427

这样方便我们后续分行业,板块等进行分析。

接下来就是获取每日的股票数据:

columns_name_none=['ts_code', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close','change', 'pct_chg', 'vol', 'amount']
all_stock_price_data=pd.DataFrame(columns=columns_name_none)
for i in pd.period_range("20160914", "20210824", freq="D"):
    day=str(i)
    day=day.replace('-','')
    print(day)
    # all_stock_price_data=pd.concat(all_stock_price_data,pd.DataFrame(pro.daily(trade_date=day)))
    all_stock_price_data=all_stock_price_data.append(pro.daily(trade_date=day))

由于数据很多,可以设置时间,相关获取的参数详见:

Tushare大数据社区

如果想要复权数据也有近3-4年的:

Tushare大数据社区

获取完数据就可以随意分析啦,完美社区!

<think>我们正在处理一个关于配置钉钉机器人推送Tushare新闻快讯的请求。用户需要Python示例代码。根据用户需求,我们需要完成以下步骤:1.创建一个钉钉群机器人,获取其Webhook地址。2.使用Tushare获取新闻快讯数据。3.将获取的新闻快讯通过钉钉机器人推送到钉钉群。注意:Tushare是一个金融大数据开放社区,需要注册获取token。钉钉机器人需要创建并获取webhook。步骤分解:第一步:创建钉钉机器人-在钉钉群中,进入群设置>智能群助手>添加机器人>自定义机器人,设置安全方式(例如加签或关键字),获取webhook地址。第二步:安装必要的Python库-tushare:用于获取金融数据-requests:用于发送HTTP请求到钉钉机器人第三步:编写代码-使用Tushare获取新闻快讯(例如使用`tushare.news`接口)-构建钉钉机器人消息格式(通常为markdown或text)-通过requests发送消息到钉钉机器人的webhook考虑到Tushare的新闻快讯接口可能返回多条新闻,我们可以选择最新的一条或者多条进行推送。代码结构:1.设置Tushare的token(需要用户自己注册获取)2.设置钉钉机器人的webhook地址(用户创建机器人后得到)3.Tushare获取新闻快讯数据4.格式化新闻数据为钉钉消息5.发送请求注意:钉钉机器人安全设置,如果设置了加签,需要生成签名。如果设置了关键字,则消息中必须包含关键字。假设我们使用关键字安全设置,比如关键字设置为“新闻”,那么我们的消息中必须包含“新闻”这个词。我们以markdown格式发送消息,这样可以使消息更美观。示例代码:注意:以下代码需要替换tushare_token和钉钉机器人的webhook_url,以及根据钉钉机器人的安全设置调整(例如加签或关键字)。由于用户要求的是新闻快讯,我们使用Tushare的新闻接口:`tushare.news`(注意:Tushare的接口权限可能需要一定的积分,新闻快讯接口可能为`news`或者`general_news`,具体请参考Tushare官网文档。这里假设我们使用`news`接口,但实际上Tushare的新闻接口可能是`new_sina`等,请根据实际情况调整。)根据Tushare官方文档,获取新闻快讯的接口是`news`(需要5000积分),如果没有权限可以使用`new_sina`(新浪财经新闻,需要2000积分)。但考虑到用户可能没有高积分,我们可以使用免费接口,例如`news`接口的免费版本可能有限制,或者使用其他免费新闻源。但是用户明确要求Tushare,所以我们假设用户有相应的积分。由于Tushare接口权限问题,这里我们使用`new_sina`接口(免费用户也可以使用,但需要2000积分)作为示例。如果没有积分,用户可能无法使用,但我们可以提供示例代码。如果用户没有积分,可以考虑使用其他免费新闻源,但用户指定了Tushare,所以我们还是用Tushare。因此,我们需要先安装tushare库:`pipinstalltushare`另外,钉钉机器人消息格式参考:-文本类型:{"msgtype":"text","text":{"content":"内容"}}-markdown类型:{"msgtype":"markdown","markdown":{"title":"标题","text":"markdown内容"}}这里我们使用markdown格式,可以显示标题和内容。步骤:1.导入必要的库2.设置tusharetoken并初始化pro接口3.获取新闻数据(这里取最新的10条)4.构建钉钉消息(将新闻标题和内容格式化)5.发送到钉钉机器人注意:钉钉机器人如果设置了关键字,则消息中必须包含关键字,比如我们可以在消息开头加上“新闻”二字。另外,钉钉机器人如果设置了加签,则需要计算签名。这里假设用户设置了关键字,所以不需要加签。如果用户设置的是加签,则需要按照钉钉文档计算签名并添加到webhookurl上。加签方式:把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。由于用户可能选择不同的安全设置,我们这里先以关键字设置为例。如果用户使用加签,我们将提供加签的代码(但用户问题中没有明确,我们先按关键字处理,然后提供加签的扩展说明)。代码示例:注意:以下代码中的`DINGTALK_WEBHOOK`需要替换为用户的钉钉机器人Webhook地址,`TUSHARE_TOKEN`需要替换为用户的Tusharetoken。</think>### 配置钉钉机器人推送Tushare新闻快讯的Python实现 以下是完整的Python示例代码,用于通过钉钉机器人推送Tushare新闻快讯: ```python import requests import tushare as ts import time import json import hashlib import base64 import hmac from urllib.parse import quote_plus class DingTalkNewsBot: def __init__(self, tushare_token, dingtalk_webhook, dingtalk_secret=None): """ 初始化机器人 :param tushare_token: Tushare API token :param dingtalk_webhook: 钉钉机器人Webhook地址 :param dingtalk_secret: 钉钉机器人加签密钥(可选) """ self.tushare_token = tushare_token self.dingtalk_webhook = dingtalk_webhook self.dingtalk_secret = dingtalk_secret ts.set_token(self.tushare_token) def _get_tushare_news(self, max_news=5): """获取Tushare最新财经新闻""" pro = ts.pro_api() try: # 获取最新财经新闻 (可根据需要调整新闻类型) df = pro.news(src='sina', start_date='', end_date='', fields='title, content, pub_time') # 按发布时间倒序排序 df = df.sort_values('pub_time', ascending=False).head(max_news) return df.to_dict('records') except Exception as e: print(f"获取新闻失败: {str(e)}") return [] def _sign_dingtalk_url(self): """生成钉钉加签URL""" if not self.dingtalk_secret: return self.dingtalk_webhook timestamp = str(round(time.time() * 1000)) secret_enc = self.dingtalk_secret.encode('utf-8') string_to_sign = f"{timestamp}\n{self.dingtalk_secret}" string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = quote_plus(base64.b64encode(hmac_code)) return f"{self.dingtalk_webhook}&timestamp={timestamp}&sign={sign}" def _format_news_message(self, news): """格式化新闻为钉钉消息""" news_list = [] for item in news: # 简化和清理新闻内容 content = item['content'][:200] + '...' if len(item['content']) > 200 else item['content'] news_list.append(f"### {item['title']}\n" f"**发布时间**: {item['pub_time']}\n" f"**内容**: {content}\n" "---") markdown_text = "#### 📰 最新财经快讯\n" + "\n".join(news_list) return { "msgtype": "markdown", "markdown": { "title": "Tushare财经新闻", "text": markdown_text }, "at": { "isAtAll": False # 不@所有人 } } def send_news_to_dingtalk(self): """获取新闻并推送到钉钉""" news = self._get_tushare_news() if not news: print("未获取到新闻数据") return False message = self._format_news_message(news) signed_url = self._sign_dingtalk_url() try: headers = {'Content-Type': 'application/json'} response = requests.post( url=signed_url, headers=headers, data=json.dumps(message) ) result = response.json() if result.get('errcode') == 0: print(f"成功发送{len(news)}条新闻到钉钉") return True else: print(f"发送失败: {result.get('errmsg')}") return False except Exception as e: print(f"请求钉钉API失败: {str(e)}") return False # ===== 使用示例 ===== if __name__ == "__main__": # 配置参数 (替换为实际值) TUSHARE_TOKEN = "你的Tushare Token" # 从tushare.pro官网获取 DINGTALK_WEBHOOK = "你的钉钉机器人Webhook地址" DINGTALK_SECRET = "你的钉钉机器人加签密钥" # 可选 # 创建机器人实例 bot = DingTalkNewsBot( tushare_token=TUSHARE_TOKEN, dingtalk_webhook=DINGTALK_WEBHOOK, dingtalk_secret=DINGTALK_SECRET ) # 发送新闻 bot.send_news_to_dingtalk() ``` ### 配置步骤说明 1. **获取Tushare Token** - 访问 [Tushare官网](https://tushare.pro/) 注册账号 - 在个人中心获取API Token(积分不足时部分数据受限) 2. **创建钉钉机器人** - 在钉钉群 > 群设置 > 智能群助手 > 添加机器人 - 选择"自定义机器人" - 设置机器人名称和安全设置(建议使用"加签") - 复制生成的Webhook地址和加签密钥 3. **安装依赖包** ```bash pip install requests tushare ``` 4. **运行程序** - 将代码中的参数替换为实际值 - 直接运行脚本或设置定时任务(如cron或Windows计划任务) ### 关键功能说明 1. **安全签名机制** - 使用HMAC-SHA256算法生成请求签名 - 符合钉钉机器人安全要求 - 计算公式:$ \text{sign} = \text{base64}(\text{hmac\_sha256}(timestamp + "\n" + secret)) $ 2. **新闻数据处理** - 自动获取新浪财经最新新闻 - 支持多新闻源(通过`src`参数切换) - 内容截断处理防止消息过长 3. **消息格式化** - 使用Markdown格式增强可读性 - 包含标题/时间/内容核心信息 - 支持@指定人员功能 ### 定时推送建议 使用系统定时任务实现自动推送(示例为Linux cron): ```bash # 每天上午9点和下午3点推送 0 9,15 * * * /usr/bin/python3 /path/to/your_script.py ``` ### 注意事项 1. Tushare免费账号每日调用次数有限(200次/日) 2. 钉钉机器人消息频率限制:不超过20条/分钟 3. 新闻内容需符合钉钉平台规范 4. 加签方式比关键字方式更安全,推荐使用 > 提示:完整实现需替换代码中的`你的Tushare Token`、`你的钉钉机器人Webhook地址`和`你的钉钉机器人加签密钥`为实际值[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值