A Song of Python and Anaconda


  • Startseite

  • Archiv

  • Tags

沪牌拍牌的经验总结

Veröffentlicht am 2017-02-19

引言:因发现身边不少朋友亲戚都遇到了拍牌的问题,所以把个人经验分享出来,供参考。

1、由于政策因素,沪牌的拍牌近年来是一个艰巨的项目,以昨天最新一次的数据为例(如下图数据),则中标率为4.035%,而竞标人数有25万多,可想难度还是不小。

mark

2、下图是本人昨天中标的截图:

mark

3、拍牌介绍:

  • A)首先要了解下拍的相关规矩,每个月特定的一次周六,10点半到11点半,其中10点半到11点,首先竞价一次,表示你参拍,只要操作,一次100大洋是跑不了的。11点到11点半,由于出价只能在当前价的正负300范围提交,所以一般都是11点29分xx秒真正竞价,而这一分钟内,尤其是最后的几十秒,竞价比较激烈。而提交竞价后,还需要输入验证码,然后再提交数据到国拍网服务器。报价不成功(或低或高)就直接game over,如果在范围内,则排队看是否在名额内。

mark

  • B)由于验证码系统的存在,加上数据提交后的服务器响应时间的波动,这就造成了时间因素极其重要。

  • C)拍的方案:不计十点半报价,一般有2种方案,分别是:一次下单,单点伏击;或者一伏二补,2次报价。其中,后者需要输入2次验证码,加上最后一分钟的时间特别紧张,实战过程中,遇到第一次验证码卡顿,直接把时间卡没的情况,所以我后续统一都采用单点伏击的策略。那么就引伸出一些核心参数,多少秒的报价下,加价多少?多少秒必须提交下单数据?

4、统计数据,必要工作:

  • 我们可以在网上搜集历史数据,由于历史上,国拍的系统改版过几次,所以就参考2016年下半年到最近的数据即可。
    经过统计发现几个相对大概率策略,45s(s表示秒,后同)的时候,加价700~900这样的范围,成功率较高,当然,你也可以用40s,42s,48s等作为统计节点,属个人喜好。由于验证码的输入要2~3秒,加上服务器提交时间的随机性,一般下单参考价都控制在40多秒的范围。

  • 那么到底45s加700、800还是900呢,一共就300块的系统加价范围,还有不断变化的价格,这不是很蛋疼吗?实际上,真心没一个标准答案,但可以有一个参考答案,把统计数据往就近几个月的成功报价靠齐。比如这次我采用了45s+900的参数就是这么做的。

5、服务器时间的响应速度测试:
虽然网上有51沪牌网站提供的模拟测试,但实战的服务器响应时间,还是随机波动,也是业内观点。需要自己做一点统计工作,大致计算出本机的网络,到达国拍服务器的时间,尽可能把误差精确在0.5秒范围内。当然这个很有难度,因为本身的随机性,只能统计数据后采用一个大概率的值,然后依据此数据,来设定最迟提交报价时间。

6、既然谈到了服务器响应问题,那么网络因素自然也是要考虑。因为上海普遍都是50M或者100M光纤了。而后年,随着华为5G商用,到时候对大众来说,网速的影响应该会更小。但是,如果你能把电脑和国拍网服务器的节点数控制的非常小,那么你就可以相对往后的提交报价,以得到更加准确的靠近最后成交价的报价出来。

7、最后的总结:

  • 统计历史数据,得到报价方案。如45s+700~900。

  • 统计网速,得到最后提交报价的时间方案。

  • 适当去51沪牌练习,至少做到2~3s内解决验证码输入。

  • 适当去51沪牌,统计成功率,我当时做一百多次的模拟操作,不同的方案优化到了20~30%的概率,比系统4~5%总归是高了。但是模拟的只能参考。实际要打折。

  • 要考虑实战中更新的验证码问题,给你一个大招,11点28分的时候,做虚拟报价(只查看验证码,不提交报价),系统会跳出最新一次的验证码,如果和以往不同,你就多了一份优势,相信总有人遇到新验证码就蒙圈了。

  • 要考虑实战中,国拍服务器秒进数据和响应较大延迟的存在,秒进属小概率事件,因为最后一大票人下单,如果服务器承载能力有限,更大可能是出现一点数据提交卡顿。但卡多少秒,还是需要你的统计工作来评估一个优值。

  • 使用最大概率下单操作,这和如何交易,如何打麻将是一个道理。祝您拍牌顺利。

8、参考网站:

51沪牌模拟

atom精美的环境配置

Veröffentlicht am 2017-01-17

1、也是偶然看到别人发的配置界面很好看被惊讶就研究下,先贴自己配置好的2个界面以及别人的一个在atom下主程序区运行ipython的动图:

mark

mark

mark

2、测试环境:
分别测试了Ubuntu 16.10 和 Win系统。

3、安装插件的方法:

file—> setting—> install —> 输入关键词,根据package或者theme来搜。
一般package是第三方工具包,theme是软件界面的模版。以seti-ui的theme为例,找到后点install安装即可:

mark

4、配置步骤

  • a) 安装atom最新版,官网:https://atom.io/
  • b) 安装theme列表:
主题的:seti-ui

语法的: monokai
  • c) 安装package列表:

    打字特效: active-power-mode

    python补全: autocomplete-python

    终端显示: script

    背景图 : Editor Background

    jupyter(ipython): Hydrogen 以及 jupyter-notebook

5、 安装bug说明:
基本上Linux(如Ubuntu)下遇到问题很少,除了个别安装包需要翻墙以解决下载速度问题。
而在Win系统下则遇到了很多bug,逃不过安装VS相关,导致体积格外大,还未必能马上解决,在win下配置需要有一定的bug解决能力,或者也可以考虑放弃失败的插件 :)

6、翻墙
需要准备,否则个别安装包容易失败。

7、其他:每个安装包一般都能链接到官网有一定的说明。你也可以搜刮下有没有其他更好的。安装后一般有setting选项里面,如果没有发现setting,有2个情况,这个插件本身就没设置,或者安装不完整,会出现右上角弹窗报错。

8、参考资料:

某插件集合

hydrogen:使用Jupyter内核在Atom运行代码

bitmex的资金费率统计

Veröffentlicht am 2016-12-20

1、此资金费率是xbtusd特有的永续合约的展期利率,因为其api限制了500个数据,因此本文的评估代码用了500个数据。

2、代码:

import pandas as pd
import requests
import time



def get_bitmex_average_fee():
    bitmex_fee_link = "https://www.bitmex.com/api/v1/funding?symbol=XBTUSD&count=500&reverse=true"
    df1 = pd.read_json(bitmex_fee_link)
    sum = 0
    n = 500
    for i in range(n):
        fees = df1['fundingRateDaily'][i]
        print (fees)
        sum += fees

    average = sum / n
    return average


if __name__ == '__main__':
    average_fee = get_bitmex_average_fee()
    print ('***********************')
    print (average_fee)
    print ('***********************')

3、平均值的结果:

***********************
0.00076491
***********************

4、根据规则,xbtusd的空单可以获得大约日均万分之7+的费率,如果和其他多单对冲,可以获得类似外汇套息交易的收益。然而,由于币价绝对值的波动性可以很大,所以如果是选择bitmex和其他平台对冲,则承担了可能的一头爆仓风险。那么如果选择和bitmex的其他合约对冲,比如季度合约,因为季度本身存在溢价,导致开仓就承担了开头的亏损,假设-5.9% (按照今日的价差),而根据万分之7的平均日费率计算,年化在25%,扣除4个季度的浮亏-23.6%,没得搞,但是如果季度溢价在-3%范围,则还是有10%盈余(扣除了3%作为季度溢价的余量)。 不过他的maker和taker制度导致最好限价做maker才划算,不然开仓和平仓又要支付出去16*0.00075=1.2%的成本。

5、结论:

  1. 在bitmex本身季度溢价超过3个点以后,就操作意义不大,然而季度溢价是不确定因素,使得此方案流产的概率偏高。

  2. 跨平台操作需要严防价格宽幅波动,由于牵涉保证金交易,存在可能的爆仓风险,个人觉得只适合有相当实盘经验的人来操作,切记留好系统余量。

