IOS Scriptable

打印 上一主题 下一主题

主题 822|帖子 822|积分 2466

Scriptable 是一款强大的 iOS 应用
用户可以用 JavaScript 编写脚本来实现各种功能和主动化任务。JavaScript 是一种广泛使用的编程语言。通过 JavaScript,用户可以访问 Scriptable 提供的丰富 API,与 iOS 系统和设备功能进行交互。
常用的共同工具有Data Jar、Jayson、快捷指令
Data Jar 的主要特点和用途:



  • 数据存储:Data Jar 提供了一个会合式的存储库,用户可以在此中存储各种类型的数据,如文本、数字、数组和字典。这些数据可以在不同的脚本和主动化任务中共享和重复使用。
  • 集成主动化:Data Jar 与 Scriptable 和 Shortcuts 等主动化应用无缝集成,答应用户在这些应用中轻松读取和写入数据。比方,用户可以在 Scriptable 中获取 Data Jar 中存储的数据,大概使用 Shortcuts 来更新 Data Jar 中的数据。
  • 键值对存储:Data Jar 以键值对的形式存储数据,用户可以根据需要定义和管理多个键,每个键下可以存储不同类型和结构的数据。
  • 数据恒久化:Data Jar 中存储的数据是恒久化的,这意味着即使应用被关闭或设备重启,数据也会被保存,不会丢失。
  • 用户界面:Data Jar 提供了一个简单直观的用户界面,用户可以方便地查看和管理存储的数据。用户可以直接在应用内添加、编辑和删除数据。
  • 安全和隐私:Data Jar 支持使用 iCloud 同步数据,确保数据在不同设备之间的一致性。应用还注意用户隐私,确保数据在当地和云端的安全。
Jayson 的主要特点和用途:



  • JSON 查看和编辑:Jayson 提供了一个直观的界面,让用户可以方便地查看和编辑 JSON 数据。用户可以通过层级视图欣赏嵌套的 JSON 结构。
  • 文件导入和导出:用户可以从各种来源导入 JSON 文件,包罗 iCloud、Dropbox 和其他文件应用。编辑完成后,可以将修改后的 JSON 数据导出或分享。
  • URL Schemes:Jayson 支持 URL Schemes,使得用户可以从其他应用(如 Safari 或 Shortcuts)直接将 JSON 数据传递给 Jayson 进行查看和编辑。
  • 快捷操作:Jayson 提供了快捷操作,可以快速对 JSON 数据进行常见操作,如排序、添加或删除节点。这些快捷操作提高了数据处理的效率。
  • 格式化和验证:应用可以主动格式化 JSON 数据,使其更易于阅读和理解。此外,Jayson 还可以验证 JSON 数据的结构,确保其有效性和正确性。
  • 复制和粘贴:用户可以方便地复制和粘贴 JSON 数据,支持跨应用操作,这对于快速编辑和处理数据非常有用。
  • 可扩展性:通过与其他应用的集成,Jayson 可以用来查看 API 返回的 JSON 数据,调试 Web 应用,或分析从不同来源获取的 JSON 数据。
快捷指令的主要特点和用途:



  • 任务主动化:快捷指令可以主动化一系列任务。比方,用户可以创建一个快捷指令来同时调治家庭的智能灯光、播放音乐和设定闹钟。
  • 可视化编辑器:快捷指令应用提供了一个直观的拖放界面,用户可以通过简单的拖放操作来创建和编辑快捷指令,而不需要编写代码。
  • 与应用集成:快捷指令可以与众多内置和第三方应用集成,使用户能够通过一个快捷指令操作多个应用。比方,用户可以创建一个快捷指令来在社交媒体上发布照片,同时在照片应用中添加标签。
  • 触发条件:快捷指令可以通过多种方式触发,包罗Siri语音命令、主屏幕小组件、主动化(基于时间、位置、设备状态等)、快捷方式菜单和共享表单。
  • 操作步骤:每个快捷指令由一系列操作步骤构成,这些步骤可以包罗发送消息、获取天气信息、播放音乐、执行网络哀求、处理文件等。
  • 变量和条件:快捷指令支持使用变量和条件逻辑,使得任务序列能够根据不同的环境做出决议。比方,根据当前时间的不同,快捷指令可以执行不同的操作。
  • 共享和社区:用户可以分享他们创建的快捷指令,并且可以从网上的快捷指令社区下载其他用户创建的快捷指令,从而拓展应用的功能。
  • 脚本和扩展:高级用户可以通过与其他工具(如Scriptable和Data Jar)的集成,实现更复杂和高级的主动化功能。比方,使用JavaScript在Scriptable中创建复杂的逻辑,再通过快捷指令触发执行。
