{"id":19725462,"url":"https://github.com/easychen/lazyboardext","last_synced_at":"2025-07-16T20:35:34.049Z","repository":{"id":44763816,"uuid":"451559460","full_name":"easychen/LazyBoardExt","owner":"easychen","description":"定时采集数据并发送到指定接口的Chrome扩展机器人🤖","archived":false,"fork":false,"pushed_at":"2022-02-10T04:24:23.000Z","size":2526,"stargazers_count":53,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-29T23:34:46.935Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/easychen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-24T17:15:19.000Z","updated_at":"2025-02-11T15:51:34.000Z","dependencies_parsed_at":"2022-09-08T09:11:17.820Z","dependency_job_id":null,"html_url":"https://github.com/easychen/LazyBoardExt","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/easychen/LazyBoardExt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easychen%2FLazyBoardExt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easychen%2FLazyBoardExt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easychen%2FLazyBoardExt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easychen%2FLazyBoardExt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easychen","download_url":"https://codeload.github.com/easychen/LazyBoardExt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easychen%2FLazyBoardExt/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265538605,"owners_count":23784619,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T23:30:00.596Z","updated_at":"2025-07-16T20:35:34.018Z","avatar_url":"https://github.com/easychen.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LazyBoardExt\n\n## 是什么？\n\n⚠️ 虽然 LazyBoardExt 是为 LazyBoard 设计，但它是一个通用工具，只需要将`数据回填URL`设置为你自己的接口地址即可。见下文「使用自己的数据回填地址」\n\nLazyBoardExt 是一个浏览器插件，可以定时采集特定的数据并更新到[LazyBoard](https://board.level06.com/home)上（当然你也可以提交到其他地方），只要开着浏览器，数据就会持续更新。\n\n![LazyBoardExt](https://user-images.githubusercontent.com/1294760/150903085-296546b6-3cbc-4310-94dd-013f81adf8dc.png)\n\n## 为什么？\n\n浏览器插件除了可以通过API接口读取数据，还能直接共用登入状态读取没有API接口的网站的数据。\n\n## 如何使用？\n\n### 安装插件\n\n#### 从商店安装\n\n[已上架Edge商店](https://microsoftedge.microsoft.com/addons/detail/lazyboardext/lcfhpfmblaafmnimjpbghheedmmpphfa)\n\n#### 从插件代码安装\n\n在项目release中下载代码包，然后在浏览器插件管理中载入「未打包插件」即可使用。\n\n\n\n### 添加数据源\n\n安装插件后，在添加数据源选择类别，按提示输入对应的参数即可\n\n### 已有数据源和相关参数\n\n#### 公用参数说明\n|参数|说明|备注|图示|\n|-|-|-|-|\n|数据回填URL|用于回填数据到LazyBoard|在 https://board.level06.com/home 编辑器页面点预览区的数字，复制下方的`数据源SetAPI`原样填入即可|![](images/2022-01-24-20-12-43.png)\n|抓取时间间隔|设置抓取间隔|单位为分\n\n\n#### 社交应用\n\n##### 微博粉丝数\n\n⚠️ 此数据无需登入即可获取\n\n|参数|说明|备注|图示|\n|-|-|-|-|\n|微博UID|要查询的微博用户的UID|m.weibo.cn登入后点左上角小人后URL中的数字（https://m.weibo.cn/profile/就是这个数字）| ![](images/2022-01-24-20-11-42.png)\n\n##### B站未读回复数\n\n⚠️ 此数据需要浏览器账号登入\n\n没有额外参数\n\n#### 加密货币\n\n##### BTC/ETH 对 USD 价格\n\n⚠️ 此数据需要申请API Key\n\n![](images/2022-01-24-20-39-52.png)\n\n|参数|说明|备注|图示|\n|-|-|-|-|\n|API Key|[到cryptocompare申请免费Key](https://min-api.cryptocompare.com)||\n|显示货币的种类|如BTC、ETH|建议大写\n|显示货币价格的币种|如USD|建议大写\n\n#### 生活\n\n##### 当前城市天气\n\n⚠️ 此数据需要申请API Key\n\n![](images/2022-01-24-22-42-28.png)\n\n|参数|说明|备注|图示|\n|-|-|-|-|\n|API Key|[到openweathermap申请免费Key](https://openweathermap.org/full-price#current)|key刚申请下来时会报错，等10分钟左右才会生效|\n|城市拼音|如chongqing|建议全部小写\n\n##### 美股查询\n\n⚠️ 此数据需要申请API Key\n\n![](images/2022-01-24-23-00-09.png)\n\n|参数|说明|备注|图示|\n|-|-|-|-|\n|API Key|[到marketstack申请免费Key](https://marketstack.com/)||\n|股票代码|如AAPL|建议大写\n\n\n#### 办公和业务\n\n##### 网易云课堂讲师账户总金额\n\n⚠️ 此数据需要浏览器账号登入\n\n|参数|说明|备注|图示|\n|-|-|-|-|\n|讲师ID|当前用户的讲师ID|进入网校管理后台后，URL最后的一串数字| ![](images/2022-01-25-00-15-40.png)\n\n## 如果添加没有的数据源\n\n### 自定义操作\n\n在数据源分类下拉框中选择`自定义`可以编写代码实现列表中没有的数据源。\n\n自定义操作分类中，除了每个分类都有的 `数据回填URL` 和 `抓取间隔时间` 外；还有两个额外输入框：`数据来源URL` 和 `执行代码·JavaScript`。\n\n在 `执行代码·JavaScript` 中，我们可以通过 data 对象访问其他三个：\n\n1. 数据来源URL - data.customer_fetch_data_url\n1. 数据回填URL - data.customer_fetch_source_url\n1. 抓取时间间隔 - data.customer_fetch_check_minutes\n\n`执行代码·JavaScript` 的主要任务是请求URL，并将返回值拼接为需要的格式，这里可以采用 `fetch` 接口来实现，以下是一个demo：\n\n```js\nlet result = await fetch( data.customer_fetch_data_url );\nconst jsondata = await result.json();\nreturn jsondata.value\n```\n\n代码通过return来传递返回值。运行部分的源码如下，可供参考：\n\n```js\nasync customer_fetch_fetch( data )\n{\n    let ret = '-';\n    eval(\"ret = (async () =\u003e {\" + data.customer_fetch_code + \"})()\");\n    return ret;\n}\n```\n\n### 贡献新的数据源\n\n添加新的数据源很简单，只需要三步。假设我们要添加一个中文说明为「甲乙丙丁」英文唯一标识符为「abcd」的数据源。\n\n#### 在 Source 中添加 fields 属性\n\n首先我们需要在 `src/lib/Source.js` 添加属性来定义输入界面，属性名为 `abcd_args`：\n\n```js\nabcd_args = {\n    \"fields\": [\n        {\n            \"field_id\":\"abcd_source_url\", // id\n            \"field_name\":\"数据回填URL·在LazyBoard中复制\", // 输入框上方的文字说明\n            \"field_default\":\"\", // 默认值\n            \"field_type\":\"text\", // text 单行 textarea 多行\n        },\n        {\n            \"field_id\":\"abcd_check_minutes\",\n            \"field_name\":\"抓取时间间隔·分钟数\",\n            \"field_default\":\"0\",\n        },\n    ]\n};\n```\n每一个 `field` 通过属性进行定义，已经通过注释标明。注意上边两个字段是每个数据源都必须的。 \n\n#### 在 Source 中添加 fetch 方法\n\n然后定义一个 `abcd_fetch` 的方法，用来获取数据。在这个方法中，可以通过 `data.字段id` 的方式访问到上边输入框输入的内容。\n\n```js\nasync abcd_fetch( data )\n{\n    const ret = await axios.get('http://api.marketstack.com/v1/intraday?access_key='+ data.marketstack_key +'\u0026symbols='+data.marketstack_symbol+'\u0026limit=1');\n    if( ret?.data )\n    {\n        return ret.data.data[0].last;\n    }\n    else\n        return \"-\";\n\n}\n```\n\n#### 将数据源添加到菜单\n\n最后我们还需要在 `src/store/AppState.js` 中的 `source_types` 添加一行，让菜单显示新的数据源。\n\n```js\nsource_types = [\n    {\"label\":\"甲乙丙丁\",\"value\":\"abcd\"}, // 这里加一行\n    {\"label\":\"微博粉丝数\",\"value\":\"weibo_fans\"},\n    {\"label\":\"B站未读回复\",\"value\":\"bili_unreply\"},\n    {\"label\":\"加密货币实时价格\",\"value\":\"coin_price\"},\n    {\"label\":\"城市天气\",\"value\":\"open_weather\"},\n    {\"label\":\"美股查询\",\"value\":\"marketstack\"},\n    {\"label\":\"网易云课堂讲师账户总金额\",\"value\":\"study_163\"},\n    {\"label\":\"自定义操作\",\"value\":\"customer_fetch\"},\n];\n```\n#### 编译并使用\n\n编写完成后，可以在根目录下运行命令 `yarn build`，完成后通过浏览器载入 `build` 目录作为插件目录即可使用。\n\n## 使用自己的数据回填地址\n\n你也可以使用 LazyBoardExt 来给其他应用采集数据，只需要将「数据回填URL」填写为对应的 URL 即可。注意需要在该URL中添加 `value=new_value` 字段，将会被替换为 `value=采集到的的值`。\n以下实现代码可供参考：\n\n```js\nconst set_url = item[item.field+'_source_url'].replace(/value=.+/ig,'value='+encodeURIComponent(value));\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasychen%2Flazyboardext","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasychen%2Flazyboardext","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasychen%2Flazyboardext/lists"}