差价比对【Python】

Veröffentlicht am 2016-11-30

1、代码:

import pandas as pd
import requests
import time

def get_USDCNY():
    return requests.get('https://www.okcoin.com/api/v1/exchange_rate.do').json()['rate']

def get_bitmex_XBTZ16_askPrice():
    bitmex_quarter_link = "https://www.bitmex.com/api/v1/quote?symbol=XBTZ16&count=2&reverse=true"
    df1 = pd.read_json(bitmex_quarter_link)
    bitmex_XBTZ16_askPrice = df1['askPrice'][0]
    # bitmex_XBTZ16_askAmount = df1['askSize'][0]
    # print "bitmex_XBTZ16_askPrice:", bitmex_XBTZ16_askPrice
    # print "bitmex_XBTZ16_askAmount:", bitmex_XBTZ16_askAmount
    return bitmex_XBTZ16_askPrice

def get_okcoin_quarter_bidPrice():
    ok_quarter_link = "https://www.okcoin.com/api/v1/future_ticker.do?symbol=btc_usd&contract_type=quarter"
    df2 = pd.read_json(ok_quarter_link)
    ok_quarter_bidPrice = df2['ticker']['buy']
    # ok_quarter_bidAmount = df2['ticker'][0]
    # print "ok_quarter_bidPrice:", ok_quarter_bidPrice
    return ok_quarter_bidPrice



def get_okcoin_this_week_askPrice():
    ok_this_week_link = "https://www.okcoin.com/api/v1/future_ticker.do?symbol=btc_usd&contract_type=this_week"
    df2 = pd.read_json(ok_this_week_link)
    ok_this_week_askPrice = df2['ticker']['sell']
    # ok_quarter_bidAmount = df2['ticker'][0]
    # print "ok_quarter_bidPrice:", ok_quarter_bidPrice
    return ok_this_week_askPrice

def get_okcoin_next_week_askPrice():
    ok_next_week_link = "https://www.okcoin.com/api/v1/future_ticker.do?symbol=btc_usd&contract_type=next_week"
    df2 = pd.read_json(ok_next_week_link)
    ok_next_week_askPrice = df2['ticker']['sell']
    # ok_quarter_bidAmount = df2['ticker'][0]
    # print "ok_quarter_bidPrice:", ok_quarter_bidPrice
    return ok_next_week_askPrice

def get_okcoin_next_week_bidPrice():
    ok_next_week_link = "https://www.okcoin.com/api/v1/future_ticker.do?symbol=btc_usd&contract_type=next_week"
    df2 = pd.read_json(ok_next_week_link)
    ok_next_week_bidPrice = df2['ticker']['buy']
    # ok_quarter_bidAmount = df2['ticker'][0]
    # print "ok_quarter_bidPrice:", ok_quarter_bidPrice
    return ok_next_week_bidPrice

def get_okcoin_spot_askPrice():
    ok_spot_link = "https://www.okcoin.cn/api/v1/ticker.do?symbol=btc_cny"
    df2 = pd.read_json(ok_spot_link)
    ok_spot_askPrice = df2['ticker']['sell']
    # ok_quarter_bidAmount = df2['ticker'][0]
    # print "ok_quarter_bidPrice:", ok_quarter_bidPrice
    return ok_spot_askPrice



def quarter_price_gap():
    ok_quarter_bidPrice = get_okcoin_quarter_bidPrice()
    bitmex_XBTZ16_askPrice = get_bitmex_XBTZ16_askPrice()
    price_gap = (ok_quarter_bidPrice - bitmex_XBTZ16_askPrice) * get_USDCNY()
    return price_gap

def ok_this_week_VS_quarter_price_gap():
    ok_quarter_bidPrice = get_okcoin_quarter_bidPrice()
    ok_this_week_askPrice = get_okcoin_this_week_askPrice()
    price_gap = (ok_quarter_bidPrice - ok_this_week_askPrice) * get_USDCNY()
    return price_gap

