草庐IT

# 用飞书来谈恋爱,飞书机器人定时给女朋友问好

干净的坏蛋 2023-04-17 原文

目录

用飞书来谈恋爱,飞书机器人定时给女朋友问好

前言

用飞书机器人每天定时给女朋友发今天日期,在一起天数及女朋友所在地天气情况。

后续更新更多定制化好玩的消息内容(距离两个人的生日天数,根据天气温度提醒女朋友加减衣服以及有雨出门带伞,在一起纪念日,及其他有意义的日子提醒)

0.先看1.1版本效果

技术要求

云服务器(或会Github Action) 、Linux基础命令、Spring Boot简单使用

操作步骤

两个人推荐用飞书建一个企业(不用认证,功能比个人版多许多)

准备工作

1.两个人用飞书建一个群,添加群机器人

保存好这个地址,其他暂时不需要

2.申请高德地图API

去登陆申请高德地图API

如下:

记住你的key

官方天气查询教程

查看高德天气的城市编码

3.创建Spring Boot工程,引入Web依赖

不再赘述!

4.制作飞书卡片

制作卡片

具体思路

5.具体思路(实操)

1.引入依赖

	
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>	



<!--        hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.5</version>
        </dependency>

        <!--        lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

2.完整思路

    @RequestMapping("/timingAt8")
    public void timingAt8() {

        log.info("定时任务" + DateUtil.formatDateTime(new Date()));
        // 在一起时间
        String beginDate = "2022-99-19";
        Date date1 = DateUtil.parse(beginDate);
        Date now = new Date();
        long betweenDay = DateUtil.between(date1, now, DateUnit.DAY);
        System.out.println("今天是和XX在一起的第" + betweenDay + "天");


        // 高德地图API  查询天气情况
        // https://restapi.amap.com/v3/weather/weatherInfo?city=自己地区编码&key=高德地图的key&extensions=all"
        String tunLiuUrl = "https://restapi.amap.com/v3/weather/weatherInfo?city=110000&key=150ecc8f5e61733315fb113889c8b1ec&extensions=all";

        String result2 = HttpUtil.get(tunLiuUrl, CharsetUtil.CHARSET_UTF_8);

        
        // 字符串转JSON
        // 在这里(https://www.json.cn/json/jsononline.html)将result2 转成 GaodeResult
        GaodeResult gaodeResult = JSONUtil.toBean(result2, GaodeResult.class);

        if (SUCCESS.equals(gaodeResult.getStatus())) {
            System.out.println("查询成功--");
            List<Forecasts> forecasts = gaodeResult.getForecasts();
            List<Casts> casts = forecasts.get(0).getCasts();
            String province = forecasts.get(0).getProvince();
            String city = forecasts.get(0).getCity();
            Date reporttime = forecasts.get(0).getReporttime();
            String formatReporttime = DateUtil.format(reporttime, "yyyy.MM.dd HH:mm:ss");


            System.out.println("今天天气---");

            Casts live = casts.get(0);
            Date date = live.getDate();
            String formatDate = DateUtil.format(date, "yyyy-MM-dd");
            System.out.println("----------" + formatDate);
            String week = "星期" + live.getWeek();

            String dayWeather = live.getDayweather();
            String nightWeather = live.getNightweather();

            String dayTemp = live.getDaytemp() + "度";
            String nightTemp = live.getNighttemp() + "度";

            String dayWind = live.getDaywind();
            String nightWind = live.getNightwind();

            String daypower = live.getDaypower();
            String nightPower = live.getNightpower();


            System.out.println("今天是 :" + formatDate + "  " + week);
            System.out.println("今天是和臭宝在一起的第" + betweenDay + "天");
            System.out.println("今天天气 :" + "白天 " + dayWeather + "  " + "晚上 " + nightWeather);
            System.out.println("今天温度 :" + "白天 " + dayTemp + "  " + "晚上 " + nightTemp);
            System.out.println("今天风向 :" + "白天 " + dayWind + "  " + "晚上 " + nightWind);


            // 飞书卡片
            String json = "{\n" +
                    "    \"msg_type\": \"interactive\",\n" +
                    "    \"card\": {\n" +
                    "\n" +
                    "  \"config\": {\n" +
                    "    \"wide_screen_mode\": true\n" +
                    "  },\n" +
                    "  \"header\": {\n" +
                    "    \"template\": \"red\",\n" +
                    "    \"title\": {\n" +
                    "      \"content\": \"\uD83D\uDD14 mua~亲爱的臭宝贝 \uD83C\uDF81\",\n" +
                    "      \"tag\": \"plain_text\"\n" +
                    "    }\n" +
                    "  },\n" +
                    "  \"i18n_elements\": {\n" +
                    "    \"zh_cn\": [\n" +
                    "      {\n" +
                    "        \"tag\": \"div\",\n" +
                    "        \"text\": {\n" +
                    "          \"content\": \"**\uD83C\uDF84 今天是:**" + formatDate + "  " + week + "\\n\\n**\uD83C\uDF81 今天是我们在一起的第:" + betweenDay + "天" + "**\",\n" +
                    "          \"tag\": \"lark_md\"\n" +
                    "        }\n" +
                    "      },\n" +
                    "      {\n" +
                    "        \"tag\": \"div\",\n" +
                    "        \"text\": {\n" +
                    "          \"content\": \" " + formatDate + "  " + province + " " + city + "  \\n数据发布的时间 :" + formatReporttime + " \\n今天天气 : " + "白天 " + dayWeather + "  " + "晚上 " + nightWeather + "\\n今天温度 :" + nightTemp + " ~ " + dayTemp + "\\n今天风向 : " + "白天 " + dayWind + "  " + "晚上 " + nightWind + "\\n\\n**祝我的臭宝每天开心,每天爱我的臭宝多一点点 !**\",\n" +
                    "          \"tag\": \"lark_md\"\n" +
                    "        }\n" +
                    "      }\n" +
                    "    ]\n" +
                    "  }\n" +
                    "}\n" +
                    "}";
// 飞书机器人webhook
            String feishuUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/5371db79-7cb2-45ef-bac1-161e2a714XXX";
            String result3 = HttpRequest
                    .post(feishuUrl)
                    .body(json)
                    .execute().body();

        }
    }

