网络抓包or API取回json数据的初级方法
tasker吧
全部回复
仅看楼主
level 8
咖啡雪莲 楼主
我们从百毒翻译api取得数据或者,从其他网站http get/post数据保存的文本,需要加工成我们需要的变量,所以我们花费大量时间做正则搜索替换来提取,其实json很规范,我们可以用通用规则来获得我们要的变量。。。本帖和大家一起学习。
先来土法炼钢版,只能处理一个数据组。
如我们从百度翻译api获得一个json文件打开如下。
{"from":"en","to":"zh","trans_result":[{"src":"JavaScript can be embedded inline in tasks via the JavaScriptlet (direct specification of JavaScript to run) or JavaScript (load script from file) actions.","dst":"JavaScript\u53ef\u4ee5\u5d4c\u5165\u5185\u8054\u4efb\u52a1\u901a\u8fc7javascriptlet\uff08JavaScript\u76f4\u63a5\u8fd0\u884c\u89c4\u8303\uff09\u6216JavaScript\uff08\u4ece\u6587\u4ef6\u52a0\u8f7d\u811a\u672c\uff09\u7684\u884c\u52a8\u3002"}]}
用正则替换成
var from="en";
var to="zh";
var to="zh";
var src="JavaScript can be embedded inline in tasks via the JavaScriptlet direct specification of JavaScript to run or JavaScript load script from file actions.";
var dst="JavaScript\u53ef\u4ee5\u5d4c\u5165\u5185\u8054\u4efb\u52a1\u901a\u8fc7javascriptlet\uff08JavaScript\u76f4\u63a5\u8fd0\u884c\u89c4\u8303\uff09\u6216JavaScript\uff08\u4ece\u6587\u4ef6\u52a0\u8f7d\u811a\u672c\uff09\u7684\u884c\u52a8\u3002"
成了javascript脚本,然后用javascript运行一下,我们就可以在"某任务"中多出四个变量,随你应用
2016年08月10日 10点08分 1
level 8
咖啡雪莲 楼主
这是从一个有趣的网站获得的天气数据http://ajita.iteye.com/blog/2188914 它提供天气新闻笑话各种api。 我们用它提取一个天气信息。如 api.1-blog人工删除.com/biz/bizserver/news/list.do?city=北京
得到数据
{"status":"000000","desc":null,"detail":[{"id":1723367,"city":"北京","county":"北京","date":"2016-08-10","day_condition":"多云","day_wind":"无持续风向 ≤3级","day_temperature":"33℃","night_condition":"多云","night_wind":"无持续风向 ≤3级","night_temperature":"26℃","update_time":1470820200000}]}
2016年08月10日 10点08分 3
level 8
咖啡雪莲 楼主
万能土法破解单一json包 下载地址
2016年08月10日 11点08分 5
level 8
咖啡雪莲 楼主
本大法 只针对json数据包
就是由{[()]}标示的变量和数组
2016年08月10日 11点08分 6
level 13

