App

如何基于App SDK快速地开发一个IoT App? 一、背景及大纲介绍 在如今物联网DCM(Device、Connect、Manage)的大框架下,有一个应用层来分析和处理数据,是必备技能。但是,对于一个公司来说,因为研发能力或者研发时间的原因,可能很难短期内完全自己开发出一个适用的App来。写代码、封装通用功能、还要考虑其他多种功能,统统都是很耗费时间的事情。现在很多物联网平台公司,为了帮助开发者解决此类问题,也想出了相应的解决办法,提供相应的SDK就是其中一种。 今天抽空以基于App SDK完成智能家居App的开发为例。通过这... 阅读详情

APP.java

 package Gecco;
    import com.geccocrawler.gecco.GeccoEngine;
    import com.geccocrawler.gecco.annotation.Gecco;
    import com.geccocrawler.gecco.annotation.HtmlField;
    import com.geccocrawler.gecco.annotation.Request;
    import com.geccocrawler.gecco.annotation.Text;
    import com.geccocrawler.gecco.request.HttpGetRequest;
    import com.geccocrawler.gecco.request.HttpRequest;
    import com.geccocrawler.gecco.spider.HtmlBean;
    
    import java.util.List;
    
    /**
 * Hello world!
 *
 */
@Gecco(matchUrl = "http://kaoshi.edu.sina.com.cn/college/scorelist?tab=&wl=&local=7&provid=&batch=&syear=&page={page}", pipelines = {"mainPipeline"})
public class App implements HtmlBean
{

    @Request
    private HttpRequest request;

    //cssPath语法和Jquery的选择器类似,用于获取mathurl文档流中符合的元素数据
    //  //NewsSummaryView类看下面,这个类用于封装解析后的列表页数据
    @HtmlField(cssPath = ".newslist")
    private List<school> newsSummaryViews;

    //Text代表解析text文档(html代表解析html文档,attr代表解析标签属性等)
    @Text
    @HtmlField(cssPath = ".selected > a")
    private String nextPage;

    public List<school> getNewsSummaryViews() {
        return newsSummaryViews;
    }

    public void setNewsSummaryViews(List<school> newsSummaryViews) {
        this.newsSummaryViews = newsSummaryViews;
    }
    public HttpRequest getRequest() {
        return request;
    }

    public void setRequest(HttpRequest request) {
        this.request = request;
    }


    public String getNextPage() {
        return nextPage;
    }

    public void setNextPage(String nextPage) {
        this.nextPage = nextPage;
    }

    public static void main(String[] args ) {

            System.out.println("=======start========");
            HttpGetRequest startUrl = new HttpGetRequest("http://kaoshi.edu.sina.com.cn/college/scorelist?tab=&wl=&local=7&provid=&batch=&syear=&page=1");
            startUrl.setCharset("GBK");
            GeccoEngine.create()

                    //Gecco搜索的包路径
                    .classpath("pGecco")
                    //开始抓取的页面地址
                    .start(startUrl)
                    //开启几个爬虫线程
                    .thread(1)
                    //单个爬虫每次抓取完一个请求后的间隔时间
                    .interval(2000)
                    .run();
        }


}

mainPipeline.java

package Gecco;

import com.geccocrawler.gecco.annotation.PipelineName;
import com.geccocrawler.gecco.pipeline.Pipeline;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.scheduler.SchedulerContext;

import java.util.List;

@PipelineName("mainPipeline")
public class mainPipeline implements Pipeline<App> {
    @Override
    public void process(App newsSpiderEntry) {
        HttpRequest request = newsSpiderEntry.getRequest();
        List<school> newsSummaryViews = newsSpiderEntry.getNewsSummaryViews();
        for(school newsSummaryView : newsSummaryViews) {
            System.out.println(newsSummaryView);
        }
        //获取下一页url
        int nextPage = Integer.parseInt(newsSpiderEntry.getNextPage()) + 1;
        //将下一页的url加入待解析队列
        String nextPageurl = "http://kaoshi.edu.sina.com.cn/college/scorelist?tab=&wl=&local=7&provid=&batch=&syear=&page=1" + nextPage;
        SchedulerContext.into(request.subRequest(nextPageurl));
    }
}