def ok_spot_VS_quarter_price_gap():
    ok_quarter_bidPrice = get_okcoin_quarter_bidPrice()
    ok_spot_askPrice = get_okcoin_spot_askPrice()
    price_gap = (ok_quarter_bidPrice * get_USDCNY() - ok_spot_askPrice)
    return price_gap

def ok_this_week_VS_next_week_price_gap():
    ok_next_week_bidPrice = get_okcoin_next_week_bidPrice()
    ok_this_week_askPrice = get_okcoin_this_week_askPrice()
    price_gap = (ok_next_week_bidPrice  - ok_this_week_askPrice)* get_USDCNY()
    return price_gap

def ok_spot_VS_next_week_price_gap():
    ok_spot_askPrice = get_okcoin_spot_askPrice()
    ok_next_week_bidPrice = get_okcoin_next_week_bidPrice()
    price_gap = (ok_next_week_bidPrice * get_USDCNY() - ok_spot_askPrice)
    return price_gap

def ok_next_week_VS_quarter_price_gap():
    ok_quarter_bidPrice = get_okcoin_quarter_bidPrice()
    ok_next_week_askPrice = get_okcoin_next_week_askPrice()
    price_gap = (ok_quarter_bidPrice - ok_next_week_askPrice ) * get_USDCNY()
    return price_gap



if __name__ == '__main__':
    while 1:
        print ("======================================================")
        print ("ok_quarter VS bitmex quarter:", quarter_price_gap())
        print ("ok_this_week VS ok_quarter:", ok_this_week_VS_quarter_price_gap())
        print ("ok_spot VS ok_quarter:", ok_spot_VS_quarter_price_gap())
        print ("ok_this_week VS ok_next_week:", ok_this_week_VS_next_week_price_gap())
        print ("ok_spot VS ok_next_week:", ok_spot_VS_next_week_price_gap())
        print ('ok_next_week VS ok_quarter:', ok_next_week_VS_quarter_price_gap())
        print ("======================================================")
        time.sleep(2)

mark
mark

PS: 图是另一个数据比对程序,仅供参考。

如何优雅的编写微信公众号

Veröffentlicht am 2016-11-21

微信富文本的硬伤

在微信公众号的编辑发布过程中,有一些很不方便的地方,如:

  • 个人倾向用七牛云上传图片,并用一键操作工具mpic,而不想额外单独一张张上传到微信后台。另假设同时想把图文发到个人博客和微信公众号,就要博客端和公众号端分别各自上传图片,而对比用mpic得到超链接,让博客和公众号引用即可。显然,后者要方便的多。

  • 从A公众号的编辑模式,全文复制到B公众号编辑模式,出现了图片的说明文字不按照预期格式排列的问题,用哪种对齐方式都不符合预期。后来干脆重新编辑全文。

  • 微信使用富文本编辑模式,而现在国际流行的markdown编辑模式,后者在编辑方面,要方便的多的多。

  • 网络流行的一些微信公众号编辑器,比如135等,这个算口碑好的,但个人体验感一般,为何呢? 他们是一个标题、一个段落、一个引言这样的用样式模板插入内容,不仅如此还有排版问题。总之,对比markdown风格,体验感就不甚好。也许你说135编辑器有vip的“一键排版”功能,但是还是有排版问题的,因为它没那么智能。

  • 还有一些细节上,比如微信后台的右键选粘贴,明明有这个选项,点了之后它非要弹窗让你用热键ctrl+V来操作等等。这对于那些鼠标党情何以堪。

以上种种因素,使得最初在我申请了微信公众号之后,从喜到忧的感受大致可以用这个图形容:

思路:从markdown过渡到富文本

从上面的分析看出,编辑采用markdown模式,而公众号的发布只能是富文本模式,那么剩下就是如何优雅的解决从markdown到富文本的过渡?

方案1:

