2019年9月21日 | 标签:

项目背景

个人理财购买了一些基金,希望能理性的安装止损和止盈进行一些交易

例如我购买的价格是1.2元,需要在上涨5%卖出 进行止盈,或者下跌5%就进行卖出进行止损,因为工作的关系没办法每天去看基金的价格,就算看了还要回想下是否到了需要卖出的时间 不是很智能

需求分析

需要制作一个工具,每天代替我去查看基金的价格,是否达到卖出价格,每周可以发一个周报给我,告诉我波动情况,和趋势(马上要接近止盈还是止损)

业务流程及原理

1,获取数据

  1. 可以通过google sheets的importxml函数,使用天天基金网作为数据源获取当天的预估(使用下午2点30的数据可以作为当天的交易价格,3点收盘),设置脚本定时器每天的下午2.30运行获取数据脚本

2,分析和整理数据

  1. 将获得的预估价格数据与设置的目标区间进行对比,同时吧数据记录在表格中,作为趋势图分析

3,报告数据

  1. 如果当天预估价格达到目标值,发送短信邮件通知进行买卖
  2. 如果一周已经结束,发送短信邮件汇报本周情况

分部图解过程

1,工具草稿界面设计制作

使用铅笔和纸,对工具的输入,输出,提醒,界面进行使用设计,创建一个google sheets 文档 画出草稿

涉及2大区域

输入信息

需要监控的基金的代码 必填,买入日期 选填(可能是不同天分段买入)买入单价(平均成本),买入金额,以及期望的止损和盈点,通知方法(邮件 ,短信),通知频率,通知内容模板

输出信息

基金目前的价格和浮动盈亏的每天记录的价格以及当天的2:30的和3:00的预估

2,在Google Sheets中实现上述界面的排版和基本美化

在实际的编码过程中发现同时要实现2个逻辑,既2点30检查数据的如果达到要提醒的价格则需要发布定制的邮件,还有一个逻辑是晚上11点30检查数据,如果满足周报和月报时间则发送邮件

本来想把这2个逻辑写一起,但是发现不容易排错和后期维护,于是就在界面和后台完全吧他们分开,用2个sheets来负责模块 交易提醒功能,其中一个sheet用来设置和收集数据,并进行简单加工,和保存数据,另外一个sheet用来编辑邮件模板这样的好处是可以把外发的数据和收集的数据分离开,同时也保留了本地的数据,为以后进行2次分析做了准备

如图所示raw data-notify表格,是设置数据和获取数据的表格,并且我需要每天

保存这个结果

数据抓取区

需要输入数据源的URL以及数据的基本信息

制定我要抓取的字段名称以及字段的代码和对应的Xpath

数据抓取结果区

使用xpath和函数importxml把3个字段给抓取下来,同时从另外的表格获得基金的最低和最高止盈点,并进行2次判断,使用ifs函数,来获得发的邮件的类型

数据保存区

将原始数据保存下来,这里主要是使用google scripts的sheets.getrange(‘b3’).getvalue() 和sheets.getrange(‘b3’).setvalue()

将获取的值保存在结果区(因为获取的值是通过公式获得 实时会变)

ss = SpreadsheetApp.getActiveSpreadsheet();

var sheet1 =ss.getSheetByName(”email-notify”)

kaiguan=sheet1.getRange(3,1).getValue()

方便以后调用和二次编辑

具体代码如下

该代码设置为每天2点30运行

她会吧获取的数据保存到数据保存区

主要是获取当前行数 然后再使用getrange(I,2)动态单元格地址进行赋值

而邮件发送功能也是单独的一个sheet如下

首先要确认这个邮件是否需要发送,以及发送的对象和内容

把这些参数传回到script即可完成

判断是否发送可以从之前的sheet里面由个判断执行来决定

发送的内容可以

发送的内容可以使用自定义模板并且加上一些变量,这些变量是从之前获取的数据得到,

把邮件模块单独独立出

后期修改方便,应该找个工具只有第一次需要访问这个google sheets设置,以后都是收到邮件,所以对邮件的需求修改需求是很多的。

这个dashboard表主要是用来设置基金的买入价格和提醒价格

周报月报功能

首先设置好需要抓取的数据

然后再进行判断

然后在保存数据

这里的判断需要分析当前周是否是周6(需要进行发周报了)

当前天是否是1号(需要发月报了)

然后把获取的区间数据进行判断

即可

最后结合报告输出即可

最终的报告模板和上面的交易提醒类似