school.java

package Gecco;

import com.geccocrawler.gecco.annotation.*;
import com.geccocrawler.gecco.spider.HtmlBean;

@Gecco(matchUrl = "http://kaoshi.edu.sina.com.cn/college/scorelist?tab=&wl=&local=7&provid=&batch=&syear=&page={page}", pipelines = {"mainPipeline"})
public class school implements HtmlBean {
    private int id;


    @Text
    @HtmlField(cssPath = "#score > div.tabsContainer > table > tbody > tr:nth-child(2) > td:nth-child(2)")
    private String student_adress;

    @Text
    @HtmlField(cssPath = "#score > div.tabsContainer > table > tbody > tr:nth-child(2) > td:nth-child(3)")
    private String student_nature;


    @Attr("data-original")
    @HtmlField(cssPath = "#score > div.tabsContainer > table > tbody > tr:nth-child(2) > td:nth-child(4)")
    private String student_pici;


    @HtmlField(cssPath = "#score > div.tabsContainer > table > tbody > tr:nth-child(2) > td:nth-child(4)")
    private String year;
    @Text
    @HtmlField(cssPath = "#score > div.tabsContainer > table > tbody > tr:nth-child(2) > td:nth-child(5)")
    private String max_grade;

    @Text
    @HtmlField(cssPath = "#score > div.tabsContainer > table > tbody > tr:nth-child(2) > td:nth-child(6)")
    private String min_grade;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getStudent_adress() {
        return student_adress;
    }

    public void setStudent_adress(String student_adress) {
        this.student_adress = student_adress;
    }

    public String getStudent_nature() {
        return student_nature;
    }

    public void setStudent_nature(String student_nature) {
        this.student_nature = student_nature;
    }

    public String getStudent_pici() {
        return student_pici;
    }

    public void setStudent_pici(String student_pici) {
        this.student_pici = student_pici;
    }

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getMax_grade() {
        return max_grade;
    }

    public void setMax_grade(String max_grade) {
        this.max_grade = max_grade;
    }

    public String getMin_grade() {
        return min_grade;
    }

    public void setMin_grade(String min_grade) {
        this.min_grade = min_grade;
    }

    @Override
    public String toString() {
        return "school{" +
                "id=" + id +
                ", student_adress='" + student_adress + '\'' +
                ", student_nature='" + student_nature + '\'' +
                ", student_pici='" + student_pici + '\'' +
                ", year='" + year + '\'' +
                ", max_grade='" + max_grade + '\'' +
                ", min_grade='" + min_grade + '\'' +
                '}';
    }
}

uni-app打包成安卓app步骤详解 前置: 开发环境 Android Studio 下载地址:Android Studio官网 OR Android Studio中文社区 HBuilderX App离线SDK下载:最新android平台SDK下载 3.1.10版本起需要申请Appkey,具体请点击链接 正文: 通过uni-app实现一套代码在微信小程序和安卓端app同时适配 1.创建文件 创建Demo文件,采用uni-app 模板 2.创建应用 在https://dev.dcloud.net.cn/app页面创建相同名称的应用,并且获取 阅读详情

相关推荐

iOS发布app到App Store教程

本文详细介绍从获取发布证书到提交到App Store审核的流程,讲解发布和更新版本时的注意事项

Minecraft 7548

Android APP打开另一个APP完整逻辑实现

一丶概述前段时间配合开发,完成了一个APP拉起另一个APP的需求,负责接收数据跨登录部分。当然整个实现思路挺感兴趣就了解一下。先说说需求拉起另一个APP是为了方便统一使用管理,有些公司APP较多,部分人只需要用到部分APP,需要用到时就下载。市面上比较流行的解决办法,第一个就是现在说的新开发一个管理型APP,其他APP需要时再下载,运用时拉起,另一个就是插件化,直接将多个APP合成一个APP,这个...