采用浏览器插件 【markdown here】?? 这是一些网友得到的解决方案,但我实测有一个明显的问题,那就针对超链接图片,在微信公众号预览是有的,但发送到手机就没有了。额外测试了下,如果要让图片显示,你要在编辑模式把全文复制,再全文删除,然后重新粘贴一次,再保存,再预览(或发布)才显示图片,但这你能忍?这个坑爹的问题,是微信公众号必须要把外部的超链接经过css渲染之后才能发挥作用。

方案2:

利用脚本程序来调整CSS,但这牵涉代码修改,比如说,有一个方案提到:【花 1 天时间,学会如何写一个简单包含 replacements 函数的 Python 脚本】。以个人经验,如果对从没接触python语言的朋友真想一天内解决,是相当有难度的,故不展开。

方案3:

你想,无非是要让微信后台识别CSS渲染,而很多markdown编辑器自带了HTML预览功能,里面就有CSS渲染,这样,就实现了超链接图片的加载,然后全部复制后粘贴到微信公众号正文编辑区域,就ok了。 以MarkdownPad 2 为例,F6自动HTML预览到本地。

总结

本文讨论了用markdown来编辑微信公众号的方法。就网上搜集的方案进行了分析,并建议使用方案3,简洁有效。
如果只是简单的文字+图的方式,可轻松实现。当然,并不能指望靠这个就制作很精美的公众号,只是就方便性和实用性上做一些讨论。总体的逻辑顺序为:

A)用MarkdownPad编辑

B)编辑完毕后使用F6功能实现HTML的CSS渲染

C)复制到微信公众号编辑区

D)此时,如果还需要增加一些东西,可再结合135编辑器等锦上添花(因为可能MarkdownPad没有那些功能)

E)预览或者发布

工具列表 ,基于Win系统

  1. MarkdownPad : http://markdownpad.com/

  2. 图片上传Mpic: http://mpic.lzhaofu.cn

  3. 七牛云图床: http://www.qiniu.com/

参考资料

  1. 在微信公众平台上用 Markdown 写作
  2. Markdown懒办法排版微信公众号文章

其他

另如果有专职做公众号的朋友,也欢迎分享你的制作心得。 :)

Ubuntu Kylin 16.10 下使用Keras和DDPG玩赛车游戏的学习

Veröffentlicht am 2016-10-26

1、今天正好看到Kylin的Ubuntu V16.10,就试装了下,界面还是挺漂亮的,风格有点接近Win系统,内置了中文输入法。

2、后看到一篇使用Keras和DDPG玩赛车游戏的文章,有点高大上,所以学习下。

3、环境搭建

  • 先配置py3的虚拟环境,因为默认是py2的,也保留,总有一定时间需要用到。

    python3 -m venv test
    source test/bin/activate

  • 安装 OpenCV 3.1.0 ,具体参考以下网址:

http://blog.topspeedsnail.com/archives/4755

Atom 一款编辑神器 A hackable text editor for the 21st Century

Veröffentlicht am 2016-10-25

1、今天偶然看到一个atom的动图打字效果,好流弊,所以研究了下。

上手简单,让Atom能够成为了一款优雅而低门槛的神器,深度可定制的特性,让Atom在你的打磨之下,变得越来越符合你的心意。因此,无论你是用来写作,还是用来写代码,这都是一款你值得拥有的神器。

在代码编辑器、文本编辑器领域,有着不少的「神器」级的产品,如历史悠久的 VIM、Emacs 以及如今当红的 SublimeText。另外还有 VS Code、EditPlus、NotePad++、UltraEdit 等一大堆流行的利器,可谓百家争鸣。

然而,作为目前全球范围内影响力最大的代码仓库/开源社区,GitHub 的程序员们并不满足于此。他们使用目前最先进流行的技术重新打造了一款称为“属于21世纪”的代码编辑器——Atom, 它开源免费跨平台,并且整合 GIT 并提供类似 SublimeText 的包管理功能,支持插件扩展,可配置性非常高……

Atom就已经集齐了所有优势于一身,
免费 + 高颜值 + 简单易学 + 功能强大 + 可以调教 + 可以整容 + 轻量级 + 性能卓越… …

