python 同花顺和雪球同步
2023-09-27 14:21:31 时间
import re import time from pprint import pprint import pandas as pd import requests class Snowball: xq = 'https://xueqiu.com' # 雪球自选股列表相关json url = {'get': xq + '/v4/stock/portfolio/stocks.json', 'del': xq + '/stock/portfolio/delstock.json', 'add': xq + '/v4/stock/portfolio/addstock.json', 'modify': xq + '/v4/stock/portfolio/modifystocks.json'} # 默认cookie df_cookie = ('s=××××××; ' 'xq_a_token=×××××××××××××××××××××; ' 'xq_r_token=×××××××××××××××××××××; ' ) def __init__(self, uid, cookie=df_cookie): self.uid = uid # 用户页面如 https://xueqiu.com/××××××××× self.cookie = cookie # 操作列表需要该用户登录的cookie self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) ' 'Gecko/20100101 Firefox/56.0', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate, br', 'Referer': Snowball.xq + '/' + uid, 'Cookie': cookie, 'DNT': '1'} self.stocks = pd.DataFrame() # 雪球自选股清单 def get_stocks(self): # 获取雪球自选股列表 try: payload = {'size': 1000, 'tuid': self.uid, 'uid': self.uid, 'pid': -1, 'category': 2, 'type': 1} response = requests.get(Snowball.url['get'], params=payload, headers=self.headers, timeout=10) # pprint(response.content) self.stocks = pd.DataFrame(response.json()['stocks']) except Exception, e: print 'get_stocks @', self.uid, '; error:', e pprint(payload) pprint(self.headers) return False else: # pprint(self.stocks) return self.stocks def del_stock(self, code): # 在雪球删除指定代码的股票 try: payload = {'code': code} response = requests.post(Snowball.url['del'], data=payload, headers=self.headers, timeout=10) # pprint(response.content) response = response.json()['success'] if response == True: print 'del_stock', code, 'success.' else: print 'del_stock', code, 'failed.' except Exception, e: print 'del_stock', code, '@', self.uid, '; error:', e pprint(payload) pprint(self.headers) return False else: self.get_stocks() return response def add_stock(self, code): # 在雪球添加指定代码的股票 try: payload = {'symbol': code, 'category': 2, 'isnotice': 1} response = requests.post(Snowball.url['add'], data=payload, headers=self.headers, timeout=10) # pprint(response.content) response = response.json()['success'] if response == True: print 'add_stock', code, 'success.' else: print 'add_stock', code, 'failed.' except Exception, e: print 'add_stock', code, '@', self.uid, '; error:', e pprint(payload) pprint(self.headers) return False else: self.get_stocks() return response def modify_stocks(self, code_list=[]): # 雪球自选股列表排序 try: payload = {'pid': -1, 'type': 1, 'stocks': ','.join(code_list)} response = requests.post(Snowball.url['modify'], data=payload, headers=self.headers, timeout=10) # pprint(response.content) response = response.json()['success'] if response == True: print 'modify_stocks', code_list, 'success.' else: print 'modify_stocks', code_list, 'failed.' except Exception, e: print 'modify_stocks', code_list, '@', self.uid, '; error:', e pprint(payload) pprint(self.headers) return False else: self.get_stocks() return response class Tonghuashun: # 同花顺自选股列表相关 url = {'get': 'http://pop.10jqka.com.cn/getselfstockinfo.php', 'modify': 'http://stock.10jqka.com.cn/self.php'} def __init__(self, uid, cookie): self.uid = uid self.cookie = cookie # 该用户登录的cookie self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) ' 'Gecko/20100101 Firefox/56.0', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate', 'Referer': 'http://stock.10jqka.com.cn/my/zixuan.shtml', 'Cookie': cookie, 'DNT': '1'} self.stocks = pd.DataFrame() # 同花顺自选股清单 def get_stocks(self): # 获取同花顺自选股列表 try: payload = {'callback': 'callback' + str(int(time.time() * 1000))} response = requests.get(Tonghuashun.url['get'], params=payload, headers=self.headers, timeout=10) # pprint(response.content) self.stocks = pd.DataFrame(response.json()) except Exception, e: print 'get_stocks @', self.uid, '; error:', e pprint(payload) pprint(self.headers) return False else: # pprint(self.stocks) return self.stocks def modify_stock(self, code, method, pos='1'): # 更改同花顺自选股列表 # method: add 添加, del 删除, exc 排序 # pos: 排序用的序号, 从1开始 try: payload = {'add': {'stockcode': code, 'op': 'add'}, 'del': {'stockcode': code, 'op': 'del'}, 'exc': {'stockcode': code, 'op': 'exc', 'pos': pos, 'callback': 'callbacknew'} } # self.get_stocks() response = requests.get(Tonghuashun.url['modify'], params=payload[method], headers=self.headers, timeout=10) # pprint(response.content) response = response.content.decode('gbk') print 'modify_stocks', method, pos, code, response if response == u'修改自选股成功': response = True except Exception, e: print 'modify_stock', method, code, '@', self.uid, '; error:', e pprint(payload[method]) pprint(self.headers) return False else: self.get_stocks() return response
相关文章
- Python内置字典;dict ,set
- Python 项目-飞机大战_01.飞机大战-1
- Python调用VBA事件编程监控Excel
- Python 数据类型
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
- Google Earth Engine(python)——简化版的快速接入GEE的API(含案例分析)
- Python适合初学者或者0基础小白学习吗?学会可以赚钱?
- 122 python高级 - 同步的概念
- gyp ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- python windows时间同步工具
- Python——pip国内常用镜像
- 《Python密码学编程》——2.6 本书的文本换行
- 《贝叶斯思维:统计建模的Python学习法》一第1章 贝叶斯定理1.1 条件概率
- Python数据可视化 Pyecharts 制作 Overlap 层叠多图
- python中random模块求随机数
- python之FTP上传和下载
- python之range()函数、for-in循环和while循环
- Python 系统学习梳理_【All】
- <python数据挖掘入门与实战>代码