Springboot+Slake botで地下鉄のお知らせを送ります
16160 ワード
特定の時間帯に同じ地下鉄に乗るので、乗る時間内に地下鉄情報は便乗でお知らせします.
依存性を追加して、devtoolsで以前に作成したクエリーに従ってインポートします.
application.ymlファイルにurl、portを指定し、
スケジューラを使用して、特定の時間に通知を発行します.固定されたcron正規表現を使用して時間を指定できます.今回はログステータスと同様にcron正規表現を使用します.
🙌 ゆとり伝送結果
1.依存性の追加
依存性を追加して、devtoolsで以前に作成したクエリーに従ってインポートします.
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client'
implementation 'co.elastic.clients:elasticsearch-java:7.16.3'
2.弾性接続
application.ymlファイルにurl、portを指定し、
@Value
をインポートします.また,フレックスコネクション方式では,HighLevelClientを用いてコネクションを行う. @Value(value = "${elasticsearch.host}")
String url;
@Value(value = "${elasticsearch.port}")
int port;
static RestHighLevelClient client;
public void init()
{
client = new RestHighLevelClient(
RestClient.builder(
new HttpHost(url, port, "http")));
}
3.クエリーの作成
public Map<String,Object> search_one(String name,String text)throws IOException {
init();
Map<String, Object> result = null;
//조회 할 인덱스 지정
SearchRequest searchRequest = new SearchRequest("realtime-subway");
//쿼리 지정
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery(name, text))
.sort(new FieldSortBuilder("realtimeArrivalList.recptnDt").order(SortOrder.DESC));
searchSourceBuilder.from(0);
searchSourceBuilder.size(1);
//searchRequset에 빌더 지정
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
for (SearchHit s : searchResponse.getHits().getHits()) {
result = s.getSourceAsMap();
}
return result;
} catch (IOException e) {
System.err.println("Elastic search fail");
}
return null;
}
以前devtoolsで作成したクエリーに従ってインポートします.matchQueryを使用して特定の態様を検索し、recptnDt規格を使用して降順ソートして最新のデータを取得します.4.スプリングスケジューラ
スケジューラを使用して、特定の時間に通知を発行します.固定されたcron正規表現を使用して時間を指定できます.今回はログステータスと同様にcron正規表現を使用します.
@RequiredArgsConstructor
@Configuration
@EnableScheduling
public class SlackScheduler {
private final SlackService slackService;
private final ElasticService elasticService;
@Scheduled(cron="0/60 * * * * *") //1분에 한 번씩
public void slackScheduler() throws IOException {
String responseMessage = subway();
//슬랙 메시지 전송
slackService.postSlackMessage(responseMessage);
}
private String subway() throws IOException {
Map<String, Object> result = elasticService.search_one("realtimeArrivalList.trainLineNm", "이수");
String responseMessage = "🚊 지하철 알림 🚊"+ "\n";
//메시지 파싱
String[] results = result.get("realtimeArrivalList").toString()
.replace("{","").replace("}","")
.split(",");
for (String s : results) {
String[] split = s.split("=");
System.out.println(split[0]);
responseMessage += split[1] +"\n";
}
return responseMessage;
}
}
Elasticから持ってきたデータを適切にグループ化してパンツにメッセージを送る.テストは1分おきに行われ、以下のクローン@Scheduled(cron = "0 0 18 ? * MON-FRI")
を使用して平日18時に通知を送信できます.🙌 ゆとり伝送結果
Reference
この問題について(Springboot+Slake botで地下鉄のお知らせを送ります), 我々は、より多くの情報をここで見つけました https://velog.io/@jimin3263/Springboot-Slack-bot-으로-지하철-알림-보내기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol