• 同花顺和雪球同步--测试


    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
    

      

  • 相关阅读:
    Idea 2017的激活方式
    Hash校验
    释放自己
    不再等待
    常用数据结构及类
    My Construct
    西安商洛之行
    delphi locate多字段查询
    对于沟通的理解
    My Interface
  • 原文地址:https://www.cnblogs.com/xiaohengheng/p/7656063.html
Copyright © 2020-2023  润新知