股票小工具-超預(yù)期研報列表

1.獲取東方財富研報列表中屬于超預(yù)期的研報
2.郵件發(fā)送

import requests
import re
import json
import smtplib
from jinja2 import Environment, FileSystemLoader
from email.mime.text import MIMEText
from email.utils import formataddr
from retrying import retry
import schedule
import time
import tushare as ts


SendedList = []  # 已發(fā)送列表

# base params
base_url = 'http://datainterface.eastmoney.com//EM_DataCenter/js.aspx'
base_cookie = 'emstat_bc_emcount=37889085062188945262; st_pvi=34681393574450; _ga=GA1.2.1970903645.1486349341; HAList=a-sz-002362-%u6C49%u738B%u79D1%u6280%2Ca-sz-000807-%u4E91%u94DD%u80A1%u4EFD%2Ca-sz-300288-%u6717%u739B%u4FE1%u606F%2Ca-sz-300466-%u8D5B%u6469%u7535%u6C14%2Ca-sh-600996-%u8D35%u5E7F%u7F51%u7EDC%2Ca-sz-000713-%u4E30%u4E50%u79CD%u4E1A; em_hq_fls=old; emstat_ss_emcount=3_1511216938_603191144; qgqp_b_id=5033d538a451b91de2b58f645b83b1f6; st_si=81586899525171'
base_headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept - Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'max-age=0',
    'Connection': 'Keep-Alive',
    'Host': 'datainterface.eastmoney.com',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}


def getstockgains(stockcode, start, end):
    df = ts.get_hist_data(stockcode, start, end)
    return df

# 郵件發(fā)送


@retry
def mail(msgcontent):
    ret = True
    try:
        msg = MIMEText(msgcontent, 'html', 'utf-8')
        # 括號里的對應(yīng)發(fā)件人郵箱昵稱、發(fā)件人郵箱賬號
        msg['From'] = formataddr(["From平凡啊菜", my_sender])
        # 括號里的對應(yīng)收件人郵箱昵稱、收件人郵箱賬號
        msg['To'] = formataddr(["平凡啊菜", recipients[0]])
        msg['Subject'] = "研報超預(yù)期列表"  # 郵件的主題,也可以說是標(biāo)題

        server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 發(fā)件人郵箱中的SMTP服務(wù)器,端口是25
        server.login(my_sender, my_pass)  # 括號中對應(yīng)的是發(fā)件人郵箱賬號、郵箱密碼
        # 括號中對應(yīng)的是發(fā)件人郵箱賬號、收件人郵箱賬號、發(fā)送郵件
        server.sendmail(
            my_sender, recipients[0], msg.as_string())
        server.quit()
    except Exception:
        ret = False
    return ret


@retry
def getReportData(mp):
    base_params = {'type': 'SR', 'sty': 'GGSR',
                   'js': 'var allResult={"data":[(x)],"pages":"(pc)","update":"(ud)","count":"(count)"}', 'ps': 50,
                   'p': mp, 'mkt': 0, 'stat': 0, 'cmd': 2, 'code': '', 'rt': 50436030}
    s = requests.Session()
    rval = s.get(base_url, params=base_params, timeout=300)
    # print(rval.text)
    if rval.status_code == 200:
        # print('請求結(jié)果:%s' % rval.text)
        match = re.search(r'allResult={(.+)}', rval.text)
        # print('match:%s' % match)
        reportinfo = ''
        if match:
            reportinfo = str(match.group(1))
            # print('reportinfo:%s' % reportinfo)
        reportinfo = '{' + reportinfo + '}'
        # print(reportinfo)
        decodejson = json.loads(reportinfo)
        # print('json:%s' % decodejson)
        return decodejson


def filterbestreports():
    # print('do filter best reports job.')
    filterlist = []
    pages = 2
    mindex = 1
    while mindex <= pages:
        reports = getReportData(mindex)
        pages = int(reports['pages'])
        for item in reports['data']:
            # print(item)
            if str(item['title']).find('超預(yù)期') != -1:
                if item in SendedList:
                    # print('sendedlist find:%s' % item)
                    continue
                filterlist.append(item)
                print('代碼:%s,名稱:%s,研報:%s,機(jī)構(gòu):%s,日期:%s' % (item['secuFullCode'], item[
                      'secuName'], item['title'], item['insName'], item['datetime']))
        mindex = mindex + 1
        # print('搜索到第%s/%s頁' % (mindex, pages))
    if len(filterlist) != 0:
        env = Environment(loader=FileSystemLoader('template'))
        email_temp = env.get_template('eastmoney_reports.html')
        html = email_temp.render(results=filterlist)
        success = mail(html)
        if success:
            SendedList.extend(filterlist)


def main():
    filterbestreports()
    schedule.every(1800).seconds.do(filterbestreports)
    while True:
        schedule.run_pending()
        time.sleep(1)


if __name__ == '__main__':
    my_sender = 'xxxx@qq.com'  # 發(fā)件人郵箱賬號
    my_pass = ''  # 發(fā)件人郵箱授權(quán)碼
    # 收件人郵箱賬號
    recipients = ['xxx@qq.com', 'xxxx@qq.com']
    main()

強(qiáng)烈推薦文章:
2020年4月至6月凈利潤斷層實戰(zhàn)小結(jié)-真香~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 時間:2014年6月2日(3日寫)主題:行動派? 從改變你的玩具做起講師:麥肯娜·波普(14歲)地址:http:/...
    元元閱讀 359評論 0 1
  • 1 打牌這事,在我們家頗有點傳統(tǒng)。從爺爺奶奶輩開始,就人人會打。就連我奶奶,一個農(nóng)村老太太,三十幾年前就學(xué)會了打麻...
    Coco寧波閱讀 1,085評論 7 7
  • 今年8月初次接觸易效能并完成了2天課程+90天踐行。在剛上完課后我也遇上了小美并把她帶回家了。小美個子小但本事大。...
    JackieVan閱讀 267評論 0 1
  • 看到這個題目的時候,才想起很久以來冷落了你,已經(jīng)很久沒有和你說說話了。你也在我面前抱怨,但我不以為然。 不知不覺中...
    魚團(tuán)長閱讀 212評論 0 0

友情鏈接更多精彩內(nèi)容