使用Scriptable实现爬取、解析、存储、读取、渲染

  1. let url = "目标网址";
  2. let req = new Request(url);
  3. // 发送请求并获取响应
  4. let html = await req.loadString();  // console.log(html);
  5. // 使用 WebView 进行 DOM 解析
  6. let webView = new WebView();
  7. await webView.loadHTML(html)
  8. // console.log(html);
  9. let economyData = await webView.evaluateJavaScript(`
  10. Array.from(document.querySelectorAll('tbody tr')).map(tr => {
  11.     // 获取包含在 tr 下的所有 td
  12.     let tds = Array.from(tr.querySelectorAll('td'));
  13.    
  14.     // 过滤掉 class 为 "d-none" 的 td
  15.     let filteredTds = tds.filter(td => !td.classList.contains('d-none'));
  16.     // 返回包含文本内容的数组
  17.     return filteredTds.map(td => td.textContent.trim());
  18.   });
  19. `);
  20. // 将经济数据转换为 JSON 格式,字段改为英文
  21. let jsonEconomyData = economyData.map(data => {
  22.   return data;
  23. });
  24. console.log(jsonEconomyData);
  25. // 创建本地文件管理器
  26. const fileManager = FileManager.iCloud()
  27. if(jsonEconomyData.length>1){
  28. // 指定本地文件路径
  29. const filePath = fileManager.joinPath(fileManager.documentsDirectory(), "/GetJson/房价/Whfj.json")
  30. // 写入数据到文件
  31. const contentToWrite = JSON.stringify(jsonEconomyData, null, 2);
  32. fileManager.writeString(filePath, contentToWrite)
  33. }
  34. Script.complete()
复制代码
== 注意解析时大概要根据内容调解解析代码==
   如许就把解析后的数据保存到了手机文件中了
  

   由于在渲染时控件默认根据焦点进行更新、
为了文明爬取则需要本身配置定时任务、
在自带的API可以做、也可以共同快捷指令使用
这里使用了快捷指令
  

   现在已经实现了每天10:30收集一次新的数据
下面是读取文件再进行渲染、先做一个类专门用于调取文件数据
  获取io数据类
  1. exports.data = (url) => {
  2.   // 创建本地文件管理器
  3. const fileManager = FileManager.iCloud();
  4. let fileAll;
  5. // 指定本地文件路径
  6. const filePath2 = fileManager.joinPath(fileManager.documentsDirectory(),url);
  7. // 读取文件内容
  8. const contentFromFile = fileManager.readString(filePath2);
  9. if (contentFromFile) {
  10.    fileAll = contentFromFile;
  11. //    console.log("文件内容:" + fileAll);
  12.   return JSON.parse(fileAll);
  13. } else {
  14.   return "无法读取文件内容。";
  15. }
  16. };
复制代码
  调用文件进行渲染
  [code]// io.js 模块
let circle = importModule('获取io数据');


let area = circle.data("/GetJson/房价/Whfj.json");

// console.log(area);

// 准备数据
const productData = [];

for(let i=0;i<area.length;i++){
  productData.push({ name: area[1], recentData: area[2], previousData: area[3] })
}

// 创建小组件
let widget = new ListWidget();
let logo = widget.addText("

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表