好吧,吹了这么多,其实他还是有个不足的地方就是速度相对慢,这和他的设计原理有关,但相对测试版,目前的1.x版已经快了不少,另外基于他是github出品,也就算值得拥有了。

tips:小技巧,下图的setting快键是Ctrl+逗号 会比较有用。另由于系统默认是隐藏了菜单栏,只需要按Alt即可恢复, 可以在setting—core—-auto hide manu bar 里设置,去掉打钩即可。

2、极客学院已经提供了较好的教程,但大部分关于前端:

http://wiki.jikexueyuan.com/project/atom/

3、基础的中文指导,不错的:

https://atom-china.org/t/atom/62

4、 当前推荐的的插件表(python为主):

  • activate-power-mode /叼炸天的特效
  • autocomplete-clang / c,c++代码补全
  • autocomplete-python /python代码补全
  • emmet /前端神器
  • git-plus /用于做git的,但是我觉得还是命令行轻松点
  • python-tools /先装着
  • script / 可以根据文件名称,或所选的代码块,或行号执行代码,支持大多数编程语言,
  • terminal-plus /可以使用控制台,基本能用这个那就可以直接运行c和python等代码了
  • vim-mode  /vim最好的插件.

5、安装故障:
即便翻墙状态,在atom安装script依然失败,就一直是进度条,好在可以本地安装,
参考:

http://jingyan.baidu.com/article/375c8e19c3105a25f2a22901.html

不过还是不能运行script,这导致一个简单的python脚本一直不能运作。但是看了报错信息,都是js什么的,这前端的就头大了,谷歌的某方案,牵引到了gpp的插件,但是依赖第三方的第三方且只支持py2,这。。。。总之,一下又掉入了win系统的大坑。

然后第二天换了个电脑,发现script能正常install,而且脚本运行正常,没有报错。这表明,系统正常的时候,Win下是能跑起来的。

经过进一步比对,发现在win10机子上,虽然用人工安装的apm install方法,在atom看上去安装了script,但是因为在cmd shell里,显示一直卡在apm install界面,也就是说,他实际上是一个不完全安装!!,这也是atom的部分插件目前对win系统的支持并不好。

6、中文显示问题:

ʵʱ�����ǣ� [‘A����:68599071’, ‘B����:30591580’, ‘C����:73945539’]

使用script插件的Ctrl + Shift + B 运行某脚本,出现乱码。

7、Linux的安装总体顺利,可参考:

  • http://www.linuxdiyf.com/linux/14731.html
  • http://www.wzjg520.com/2015/09/04/%E8%A7%A3%E5%86%B3atom%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98/

8、基于atom当前版本的系统选择建议:

就python代码的测试来说,建议使用Linux或者mac,这是因为Win下的相同安装步骤,总是遇到最多的bug。比如中文显示,

而在ubuntu 16.04中,完全一样的安装,中文显示很很ok,对比win下的中文是乱码,网上的方案测试了几个都没成功解决(暂时)。

9、其他参考:

  • Atom:优雅迷人的编辑神器

  • 写代码没激情怎么办?atom教你酷炫掉咋天

  • Github开源编辑器Atom常用插件及安装方法

  • http://blog.csdn.net/mduanfire/article/details/50278591

如何优雅的在Win系统建立自己的SS5实现轻松快速翻墙【2】-24小时运行-自动更新密码

Veröffentlicht am 2016-10-22

神之力量击穿叹息之墙

1、首先,请参考我的上一个帖子,实现了Win下的SS【快速】翻墙,如果没有SS,要翻墙都要忍受蜗牛速度。为SS的原版牛逼作者十万个赞,也要为翻版作者以及iss网站一万个赞。但是有个小问题,因为源头的SS账号每隔6小时变更,因此总是需要人工更新密码,那么如何把他做成自动更新?

2、方案,爬虫捕捉新密码+重写json加载。

3、细节分析:

用lxml代替了bs4,数据部分也变更修改,可能原作者写的时候网站数据模式和如今的不同,另增加了一些函数。

如下图,因为iss变更的是密码,因此爬虫也抓密码就好,比较简单

4、代码,关于json部分请看参考资料部分:

# -*- coding: utf-8 -*-
# python 3.5.2
# 测试系统,Win10
# Author:Van
# 实现SS5本机自动更新密码,争取24小时保持连接
# 实际做不到24小时,因为iss网站的密码的变更有一定时间的延迟
# 所以最好能有其他的SS源头网站
# V1.0
# 欢迎各种改进意见
# 请把对应的帐号密码修改成自己的
# 请把SS软件的路径改成自己的


import requests, json, os, copy, time
from lxml import etree
import smtplib
from email.mime.text import MIMEText
from email.header import Header

TIME_GAP = 300
CONFIG_DIR = 'E:\\迅雷下载\\ShadowsocksR-win-3.7.4.1\\gui-config.json'

oldPwdList = []

def modify_json(pwd):
    with open(CONFIG_DIR,'r') as f:
        data = json.loads(f.read())
        for index, rawPwd in enumerate(pwd):
            data['configs'][index]['password'] = rawPwd.split(':')[-1]
    data = json.dumps(data)
    print(data)
    with open(CONFIG_DIR,'w') as f:
        f.write(data)

def check_update():
    url = 'http://www.ishadowsocks.org'
    html = requests.get(url).content.decode('utf-8', 'replace')
    pwd = etree.HTML(html).xpath('//*[@id="free"]/div/div[2]//h4[3]/text()')
    print('实时密码是:', pwd)

    if not pwd or oldPwdList == pwd:
        return pwd, False
    else:
        return pwd, True

def send_email(htm):
    # send email to notice new WestWorld is coming
    sender = 'xxxxxx@163.com'
    receiver = 'xxxxxx@qq.com,xxxxxx@163.com'
    subject = 'SS5密码有更新!'
    smtpserver = 'smtp.163.com'
    username = 'xxxxxx@163.com'
    password = 'xxxxxx'
    msg = MIMEText(htm, 'html', 'utf-8')
    msg['Subject'] = Header(subject, 'UTF-8')
    msg['From'] = sender
    msg['To'] = ','.join(receiver)
    smtp = smtplib.SMTP()
    smtp.connect(smtpserver)
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

if __name__ == '__main__':
    pwd, update = check_update()
    while 1:
        if update:
            print('password changed, will update!')
            modify_json(pwd)
            oldPwdList = pwd
            print('新的临时密码是:', oldPwdList)
            try:
                send_email(str(pwd))
            except Exception as e:
                print("email failed:", e)
        pwd, update = check_update()
        time.sleep(TIME_GAP)

5、测试结果:
通过5分钟一次取密码,重点观察iss站在更换密码的时候,有以下特点:

  • 比如18点换密码,老密码回马上失效,但新密码不是马上更新到网站,导致有一段时间的真空期
  • 同时,这段时间,读取的密码出现了波动,不过总体影响不算太大。

6、SS 资源站点列表:

  • http://www.ishadowsocks.org/
  • http://freevpnss.cc/

7、参考资料:

  • 用python实现shadowsocks密码自动更新
  • python3 cookbook
  • JSON概述以及PYTHON对JSON的相关操作

8、安卓手机测试了类似方案,也是通过的,其实更简单,都不需要设置浏览器。

9、特别感谢

LittleCoder 帮忙修正了bug,美化了代码。

10、github库:

https://github.com/vansnowpea/shadowsocks-24hr-atuo-by-python

如何优雅的在Win系统建立自己的SS5实现轻松快速翻墙【1】

Veröffentlicht am 2016-10-22

叹息之墙

1、写这个帖子实在是无奈导致,以前都是用的其他翻墙工具,毕竟win下一点EXE就实现了,但是最近速度越来越慢有的失效,导致在安装itchatmp的时候,一开始搞了2个小时都没完全安装上所有的包。每当因为这些墙导致的时间浪费,想想一生中,被ZF莫名消耗了那么多的时间,真的是悲剧,所以总结此贴。

2、首先方案是: ss+ chrome+ switchyomega

3、什么是ss? shadowsock,中文名影梭,SS有多牛,相对市面绝大多数vpn,速度快,github的star数量超过一万!由于太流弊,最近几天原始代码,作者被迫删除,至于为何,你懂的。