代码也是类似

 https://docs.google.com/spreadsheets/d/12PDgyudS8yHLiHGTmxx17ezZJ-G6uxMCBP4dLMibFrg/edit?usp=sharing

 

免费短信智能提醒基金买卖价格-利用google sheets和139邮箱

项目背景

个人理财购买了一些基金,希望能理性的安装止损和止盈进行一些交易

例如我购买的价格是1.2元,需要在上涨5%卖出 进行止盈,或者下跌5%就进行卖出进行止损,因为工作的关系没办法每天去看基金的价格,就算看了还要回想下是否到了需要卖出的时间 不是很智能

需求分析

需要制作一个工具,每天代替我去查看基金的价格,是否达到卖出价格,每周可以发一个周报给我,告诉我波动情况,和趋势(马上要接近止盈还是止损)

业务流程及原理

1,获取数据

  1. 可以通过google sheets的importxml函数,使用天天基金网作为数据源获取当天的预估(使用下午2点30的数据可以作为当天的交易价格,3点收盘),设置脚本定时器每天的下午2.30运行获取数据脚本

2,分析和整理数据

  1. 将获得的预估价格数据与设置的目标区间进行对比,同时吧数据记录在表格中,作为趋势图分析

3,报告数据

  1. 如果当天预估价格达到目标值,发送短信邮件通知进行买卖
  2. 如果一周已经结束,发送短信邮件汇报本周情况

分部图解过程

1,工具草稿界面设计制作

使用铅笔和纸,对工具的输入,输出,提醒,界面进行使用设计,创建一个google sheets 文档 画出草稿

查看更多精彩图片

 

涉及2大区域

输入信息

需要监控的基金的代码 必填,买入日期 选填(可能是不同天分段买入)买入单价(平均成本),买入金额,以及期望的止损和盈点,通知方法(邮件 ,短信),通知频率,通知内容模板

输出信息

基金目前的价格和浮动盈亏的每天记录的价格以及当天的2:30的和3:00的预估

2,在Google Sheets中实现上述界面的排版和基本美化

在实际的编码过程中发现同时要实现2个逻辑,既2点30检查数据的如果达到要提醒的价格则需要发布定制的邮件,还有一个逻辑是晚上11点30检查数据,如果满足周报和月报时间则发送邮件

本来想把这2个逻辑写一起,但是发现不容易排错和后期维护,于是就在界面和后台完全吧他们分开,用2个sheets来负责模块 交易提醒功能,其中一个sheet用来设置和收集数据,并进行简单加工,和保存数据,另外一个sheet用来编辑邮件模板这样的好处是可以把外发的数据和收集的数据分离开,同时也保留了本地的数据,为以后进行2次分析做了准备

查看更多精彩图片

如图所示raw data-notify表格,是设置数据和获取数据的表格,并且我需要每天

保存这个结果

数据抓取区

需要输入数据源的URL以及数据的基本信息

制定我要抓取的字段名称以及字段的代码和对应的Xpath

数据抓取结果区

使用xpath和函数importxml把3个字段给抓取下来,同时从另外的表格获得基金的最低和最高止盈点,并进行2次判断,使用ifs函数,来获得发的邮件的类型

数据保存区

将原始数据保存下来,这里主要是使用google scripts的sheets.getrange(‘b3’).getvalue() 和sheets.getrange(‘b3’).setvalue()

将获取的值保存在结果区(因为获取的值是通过公式获得 实时会变)

ss = SpreadsheetApp.getActiveSpreadsheet();

var sheet1 =ss.getSheetByName(”email-notify”)

kaiguan=sheet1.getRange(3,1).getValue()

方便以后调用和二次编辑

具体代码如下

查看更多精彩图片

该代码设置为每天2点30运行

她会吧获取的数据保存到数据保存区

主要是获取当前行数 然后再使用getrange(I,2)动态单元格地址进行赋值

而邮件发送功能也是单独的一个sheet如下

 

查看更多精彩图片

首先要确认这个邮件是否需要发送,以及发送的对象和内容

把这些参数传回到script即可完成

判断是否发送可以从之前的sheet里面由个判断执行来决定

发送的内容可以

发送的内容可以使用自定义模板并且加上一些变量,这些变量是从之前获取的数据得到,

把邮件模块单独独立出

后期修改方便,应该找个工具只有第一次需要访问这个google sheets设置,以后都是收到邮件,所以对邮件的需求修改需求是很多的。

这个dashboard表主要是用来设置基金的买入价格和提醒价格

周报月报功能

首先设置好需要抓取的数据

然后再进行判断