行动者&&职业化 2万+

matlab app1调用另外一个app2的参数的方法

matlab app1调用另外一个app2的参数的方法

weixin_47517664的博客 3020

在 App Store Connect 中删除 App

本文详细介绍了在AppStoreConnect中安全移除iOS应用的完整流程。主要内容包括:移除前的准备(确认账户权限、检查应用状态)、必要操作(下架应用、移除内购项目、取消市场分发)、具体移除步骤,以及移除后的注意事项(名称、SKU、BundleID限制)。文章强调移除操作不可逆,建议操作前备份关键信息,并逐步完成所有步骤以避免常见问题和风险。

weixin_39339407的博客 2015

多个APP合并为一个APP开发的实现方案

需求 目前开发了在线娱乐、收音机、本地音乐三个APP,需要开发一款APP集成这三个模块功能。 具体要求:左侧显示导航栏,包含“在线娱乐”、“收音机”、“本地音乐”按钮,点击可进入相应模块功能。 目前已知有两种实现方案,具体如下: 一、仍然分三个APP开发 三个APP具有布局完全一致的左侧导航栏,点击导航栏完成APP之间的切换。这里通过三个APP来回跳转的方式,实现了让用户看起来是一个APP.其中需要注意: 1.在每个APP中,在BaseActivity中统一显示、控制左侧导航栏。注意每个活动取消切换动画,

lucky的博客 1万+

UNI-APP 实现跳转其他APP

参考 文档 https://ask.dcloud.net.cn/article/35621 https://www.html5plus.org/doc/zh_cn/runtime.html#plus.runtime.launchApplication UNIAPP实现跳转其他的APP 在安卓中,在开发的过程,需要先获取外部APP的包名才能实现跳转外部APP 而IOS需要获取对应的“URLscheme”才能跳转外部APP,所谓的URLscheme就是指下面代码中的“taobao://” if (plus.

一尾流莺 半世情缘 3049

Android APP的安装路径

小Tips:app安装在哪个路径? 一. Android应用安装路径有两种情况: system/app 系统自带的应用程序,无法删除。root后可以删除,注意可能造成系统崩溃,不过有的垃圾捆绑软件只能这么删除了 data/app 用户程序安装的目录,有删除权限。安装时把apk文件复制到此目录。 data/data 存放应用程序的数据。 data/dalvik-cache 将apk中的dex文...

xianrenli38的博客 9万+

移动App开发、App和Web区别、开发移动app时技术选型

移动App开发 混合移动App: 移动端App开发有Android和iOS及混合App,开发它们采用不同的语言,如: 苹果软件使用: OC、或者Swift语言开发。 安卓软件使用:Java,安卓控件进行开发。 混合App使用:把前端特有的技术(HTML+CSS+JS)通过某种方式移植到移动App开发上,这种利用Web开发技术进行移动端开发体验的方式,叫做混合移动App开发。 移动App 开发的几个概念: 原生开发(NativeApp):指使用 IOS及Android 官方提供的工具和开发平台及配套语言进行手

专研前端,探索后端 2871

原生APP和封装APP区别详解