6.发布部署

Maven打包项目。

将打包好的jar包上传到服务器的任意位置

我传到了/www/feishu下

然后在当前目录执行

nohup java -jar penn-0.0.1-SNAPSHOT.jar >msg.log 2>&1 &

如果想杀掉运行中的jar程序,查看进程命令为:

ps -aux | grep java

执行

kill -9 

其他部署方案,Github Action 后续完善!!

7.完整代码

完整代码Github

完整代码蓝奏云

参考:

后记

能力有限,第一版本拓展性较差,代码全部写死,不够灵活,后续会不断完善。

欢迎有能力的大佬提供优化思路记更多好玩玩法,不胜感激。

有问题欢迎咨询,有时间就会回复 sunyuan608@gmial.com

时间精力有限,有偿定制,提供服务器!

有关# 用飞书来谈恋爱,飞书机器人定时给女朋友问好的更多相关文章

  1. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  2. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  3. 智能客服 | 浅谈人工智能聊天机器人ChatGPT - 2

    2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动

  4. ruby - 如何让 Selenium/Ruby 机器人在执行操作之前等待? - 2

    我正在构建一个点击元素的Selenium/Ruby网络机器人。问题是,有时在机器人决定找不到元素之前没有足够的时间加载页面。让Selenium在执行操作之前等待的Ruby方法是什么?我更喜欢显式等待,但我也接受隐式等待。我尝试使用wait.until方法:require"selenium-webdriver"require"nokogiri"driver=Selenium::WebDriver.for:chromewait=Selenium::WebDriver::Wait.new(:timeout=>15)driver.navigate.to"http://google.com"dr

  5. ruby - 是否可以使用机器人打开浏览器,手动操作页面,然后继续使用机器人? - 2

    我正在使用Ruby、SeleniumWebDriver和Nokogiri从网页中检索数据。加载正确的HTML后,我打印某个类的内容。例如,require"selenium-webdriver"require"nokogiri"browser=Selenium::WebDriver.for:chromebrowser.get"https://jsfiddle.net"doc=Nokogiri::HTML.parse(browser.page_source)doc.css('.aiButton').map(&:text).join(',')到目前为止,我发现最困难的部分是正确加载正确的HT

  6. ruby-on-rails - 使用 Rails 的 Messenger 机器人 : setup for multiple pages - 2

    我想创建一个供不同用户用于其Facebook页面的MessengerBot。我创建了一个Rails应用程序并使用facebook-messengergem.我成功创建了机器人,当我为一个页面设置时它可以工作。现在,我按照说明让我的机器人在多个Facebook页面上运行(请参阅"Makeaconfigurationprovider"section)。我是Rails的新手,我不确定将类ExampleProvider放在哪里?我把它放在我的config/application.rb文件中:require_relative'boot'require'rails/all'#Requiretheg

  7. ChatGPT陷伦理风波 “纯净版”机器人在赶来的路上 - 2

     近期,AI安全问题闹得沸沸扬扬,多国“禁令”剑指ChatGPT。自然语言大模型采用人类反馈的增强学习机制,也被担心会因人类的偏见“教坏”AI。4月6日,OpenAI官方发声称,从现实世界的使用中学习是创建越来越安全的人工智能系统的“关键组成部分”,该公司也同时承认,这需要社会有足够时间来适应和调整。至于这个时间是多久,OpenAI也没给出答案。大模型背后的“算法黑箱”无法破解,开发它的人也搞不清机器作答的逻辑。十字路口在前,一些自然语言大模型的开发者换了思路,给类似GPT的模型立起规矩,让对话机器人“嘴上能有个把门的”,并“投喂”符合人类利益的训练数据,以便它们输出“更干净”的答案。这些研发

  8. ABB机器人编程基础_手动示教+记录+修改点位数据的具体方法和步骤示例 - 2

    ABB机器人编程基础_手动示教+记录+修改点位数据的具体方法和步骤示例如下图所示,打开示教器,控制柜切换到手动模式,电机上电,找到程序编辑器,点击进入,如下图所示,点击进入例行程序,点击左下角的文件—新建例行程序,如下图所示,新建一个名称为R_PRO1的例行程序,然后点击显示例行程序,如下图所示,进入例行程序R_PRO1,如下图所示,回到主界面,找到手动操纵,点击进入选择机器人的动作模式,这里选择轴1-3进行举例说明,或者可以按下示教器上的快捷键进行快速切换动作模式,选择完成后点击确定,

  9. ruby-on-rails - ActionView::MissingTemplate 错误,仅当被机器人访问时? - 2

    我有一个为我的主页提供服务的操作。它在正常访问时工作正常(即由网络浏览器中的用户访问),但是当被特定的网络爬虫访问时,它会抛出以下错误:AActionView::MissingTemplateoccurredintags#promoted:Missingtemplatetags/promotedwith{:handlers=>[:erb,:rjs,:builder,:rhtml,:rxml],:formats=>["text/*"],:locale=>[:en,:en]}inviewpaths"/Apps/accounts/app/views","/usr/local/rvm/gems

  10. ruby - 从 Slack 机器人访问 Slack 文件 - 2

    我需要一个能够接收和保存从slack聊天室发送的文件的slack机器人。问题是:slack不发送文件内容,而是指向文件的链接数组。其中大部分,包括下载链接都是私有(private)的,无法通过机器人访问。它确实发送了一个公共(public)链接,但该链接指向文件预览,它本身没有文件(here'sanexample)。如何通过机器人访问上传的文件? 最佳答案 当您执行CURL请求时,您可以通过在HTTPheader中提供访问token来从您的机器人访问私有(private)URL。您的token需要具有范围files.read才能获得

随机推荐