然后在保存数据

这里的判断需要分析当前周是否是周6(需要进行发周报了)

当前天是否是1号(需要发月报了)

然后把获取的区间数据进行判断

即可

最后结合报告输出即可

最终的报告模板和上面的交易提醒类似

代码也是类似

 https://docs.google.com/spreadsheets/d/12PDgyudS8yHLiHGTmxx17ezZJ-G6uxMCBP4dLMibFrg/edit?usp=sharing

 

2019年9月15日 | 标签:

内容:

项目背景
有一个记账的网站,用来每天记录一些消费数据,这些数据其实是从支付宝后台下载后经过简单的整理
可以再输入到记账网站。
希望通过php脚本来实现填写表单的动作,完成对大量数据填写表单的自动处理
查看更多精彩图片
目前的问题:
运行环境问题,公司的电脑不能安装任何软件,所以无法安装php运行环境,需要找到一个绿色的php运行环境来执行php脚本
php具体代码问题,网站有的php脚本填写表单的例子都比较简单,这个涉及到的输入项目特别的多,并且一直出错没成功过
具体解决方案:
关于运行环境问题,我之前使用的quickphp 这个绿色软件,直接就可以运行,但是我发现他只能运行简单的post函数,关于curl比较高级的函数是不支持的,所以关于如何让quickphp能加上extention 这个思路大概研究了2个小时,期间尝试了下载dll文件,下载curl源文件,下载php.ini 最后均失败告终,然后调整思路,换一个绿色软件,最后找到了http://laragon.org 这个软件,它只有10M 但是可以运行apache php mysql所有环境 并且带有php许多库文件 支持高级函数库,可以替代quickphp,但是简单的程序我还是建议试试quickphp应该真的很小,就这样我解决了在公司不能安装程序的电脑上运行php环境 并且支持php高级函数的问题
接下来是解决实际脚本问题
首先分析网站 http://jz.u8see.com/account/ 在输入消费信息的时候 往服务器传递的是什么参数
因为涉及到cookie 所以也要把cookie值给复制下
然后就网上找到了对应的脚本
从chrome的分析工具可以看到 浏览器发出请求给http://jz.u8see.com/myaccount/expense/new/
并且使用的是POST方法
请求的头包含了很多信息,以及cooki值,并且表单信息也包含了很多

查看更多精彩图片

查看更多精彩图片

查看更多精彩图片
$url=”http://jz.u8see.com/myaccount/expense/new/”;
$url_cookie=’yourcookie’;
$headers = array();
$headers[] = ‘Content-Type: application/x-www-form-urlencoded’;
$post_data1 = array(
       “date” =>’2020-04-01’,
        “feetitle” => ‘xiangmu3’,
        “feenum” => 122,
        “feekindname” => ‘饮食’,
        “feekind” => 1
        );
$post_data1= http_build_query($post_data1);
$ch =curl_init();
//set post and header data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_COOKIE,$url_cookie);
//curl_setopt($ch,CURLOPT_POST,true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch,CURLOPT_HEADER,true);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data1); //$data是每个接口的json字符串
 //set post and header data
$content = curl_exec($ch);
查看更多精彩图片
以上是完整正确的代码
这里要说的是容易出错的地方也是花了4个多小时才明白的地方
第一点,post参数需要是字符串不能是数组
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data1)
这个函数的变量参数需要是字符串,不能是数组,所以我们如果是有数组需要使用
$post_data1= http_build_query($post_data1);
这个函数对数组进行urlencode编码
第2点在post的数组中直接使用中文,http_build_query能处理中文,不要使用已经encode的中文编码
这个问题比较隐蔽, 我之前在数组里面写 “feekindname” => ‘饮食’, 使用的是 “feekindname” => ‘%E9%A5%AE%E9%A3%9F’,
但是经过http_build_query函数后%这个字符会变成%25 然后整个参数就不再是饮食, 儿饮食这个参数是系统设定好的,你传回去不是这个值 就一定会出错,这个问题是我对所有字符串进行1 1比对才知道的
方法就是 复制下来chrome里面传递的所有的参数的 urlencode形式,然后再使用http_build_query对我们的参数进行编码
最后才知道这个坑
第3个问题就是因为我有2个账户进行测试,在a账户的cookie信息传递b账户的分类名称是不正确的, 因为我a账户可能不存在这个b账户的分类名,这个问题也是后来自己想通的, 所以还是需要对所有参数进行一一比对才知道问题
最后终结下 走过的弯路
使用php的curl进行post,变量需要是字符串,不能是数组,数组使用http_build_query变化,数组里面有中文的不要自作聪明先encode
项目背景
有一个记账的网站,用来每天记录一些消费数据,这些数据其实是从支付宝后台下载后经过简单的整理
可以再输入到记账网站。
希望通过php脚本来实现填写表单的动作,完成对大量数据填写表单的自动处理
查看更多精彩图片
目前的问题:
运行环境问题,公司的电脑不能安装任何软件,所以无法安装php运行环境,需要找到一个绿色的php运行环境来执行php脚本
php具体代码问题,网站有的php脚本填写表单的例子都比较简单,这个涉及到的输入项目特别的多,并且一直出错没成功过
具体解决方案:
关于运行环境问题,我之前使用的quickphp 这个绿色软件,直接就可以运行,但是我发现他只能运行简单的post函数,关于curl比较高级的函数是不支持的,所以关于如何让quickphp能加上extention 这个思路大概研究了2个小时,期间尝试了下载dll文件,下载curl源文件,下载php.ini 最后均失败告终,然后调整思路,换一个绿色软件,最后找到了http://laragon.org 这个软件,它只有10M 但是可以运行apache php mysql所有环境 并且带有php许多库文件 支持高级函数库,可以替代quickphp,但是简单的程序我还是建议试试quickphp应该真的很小,就这样我解决了在公司不能安装程序的电脑上运行php环境 并且支持php高级函数的问题
接下来是解决实际脚本问题
首先分析网站 http://jz.u8see.com/account/ 在输入消费信息的时候 往服务器传递的是什么参数
因为涉及到cookie 所以也要把cookie值给复制下
然后就网上找到了对应的脚本
从chrome的分析工具可以看到 浏览器发出请求给http://jz.u8see.com/myaccount/expense/new/
并且使用的是POST方法
请求的头包含了很多信息,以及cooki值,并且表单信息也包含了很多

查看更多精彩图片

查看更多精彩图片

查看更多精彩图片
$url=”http://jz.u8see.com/myaccount/expense/new/”;
$url_cookie=’yourcookie’;
$headers = array();
$headers[] = ‘Content-Type: application/x-www-form-urlencoded’;
$post_data1 = array(
       “date” =>’2020-04-01’,
        “feetitle” => ‘xiangmu3’,
        “feenum” => 122,
        “feekindname” => ‘饮食’,
        “feekind” => 1
        );
$post_data1= http_build_query($post_data1);
$ch =curl_init();
//set post and header data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_COOKIE,$url_cookie);
//curl_setopt($ch,CURLOPT_POST,true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch,CURLOPT_HEADER,true);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data1); //$data是每个接口的json字符串
 //set post and header data
$content = curl_exec($ch);
查看更多精彩图片
以上是完整正确的代码
这里要说的是容易出错的地方也是花了4个多小时才明白的地方
第一点,post参数需要是字符串不能是数组
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data1)
这个函数的变量参数需要是字符串,不能是数组,所以我们如果是有数组需要使用
$post_data1= http_build_query($post_data1);
这个函数对数组进行urlencode编码
第2点在post的数组中直接使用中文,http_build_query能处理中文,不要使用已经encode的中文编码
这个问题比较隐蔽, 我之前在数组里面写 “feekindname” => ‘饮食’, 使用的是 “feekindname” => ‘%E9%A5%AE%E9%A3%9F’,
但是经过http_build_query函数后%这个字符会变成%25 然后整个参数就不再是饮食, 儿饮食这个参数是系统设定好的,你传回去不是这个值 就一定会出错,这个问题是我对所有字符串进行1 1比对才知道的
方法就是 复制下来chrome里面传递的所有的参数的 urlencode形式,然后再使用http_build_query对我们的参数进行编码
最后才知道这个坑
第3个问题就是因为我有2个账户进行测试,在a账户的cookie信息传递b账户的分类名称是不正确的, 因为我a账户可能不存在这个b账户的分类名,这个问题也是后来自己想通的, 所以还是需要对所有参数进行一一比对才知道问题
最后终结下 走过的弯路
使用php的curl进行post,变量需要是字符串,不能是数组,数组使用http_build_query变化,数组里面有中文的不要自作聪明先encode
2019年9月7日 | 标签:

 

项目背景

公司使用公司邮箱注册谷歌账户,管理客户搜索广告的数据-通过工具google search ads 360(前身是DoubleClick for Search)和电子商务网站的数据-通过工具google analytics,这个公司账户的谷歌账户我称为A
但是公司政策 为了数据安全的原因 不允许员工将数据存储在谷歌账户A中的谷歌产品如google sheets中
所以我们这个账户A其实是一个阉割过的谷歌账户,没有谷歌的文档功能既没有google sheets和google document
但是谷歌发布了一个新产品 谷歌data studio 类似是大数据整合平台,她目前是免费的
然后它可以无缝衔接谷歌自己的产品,如google search ads 360,google analytics等
我们有时候需要做报告 会使用google search ads 360的自定义报告 我记为A1 也会用google analytics里面的自定义报告 我记为A2 功能,但是这样打开2个产品 下载2次, 借助这个google data studio产品我们可以全部整合到一个google data studio的大表中 我记为A3 可以加快我们处理数据的速度 , 既吧A1和A2的数据 放到A3中
但是实际工作中 还有一部分数据是需要用google sheets的 script通过api来获取 理论上这部分表为A4 也可以放到A3中,
因为这个阉割的账户的原因 我们无法在data stuido的表格中整合这部分数据
目标:
所以我们需要在A3中加入这部分缺少的 但是只能通过google sheet才能加入的数据
但是A账户又没有google sheet功能(是不是很绕,但是就是这么奇葩)
解决思路
创建了一个个人谷歌账户B,利用B账户中的google sheets 使用script功能获取api 既需要的数据 记为B1
然后把B账户中 使用data studio的产品创建B2,将google sheets的 B1的 数据 导入到B2
再将A账户中的data studio的A3(整合好A1 A2数据的大表),再分享给B账户的data studio中,再由 B来操作,复制自己拥有的B2数据(实际数据来自B1) 粘贴到A3 及大功告成
注意事项
之前花了3小时一直出错,是把B账户的data studio 表B2 给A账户,但是在A账户一直无法使用,后来才想到数据B2是属于B的所以只能由B来操作 在B账户的data stuido 中 将B2粘贴到A3,而不是在A账户data stuido 中操作,把B2粘贴到A3
及source data的表格的粘贴只能由数据拥有则给到别人 无法被别人复制到别的地方去
最后的示意图
如下

查看更多精彩图片

项目背景

公司使用公司邮箱注册谷歌账户,管理客户搜索广告的数据-通过工具google search ads 360(前身是DoubleClick for Search)和电子商务网站的数据-通过工具google analytics,这个公司账户的谷歌账户我称为A
但是公司政策 为了数据安全的原因 不允许员工将数据存储在谷歌账户A中的谷歌产品如google sheets中
所以我们这个账户A其实是一个阉割过的谷歌账户,没有谷歌的文档功能既没有google sheets和google document
但是谷歌发布了一个新产品 谷歌data studio 类似是大数据整合平台,她目前是免费的
然后它可以无缝衔接谷歌自己的产品,如google search ads 360,google analytics等
我们有时候需要做报告 会使用google search ads 360的自定义报告 我记为A1 也会用google analytics里面的自定义报告 我记为A2 功能,但是这样打开2个产品 下载2次, 借助这个google data studio产品我们可以全部整合到一个google data studio的大表中 我记为A3 可以加快我们处理数据的速度 , 既吧A1和A2的数据 放到A3中
但是实际工作中 还有一部分数据是需要用google sheets的 script通过api来获取 理论上这部分表为A4 也可以放到A3中,
因为这个阉割的账户的原因 我们无法在data stuido的表格中整合这部分数据
目标:
所以我们需要在A3中加入这部分缺少的 但是只能通过google sheet才能加入的数据
但是A账户又没有google sheet功能(是不是很绕,但是就是这么奇葩)
解决思路
创建了一个个人谷歌账户B,利用B账户中的google sheets 使用script功能获取api 既需要的数据 记为B1
然后把B账户中 使用data studio的产品创建B2,将google sheets的 B1的 数据 导入到B2
再将A账户中的data studio的A3(整合好A1 A2数据的大表),再分享给B账户的data studio中,再由 B来操作,复制自己拥有的B2数据(实际数据来自B1) 粘贴到A3 及大功告成
注意事项
之前花了3小时一直出错,是把B账户的data studio 表B2 给A账户,但是在A账户一直无法使用,后来才想到数据B2是属于B的所以只能由B来操作 在B账户的data stuido 中 将B2粘贴到A3,而不是在A账户data stuido 中操作,把B2粘贴到A3
及source data的表格的粘贴只能由数据拥有则给到别人 无法被别人复制到别的地方去
最后的示意图
如下
查看更多精彩图片