很多人对于封装app和原生app概念区分比较迷茫,为什么原生开发的要十几二十万封装的只要几千到上万就可搞定呢? 客户在没有深入了解行业的情况下往往觉得app只是个安装包,能安装就是app,这样说其也没有对错只能是比较表面化而已。 这里给大家做一个全面的解读,以免大家上当受骗了! 首先我们来看下定义!! 封装App又称webapp Web App即是一种框架型APP开发模式(HTML5 A...

滴水石穿 1万+

对当前主流hybrid app、web app与native app工具的初步比较与分析

随着移动互联网元年—2011年,已过去4年了。一大批互联网的站长正面临的流量减少的困境,不少技术能力稍强的站长转型iOS、Android开发者。跟得上市场的站长继续成长,跟不上的小部分站长正在被淘汰的边缘。 笔者也是曾经的站长群体的一员,擅长单打独斗,技术、设计、营销样样都来,但2012年免不了走上了找工作的道路,索性后来有幸进入百度公司学习。 在这个“大众创业、万众创新”的年代,创业仿佛又好

Striker的编程笔记 7503

Discuz app打包app上架appstore小技巧

做了很多年的论坛网站了,从discuz到pw再到discuz,作为一个资深的草根站长,混迹于建站领域多年。我们主要是做本地门户的,现在做单纯的PC站其实流量已经很有限了,一直也在观察用什么方法转型到移动端来。但是成本太高了,一个APP动不动就要几万块,有的一些APP还需要绑定您的数据,这个更加不能接受,我们辛苦做的内容,十多年的内容可以让其他平台直接获取,这个是不可接受的。 以前...

2167

原生app、混合app、H5(Web App)傻傻分不清楚?

市面上主流的APP分为三种:原生APP、混合APP、H5(Web App)三种,相对应的定制开发就是:原生开发、混合开发、H5开发。那么这三种开发模式究竟有何不同呢?本篇就分别从这三者各自的优劣势来区分比较,以及介绍一些跨端框架,如UniApp等。当然还有现在的鸿蒙开发,鸿蒙开发是华为开发的操作系统,旨在支持多种设备和平台。鸿蒙开发涉及使用特定的编程语言和工具来开发适用于鸿蒙系统的应用程序。因涉及较少,鸿蒙开发本文不做介绍。原生App偏向于交互,注重用户体验(导航切换、勾选选项、图片、视频等操作)。

W1391517383的博客 2251

Airtest如何打开、关闭、切换App以及清除App进程!

很多新手同学在写自动化测试脚本的时候,打开、关闭、切换App的方式还是使用最基础的方式,也有同学在交流群内多次询问是否有打开、关闭、切换App以及清除App进程的方式、或接口,那么今天,我们详细来讲讲如何实现打开、关闭、切换App以及清除App进程操作。

m0_58026506的博客 1568

什么是APP封装?APP封装有什么途径?

APP封装是形成APP成本最低的一种方式。你只需要拥有一个手机端的网址就可以通过一些技术处理封装成一个跨iOS和Android的APP,这个过程往往只需要几分钟。既节省时间又能节省开发的成本资金,所以接下来就介绍一下大家都比较关心的怎么给手机网站封装打包成app问题的解答。 跨平台程序应用 首先对前端开发人员来说。这个问题并不陌生,跨平台的开发框架已经在国内高速发展很多年,如uni-app可以一端开发,多端编译使用;也就是说只需要开发一套代码,编译到不通的平台发布,比如威信小程序、支付宝小程序等;uni

u010348546的专栏 8199

【01】什么是 APP?移动 APP 有几种类型?

关于微信公众平台开发的第一篇学习笔记,了解 App 的概念及分类。

Arnold Deng 的学习笔记 3874

Win11系统重装全记录:从备份Office激活到搞定RAID阵列,我的微星笔记本复活记

本文详细记录了Win11系统重装的完整过程,从数据备份到RAID阵列配置,特别针对微星笔记本的特殊硬件驱动问题提供了解决方案。文章涵盖了Office激活状态备份、BIOS设置、驱动安装顺序等关键步骤,帮助用户顺利完成系统重装并优化性能。

weixin_31421613的博客 309

关于一个App调起另一个App

前提:一个App能被其他App调起的条件是: 设备上安装了调起方(App1)被调起方(App2) 被调起方注册了自己的URL Scheme协议(唯一标识) 要将App打包后安装在手机上(我是将新建App打包安装,将被调起的App运行在基座上的)这样就实现了测试App调起了另一个App 主要步骤如下: 新建一个App用于测试 在页面中写一个按钮用于调起测试 设置被调起App的urlSchemes 哈哈哈就可以调起了 在被调起App的第一个页面加入获取参数的方法 在plusready()方法中调用chec

dqfkkll的博客 2275

使用 ANSYS 实现铸造、凝固和熔炼的高级解决方案

凭借其强大的有限元分析 (FEA) 和计算流体动力学 (CFD) 功能,ANSYS 可以准确预测模具内的热和流体流动行为。总之,ANSYS 是铸件凝固和熔化领域的关键工具。其全面的仿真功能、工艺优化功能、材料特性分析和用户友好的界面使其成为旨在创新和改进制造工艺的工程师不可或缺的工具。通过利用 ANSYS,各行各业可以在铸造业务中实现更高的质量、效率和成本效益,从而为先进的制造解决方案铺平道路。ANSYS是一款领先的工程仿真软件,提供强大的功能来建模和优化这些复杂的热过程,从而显著提高生产效率和质量。

jkh920184196的博客 2108

Airtest如何打开、关闭、切换App以及清除App进程

很多新手同学在写自动化测试脚本的时候,打开、关闭、切换App的方式还是使用最基础的方式,也有同学在交流群内多次询问是否有打开、关闭、切换App以及清除App进程的方式、或接口,那么今天,我们详细来讲讲如何实现打开、关闭、切换App以及清除App进程操作。打开App的方式有很多,有通过也有通过图片点击:但是以上两种方式,需要将App放置在当前界面上才能进行点击,但是我们可以直接调用Airtest的start_app()的接口,不用担心App放置的位置,可以直接打开App,只需要输入App的包名即可。

weixin_71807218的博客 1031

RTCA DO-160G标准详解:航空电子设备的全面环境适应性测试指南

第二章的主要目的是提供标准中使用的术语和定义。了解这些术语对于准确理解标准的要求至关重要,特别是在技术实施过程中。RTCA DO-160G 涉及多个学科的知识,包括航空、电子、电磁学和机械工程,因此需要确保使用的术语在所有学科中具有一致的定义。为了确保测试人员和工程师在执行测试时对所有条件和要求的理解一致,RTCA DO-160G 标准中定义了大量术语。环境应力:指的是设备在操作过程中可能遇到的外部物理或化学条件,包括温度、湿度、振动等。电磁干扰(EMI)

qq_41854911的博客 5276

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7746

uniapp实现app跳转app

需求:公司的app跳转公司的另一个app 注意看注释!!! 注意看注释!!! 注意看注释!!! 如何实现呢,首先你要理解一下的东西 Android平台设置UrlSchemes,实现被第三方应用调用 iOS平台设置UrlSchemes,实现被第三方应用调用 iOS平台设置应用访问白名单(LSApplicationQueriesSchemes) 判断第三方程序是否已存在 调用第三方程序 调用第三方程序打开指定的URL plus.os.name,返回你手机是安卓还是苹果 问题: 判断第三方程序是否存在的isApp

wupinlong的博客 5015

2026.3.28:langgraph使用mysql进行持久化会话存储(短期记忆和长期记忆)

本文介绍了如何使用MySQL持久化存储LangGraph会话数据(短期和长期记忆)。首先安装必要的依赖包,然后通过Python代码实现将短期记忆写入MySQL数据库。主要步骤包括:1) 建立MySQL连接;2) 创建代理(agent)并配置检查点(checkpointer)和存储(store);3) 实现工具函数如计算器和天气查询;4) 使用中间件跟踪工具和模型调用次数。最后展示了如何从MySQL读取短期记忆数据,完成会话的持久化存储和检索功能。代码示例包含完整的实现细节,包括状态管理、消息处理和数据库操作

拥抱具身智能,昇腾Ascend C 734
上一篇: JAVA常去的网站
下一篇: Base64Util
HelloWorld_AA
博客等级 码龄9年 18粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值