你够了,不要再宣传用正则来处理JSON了
2016年08月12日 13点08分 8
level 3
json的结构化不是这样用的....太浪费了
2016年08月13日 06点08分 9
level 3
现在的人都怪怪的 放着json的结构化不同 偏偏要用正则 正则这么难用 除非是复杂结构 一般api返回的json 直接用js读就好了
2016年08月13日 06点08分 10
用$.GET.Json() 处理数据的确简单,但无法取出你想要的变量到tasker任务流,因为get.son()只是一个函数,在里面创造的变量,对象,数组。出了这个函数就无法用。除非把一切操作都在此函数内运行
2016年08月13日 06点08分
@咖啡雪莲 不 不var的话 变量的确只能在函数用 var 3个符号 就可以跳出函数 setGlobal还能在不同任务用
2016年08月13日 11点08分
@kk520149492 嗯 已get 原来认识有误 sorry
2016年08月14日 03点08分
level 1
谁说的不能用?回调函数里用setGlobal("Xxxx",JSON.stringify(data)),就把数据保存到tasker了。
2016年08月13日 06点08分 11
经过研究,无需使用jquery库,无需使用任何函数处理。从Api取回的json包 本来就很规范,所以可以直接使用,只需要用eval("("+json+")") 把取回的json从字符转化为对象即可。见楼下。感谢你的指教
2016年08月14日 03点08分
额,,,讨厌Tasker里一堆全局变量…
2016年08月14日 03点08分
@咖啡雪莲 虽然挖坟了,但是还是提醒一下后来人。JavaScript里除了可以用global和setGlobal,还可以用local和setLocal。
2019年04月20日 05点04分
level 8
咖啡雪莲 楼主
最简单方法js无需要jquery库,
无需去勾选"自动退出"
而且可以输出变量到tasker中。
[哈哈]以提取实时天气为例
js内容如下
// 把Tasker中变量%tiqu的内容转化为js的对象,方便提取
var user =eval("( "+ tiqu +")") ;
// 罗列出json中的主要躯干
var dj=user["HeWeather data service 3.0"][0];
var st=["HeWeather data service 3.0"][0];
var re=dj["daily_forecast"][0];
var re2=dj["hourly_forecast"][0];
// 把json中的对象属性值返回到众Tasker的众多变量中
var cyj=dj.suggestion.drsg.txt
var max=re.tmp.max+"℃"
var min=re.tmp.min+"℃"
var richu=re.astro.sr
var riluo=re.astro.ss
var now=re2.date.substr(11)
var shidu=re2.hum+"℃"
var wendu=re2.tmp+"℃"
[啊] 现在就可以尽情调用变量。例如flash它们,如
实时天气
最高温度:%max
最低温度:%min
日出时间:%richu
日落时间:%riluo
╭( ′• o •′ )╭
查询时间:%now
当前湿度:%shidu
当前温度:%wendu
穿衣建议:%cyj
2016年08月14日 03点08分 12
图中,第二张是用Tasker直接flash出结果。 最后一张是用插件zooper显示在桌面的效果
2016年08月14日 03点08分
@咖啡雪莲 挖坟 大佬能不能给个heweather6的方案
2020年04月24日 06点04分
level 8
咖啡雪莲 楼主
楼上有人说的,用jquery.js库提取代码。在回调函数getJson()里用设置全局变量的代码如下:
var url="file:///storage/emulated/0/study/hruili.txt";
$.getJSON(url,{},function(date){
var dj=date["HeWeather data service 3.0"][0]
var st=["HeWeather data service 3.0"][0];
var re=dj["daily_forecast"][0];
var re2=dj["hourly_forecast"][0];
var cyj=dj.suggestion.drsg.txt
var tdtq= " 实时天气 \n 最高温度:"+re.tmp.max+"℃ \n 最低温度:"+re.tmp.min+"℃ \n!щ(゚▽゚щ) \n 日出时间:"+re.astro.sr+"\n 日落时间:"+re.astro.ss+"\n╭( ′• o •′ )╭☞\n 当前时间:" +re2.date.substr(11)+"\n 当前湿度" +re2.hum+"℃ \n 当前温度" +re2.tmp+"℃\n 穿衣建议:"+cyj;
setGlobal("Sstq",tdtq);
flashLong(tdtq);
});
setTimeout("exit()",500);
代码结束,Tasker中取用全局变量%Sstq ,就是实时天气结果
2016年08月14日 03点08分 16
eval的内容要是一段shell()码你就知道有多恐怖了 eval通常是不建议使用的 直接 s=JSON.pares(global("HTTPD"))
2016年08月15日 06点08分
@kk520149492 这只是针对api的返回包。。。。没有厂商往里面塞命令吧。嗯我研究一下你给的函数,需要库嘛?
2016年08月15日 10点08分
@咖啡雪莲 当然不用....eval相比于专用函数来说太慢了 除了js其他语言都没有这个函数
2016年08月18日 06点08分
level 8
咖啡雪莲 楼主
此贴终究,利用js解码json最简单两步
第一把 json包转化为对象
第二,var 变量=定位你所需对象
然后在tasker中就多出你所需的变量和值
2016年08月14日 04点08分 17
此贴终结
2016年08月14日 04点08分
level 8
咖啡雪莲 楼主
var jsonStr = '{"siteName":"web开发","url":"www.baidu.com"}' ;
var jsonObj = JSON.parse(jsonStr);
alert(typeof jsonObj); //显示变量类型为对象Object
//研究表明,JSON.parse()函数无需库,可以在tsker里完美运行,以上是例子
2016年08月15日 16点08分 19
level 12
感觉楼主一直以来的分享,对我很有帮助
2016年12月14日 17点12分 20
level 3
之前没有看到,多学习下
2017年09月13日 15点09分 22
level 6
前人栽树我乘凉,21年的我感觉收获匪浅[滑稽]
2021年02月25日 02点02分 23
1 2 尾页