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
没有评论 (108 views)
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的表格的粘贴只能由数据拥有则给到别人 无法被别人复制到别的地方去
最后的示意图
如下
查看更多精彩图片
没有评论 (138 views)
2019年9月5日 | 标签:

今天花了4个小时 本来有代码都没问题

但是就是报错
{“header”:{“desc”:”system failure”,”failures”:[{“code”:8606,
始终无法解决这个 8606的错误
百度搜索了下贴吧的人
也无法解决
又去看官方说明
我看了下百度的错误代码说明
8606 系统内部错误。API服务器系统升级时,或系统问题时会出现此错误。建议等待10分钟后重试。如仍有错误,请反馈给API小组。
还不得其解
我都对我的excel失去信心了
然后我会去看了下google sheet是没问题的可以选择成功
$data='{
    “header”: {
        “token”: “xxxxxxxx”,
        “username”: “xxxxx”,
        “password”: “xxxxxxx”
    },
    “body”: {
        “realTimeRequestType”: {
            “startDate”:”2019/04/29 12:00:00″,
            “endDate”:”2019/05/05 12:00:00″,
            “unitOfTime”:8,
            “reportType”:2,
            “levelOfDetails”:2,
             “statIds”:null,
            “performanceData”:[“impression”,”click”,”cost”]
        }
    }
}’;
然后我又猜是编码格式问题
又去找了下urlencode代码但是没用
我又想是不是证书的为
又去找了很多大牛的证书的解决方法 还是无法解决
又去使用json工具去看post的数据格式是否正确
始终无法解决
最后我想到我之前写过php代码
于是我把同样的问题放到php代码去允许(之前php代码都可以正常运行 并且排除了encode问题以及hhttp证书问题)
但是神奇的是php的代码也是报同样的错
我百思不得琪姐
然后我就想到百度有官方的php代码库
我一个个去比对
然后发现原因百度的关于
日期的参数啊
需要带时间。。。
必须是
yyyy-mm-dd hh-mm-ss
这样的
我也是服气了
既报告开始时间 不能是”2019/05/05″
必须是”2019/05/05 12:00:00″,
最后解决
总结解决问题的思路
遇到问题首先找报错代码
之前是json格式的问题 所以要我就使用json格式验证工具 跨过第一道坎
然后是猜测是编码问题,于是找到ulrcode编码 但是发现提示账户密码错误,所以不是中文的问题
然后就是不可描述的问题
这里我猜测的其他原因如 ssl证书等都无法验证 我就应该换到之前学习的php代码去解决(之前php已经解决了类似的问题)
所以当一条路走不通 就看看别的路 并且这条路可以排除你当前路的所有可能性
然后才发现 php也碰到问题  正式否定了所有可能
最后再想到有代码库案例 去找百度的官方包 才看到这个大坑

今天花了4个小时 本来有代码都没问题

但是就是报错
{“header”:{“desc”:”system failure”,”failures”:[{“code”:8606,
始终无法解决这个 8606的错误
百度搜索了下贴吧的人
也无法解决
又去看官方说明
我看了下百度的错误代码说明
8606  器系统升级时,或系统问题时会出现此错误。建议等待10分钟后重试。如仍有错误,请反馈给API小组。
还不得其解
我都对我的excel失去信心了
然后我会去看了下google sheet是没问题的可以选择成功
$data='{
    “header”: {
        “token”: “xxxxxxxx”,
        “username”: “xxxxx”,
        “password”: “xxxxxxx”
    },
    “body”: {
        “realTimeRequestType”: {
            “startDate”:”2019/04/29 12:00:00″,
            “endDate”:”2019/05/05 12:00:00″,
            “unitOfTime”:8,
            “reportType”:2,
            “levelOfDetails”:2,
             “statIds”:null,
            “performanceData”:[“impression”,”click”,”cost”]
        }
    }
}’;
然后我又猜是编码格式问题
又去找了下urlencode代码但是没用
我又想是不是证书的为
又去找了很多大牛的证书的解决方法 还是无法解决
又去使用json工具去看post的数据格式是否正确
始终无法解决
最后我想到我之前写过php代码
于是我把同样的问题放到php代码去允许(之前php代码都可以正常运行 并且排除了encode问题以及hhttp证书问题)
但是神奇的是php的代码也是报同样的错
我百思不得琪姐
然后我就想到百度有官方的php代码库
我一个个去比对
然后发现原因百度的关于
日期的参数啊
需要带时间。。。
必须是
yyyy-mm-dd hh-mm-ss
这样的
我也是服气了
既报告开始时间 不能是”2019/05/05″
必须是”2019/05/05 12:00:00″,
最后解决
总结解决问题的思路
遇到问题首先找报错代码
之前是json格式的问题 所以要我就使用json格式验证工具 跨过第一道坎
然后是猜测是编码问题,于是找到ulrcode编码 但是发现提示账户密码错误,所以不是中文的问题
然后就是不可描述的问题
这里我猜测的其他原因如 ssl证书等都无法验证 我就应该换到之前学习的php代码去解决(之前php已经解决了类似的问题)
所以当一条路走不通 就看看别的路 并且这条路可以排除你当前路的所有可能性
然后才发现 php也碰到问题  正式否定了所有可能
最后再想到有代码库案例 去找百度的官方包 才看到这个大坑
没有评论 (3,473 views)