4、switchyomega 是开源的一个代理切换工具。可以在谷歌的扩展商店搜索得到,也可以通过其github的官方连接得到。

5、总体教程,由于原始SS代码已经删除,此文引用另一版本:

电脑端下载 shadowscoks(最新版下载链接),打开后开始配置,第一步选择 “编辑服务器”

6、使用以下网址的免费SS,右上角免费ss,注意,帐号信息6小时更新:如果你有其他更好的SS资源,欢迎分享。

http://www.ishadowsocks.org/

7、把服务器信息对应填写:

8、选择PAC,点击更新本地PAC为GFWList,如下图,并启用系统代理,会出现打勾:

9、此时应该能访问谷歌应用商店了,搜索:switchyomega,第一个就是,作者 FelisCatus,此作品github的star数量5K+,同时给出其地址: https://github.com/FelisCatus/SwitchyOmega/releases。

10、配置switchyomega,代理协议Sock5,代理服务器:127.0.0.1,代理端口1080:

11、测试,打开youtube,ok!星爷的《逃学威龙》,加载的时候略有卡,但总体速度不错哦。

12、Linux下的配置可参考老高的博客:

https://blog.phpgao.com/shadowsocks_on_linux.html

13、本文方案同样可延伸到QQ浏览器,但如果你使用的是Firexfox,则插件可用AutoProxy,亲测可用。

14、免责申明:

此方法请用于个人科学查阅资料和个人娱乐所用,请遵相关法律,本文不承担任何因此造成的事故影响。

阿里云ECS建立微信公众号----以itchatmp为例【python】

Veröffentlicht am 2016-10-21

阿里云ECS建立微信公众号—-以itchatmp为例

1、由于近期发现itchat开源项目要升级到itchatmp , 所以考虑下把自己的阿里云ECS利用起来,不然有点浪费了。

2、首先熟悉下flask的hello world实现,把这段代码放到ECS上:

#encoding:utf8
from flask import Flask, render_template

app = Flask(__name__)
@app.route('/')
def hello_world():
    content = 'Hello World!'
    return render_template('hello.html', content = content)

if __name__ == '__main__':
    app.run('0.0.0.0')

其中:@app.route(‘/‘) 是定义的路由,表示对应网址的根目录。
然后在本机输入ECS的ip加上端口5000,应该就能看到hello world了。

3、

flask的 中文文档资料: http://dormousehole.readthedocs.io/en/latest/

flask的基础视频参考: http://www.jikexueyuan.com/course/943.html

4、 以itchatmp为例:

首先根据itchatmp的github网址: https://github.com/littlecodersh/itchatmp

下载到本地,然后

pip install itchatmp

在这个过程中,很可能安装失败,是因为墙的因素,建议开启翻墙工具

在安装好之后,把对应的示范脚本,根据你的微信订阅号的相关参数进行修改:

import itchatmp

itchatmp.update_config(itchatmp.WechatConfig(
    token='xxxxxxxxxx',
    appId = 'xxxxxxxxxx',
    appSecret = 'xxxxxxxxxx'))

@itchatmp.msg_register(itchatmp.content.TEXT)
def text_reply(msg):
    return msg['content']

itchatmp.run()

5、然后到微信订阅号的后台,把url部分,修改成你的ECS的ip。

6、运行一个形如weixinchat.py的脚本,把上述代码复制,并运行。一切顺利的话,你的订阅号就工作了,此时,他的默认功能是,当你输入信息后,订阅号自动回复相同内容。

7、本文案例是在Win10,Win NT 2008下都测试通过,

8、如果你需要一些Linux相关的参考资料,如下:

  • 阿里云ECS搭建微信公众平台
  • 微信公众平台接入初探
  • 在 Ubuntu 上使用 Nginx 部署 Flask 应用
  • 微信公众平台开发(免费云BAE+高效优雅的Python+网站开放的API)
12…8
Van

Van

71 Artikel
© 2017 Van
Erstellt mit Hexo
Theme - NexT.Muse