Javaで天気を送る機能を実装(コード付き)
無意識のうちに、また梅雨がやってきました。あなたのパートナーはよく傘を忘れますか? このとき、定期的に傘を持ってくるよう促すメールを自動的に送信するプログラムを作成してください。彼女はあなたを尊敬していますか? はい、もちろん、あなたのターゲットが包囲ライオンなら、私はそれについては言いませんでした ~
#テクノロジースタック
Spring Boot 2.3.1
Jdk 1.8
Maven
インスタンスをすばやく作成する以下に示すように https://start.spring.io/ に移動します
クリックGENERATE
解凍してインポートするための zip を作成しますidea
それは Can
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.github.ekko</groupId>
<artifactId>springboot-email</artifactId>
<version>1.0.0</version>
<name>springboot-email</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<!--阿里云主仓库,代理了maven central和jcenter仓库-->
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<!--阿里云代理Spring 官方仓库-->
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://maven.aliyun.com/repository/spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!--阿里云代理Spring 插件仓库-->
<pluginRepository>
<id>spring-plugin</id>
<name>spring-plugin</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories></project>
ログイン後にコピー
天気 API を受け取る新しいエンティティを作成します<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> </parent> <groupId>com.github.ekko</groupId> <artifactId>springboot-email</artifactId> <version>1.0.0</version> <name>springboot-email</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.6.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.70</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <!--阿里云主仓库,代理了maven central和jcenter仓库--> <repository> <id>aliyun</id> <name>aliyun</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <!--阿里云代理Spring 官方仓库--> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://maven.aliyun.com/repository/spring</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <!--阿里云代理Spring 插件仓库--> <pluginRepository> <id>spring-plugin</id> <name>spring-plugin</name> <url>https://maven.aliyun.com/repository/spring-plugin</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories></project>
Weather.java
package com.github.ekko.springtools.model;import lombok.Data;import lombok.NoArgsConstructor;import java.util.List;@Data@NoArgsConstructorpublic class Weather {
private String day;
private String date;
private String week;
//天气情况
private String wea;
private String weaImg;
private String air;
private String humidity;
// 空气质量 优
private String airLevel;
// 空气质量描述:空气很好,可以外出活动,呼吸新鲜空气,拥抱大自然
private String airTips;
private String tem1;
private String tem2;
private String tem;
private List<Whours> hours;}
#
package com.github.ekko.springtools.model;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructorpublic class Whours { // 14日20时 private String day; //中雨 private String wea; //28℃ 实时温度 private String tem; //无持续风向 private String win; // 风速 3-4级 private String winSpeed;}
は https を使用します://www.tianqiapi.com /index 彼らは私にプロモーション料もくれませんでした。ただ、私が長期間使用したことへのご褒美としてでした。
カプセル化された天気 API の簡単なデモンストレーション
天気 API の取得とメール送信のロジック
新しい
EmailService.javaインターフェイス<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>package com.github.ekko.springtools.service;import com.github.ekko.springtools.model.Weather;import java.util.List;public interface EmailService {
boolean sendSimpleMessage();
List<Weather> getWeather();}</pre><div class="contentsignin">ログイン後にコピー</div></div>
実装
インターフェイス<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>package com.github.ekko.springtools.service.impl;import cn.hutool.http.HttpRequest;import cn.hutool.http.HttpUtil;import com.alibaba.fastjson.JSON;import com.github.ekko.springtools.model.Weather;import com.github.ekko.springtools.service.EmailService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Service;import javax.mail.internet.MimeMessage;import java.util.ArrayList;import java.util.List;import java.util.Optional;@Servicepublic class EmailServiceImpl implements EmailService {
private final static String FROM_MAIL = "你的发送邮箱,和配置文件中相同";
private final static String TO_MAIL = "接收人邮箱";
private final static String APPID = "你申请的天气api的appid,自行替换";
private final static String APPSECRET = "你申请的天气api的APPSECRET,自行替换";
public JavaMailSender emailSender;
@Autowired
public void setEmailSender(JavaMailSender emailSender) {
this.emailSender = emailSender;
}
@Override
public boolean sendSimpleMessage() {
try {
MimeMessage message = emailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message, true);
mimeMessageHelper.setTo(TO_MAIL);
mimeMessageHelper.setFrom(FROM_MAIL);
mimeMessageHelper.setSubject("今日份天气到了~~");
mimeMessageHelper.setText(buildHtml(getWeather().get(0)), true);
emailSender.send(message);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public List<Weather> getWeather() {
HttpRequest httpRequest = HttpUtil.createGet("https://www.tianqiapi.com/api?version=v1&" + "appid=" + APPID + "&appsecret=" + APPSECRET + "&cityid=101020100");
String res = httpRequest.execute().body();
Object data = JSON.parseObject(res).get("data");
return JSON.parseArray(JSON.toJSONString(data), Weather.class);
}
private String buildHtml(Weather weather) {
StringBuffer html = new StringBuffer("");
html.append("<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
"<meta charset=\"utf-8\">\n" +
"<title>文档标题</title>\n" +
"</head><body>");
if (weather.getWea().contains("雨")) {
html.append("<h1 id="今日有雨-狗子请带伞">今日有雨,狗子请带伞!</h1>");
}
html.append("<hr/><h3 id="今日天气如下">今日天气如下</h3><table><tr><th>时间</th><th>天气</th><th>温度</th></tr>");
Optional.ofNullable(weather.getHours())
.orElse(new ArrayList<>())
.forEach(whours -> {
html.append("<tr><td>")
.append(whours.getDay())
.append("</td><td>")
.append(whours.getWea())
.append("</td><td>")
.append(whours.getTem())
.append("</td></tr>");
});
html.append("</table></body>" +
"</html>");
return html.toString();
}}</pre><div class="contentsignin">ログイン後にコピー</div></div>
##コード内の #APPID
APPSECRET
アカウント情報の送信を設定します
ここでは、 Tencent メールボックスを例に挙げると、まずメール送信用の認証コードを取得します。
SMTP
アドレスとそのメールボックスのリンクをクエリすると、
使用SSL的通用配置如下: 接收邮件服务器:pop.qq.com,使用SSL,端口号995 发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587 账户名:您的QQ邮箱账户名(如果您是VIP帐号或Foxmail帐号,账户名需要填写完整的邮件地址) 密码:您的QQ邮箱密码 电子邮件地址:您的QQ邮箱的完整邮件地址
が表示されます。
Configuration application.properties
server.port=9090 server.servlet.context-path=/mail spring.mail.host=smtp.qq.com spring.mail.port=465 spring.mail.username=你的邮箱地址 spring.mail.password=刚刚获取的授权码 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.ssl.enable=true spring.mail.properties.mail.smtp.starttls.enable=true
コントロール層
Statement@EnableSchedulingスケジュールされたタスク
時間式を設定します指定されたメソッド@Scheduled(cron = "0 0 8 * * ? ")
package com.github.ekko.springtools.controller;import com.github.ekko.springtools.model.Weather;import com.github.ekko.springtools.service.EmailService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController@EnableSchedulingpublic class MailController { private EmailService emailService; @Autowired public void setEmailService(EmailService emailService) { this.emailService = emailService; } @GetMapping("/send") @Scheduled(cron = "0 0 23 * * ? ") public boolean sendEmail() { return emailService.sendSimpleMessage(); } @GetMapping("get-weather") public List<Weather> getWeather() { return emailService.getWeather(); }}
スタートアップクラス
直接開始SpringbootEmailApplication
package com.github.ekko.springtools;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringbootEmailApplication { public static void main(String[] args) { SpringApplication.run(SpringbootEmailApplication.class, args); }}
効果
ちょっと醜いですが、使って自分で美化してください
以上がJavaで天気を送る機能を実装(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです
