同花顺自选和雪球同步--测试 python 实现

t 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

 

posted @ 2022-03-22 21:30  锐洋智能  阅读(719)  评论(0编辑  收藏  举报