分类
UpgradeAll

UpgradeAll JS 脚本编写规则

自定义源依赖 Rhino 完成功能实现。

如果你遇到了问题,请查阅 Rhino 官方文档,其中包括了 官方设计理念和一些你可能感兴趣的重要的细节(Rhino 语法支持表),同时也欢迎联系我们。

代码结构

示例代码

以 GitHub 源为例:

function getDefaultName() {
   var tmpList = splitUrl(URL);
   if (tmpList == null) return null;
   return tmpList[1];
 }
 function getReleaseNum() {
   var apiUrl = getApiUrl(URL);
   var jsonText = JSUtils.getHttpResponse(apiUrl);
   var returnJson = JSUtils.getJSONArray(jsonText);
   return returnJson.length();
 }
 function getVersionNumber(releaseNum) {
   var apiUrl = getApiUrl(URL);
   var jsonText = JSUtils.getHttpResponse(apiUrl);
   var returnJson = JSUtils.getJSONArray(jsonText);
   var versionNumber = returnJson.getJSONObject(releaseNum).getString("name");
   if (versionNumber.equals("null"))
     versionNumber = returnJson.getJSONObject(releaseNum).getString("tag_name");
   if (versionNumber.equals("null")) versionNumber = null;
   Log.d(this.URL, "versionNumber", versionNumber);
   return versionNumber;
 }
 function getReleaseDownload(releaseNum) {
   var apiUrl = getApiUrl(URL);
   var jsonText = JSUtils.getHttpResponse(apiUrl);
   var returnJson = JSUtils.getJSONArray(jsonText);
   var releaseAssets = returnJson
     .getJSONObject(releaseNum)
     .getJSONArray("assets");
   var releaseDownload = JSUtils.getJSONObject();
   for (var i = 0; i < releaseAssets.length(); i++) {
     var tmpJsonObject = releaseAssets.getJSONObject(i);
     releaseDownload.put(
       tmpJsonObject.getString("name"),
       tmpJsonObject.getString("browser_download_url")
     );
   }
   return releaseDownload.toString();
 }
 function getApiUrl(url) {
   //获取api地址的独立方法
   var apiUrlStringList = splitUrl(url);
   if (apiUrlStringList == null) return null;
   // 网址不符合规则返回 false
   else return apiUrlStringList[0];
 }
 function splitUrl(url) {
   var temp = url.split("github.com/");
   temp = temp[temp.length - 1].split("/");
   if (temp.length >= 2) {
     var owner = temp[0];
     var repo = temp[1];
     // 分割网址
     var apiUrl =
       "https://api.github.com/repos/" + owner + "/" + repo + "/releases";
     Log.d(this.URL, "splitUrl", apiUrl);
     return [apiUrl, repo];
   } else return null;
 }

结构要求

JS 脚本结构必须包括:

  1. getDefaultName
  2. getReleaseNum
  3. getVersionNumber
  4. getReleaseDownload

且不能包括在类里(Rhino暂不支持 Class 关键词)

UpgradeAll 调用的接口函数

getDefaultName

获取默认名称。

输入:无

输出:String(字符串)

说明:假如用户添加跟踪项时未设置名称,将会使用该项以获取默认名称。

getReleaseNum

获取发布的所有版本的个数。

输入:无

输出:Int(整数)

说明:比如:一个软件发布了两个版本(0.1, 0.2),那么应该返回2。如果该函数返回 0,则表示获取更新数据失败。

getVersionNumber

获取某个特定的版本号。

输入:Int(整数)

输出:String(整数)

说明:比如:一个软件发布了两个版本(0.1, 0.2)。我们通过 getReleaseNum 函数获取到返回值2,如果我们向该函数输入 0,则返回0.2,输入1,则返回0.1。返回值应该递减(0.2,0.1),而非递增(0.1,0.2),输入 0 时,必须返回最新版本号。

getReleaseDownload

获取某个版本的文件下载链接。

输入:Int(整数)

输出:String(JSONObject 转换的字符串)

说明:例如:输入0,代表获取最新版本号所对应的文件,此时有两个文件,第一个文件名为: UpgradeAll_1,下载链接为:www.example.com/1;第二个文件为 UpgradeAll_2,下载链接为:www.example.com/2。那么该函数应该返回{“UpgradeAll_1”: “www.example.com/1”, “UpgradeAll_2”: “www.example.com/2”}。

代码编写规则

预置函数

UpgradeAll 目前提供了一些 API,以函数的形式提供。

打印日志(Log)

Log.v(String msg)

Log.d(String msg)

Log.i(String msg)

Log.w(String msg)

Log.e(String msg)

返回值:无

优先级是以下值之一:

  • V — 详细(最低优先级)
  • D — 调试
  • I — 信息
  • W — 警告
  • E — 错误

爬虫工具(JSUtils)

因为 Rhino 对于 Json 支持有限,UpgradeAll 提供了 Json 接口。

Json

JSUtils.getJSONObject()

输入:无

输出:JSONObject

JSUtils.getJSONObject(String jsonString)

输出:JSONObject 字符串

输出:JSONObject

JSUtils.getJSONArray()

输入:无

输出:JSONArray

JSUtils.getJSONArray(String jsonString)

输入:JSONArray 字符串

输出:JSONArray

OkHttp 支持(获取访问网址返回的数据,例如Github API)

JSUtils.getHttpResponse(String URL)

输入:网址字符串(需带有HTTP等响应协议,例如:https://github.com)

输出:网站返回的字符串数据。

Jsoup 支持(模拟浏览器访问网址,并使用Xpath获取网页中的数据)

JSUtils.selNByJsoupXpath(String userAgent, String URL, String xpath)

输入:userAgent(用户代理,用于伪装浏览器)URL(访问的网址)xpath(Xpath规则)

输出:字符串(访问网页后,通过Xpath获取到的网页的数据)

Rhino 特性解释及编程细节

Rhino 是 Mozilla 开发的 JS 解释器,与众多 node.js 衍生库不同,它采用 Java 语言,而非 C++。大幅减少体积,并采用即时编译技术,加快重复使用的 JS 脚本运行速度。

目前(2019-07-29)它尚不完善,不支持某些 JS 语法,例如:Class 关键词,Json 支持。

但它可以直接调用JAVA库,并其语法与 Java 无异。

例如创建JSONObject之后可以使用put,get函数,也可以捕捉产生的错误。

特性详见:Rhino 开发者文档

后记

目前开发者文档极不完善,应用开发者精力有限,无法即时更新文档,如有兴趣加入我们,请即时联系我([email protected]),感谢。

如果你有好的脚本,也欢迎提交到 Git仓库

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据