From dff2c549dd589f56308b98bf67316acfc54b4b60 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Tue, 1 Oct 2024 11:50:35 +0800 Subject: [PATCH] feat: add stock data api --- build.gradle.kts | 1 + gradle/libs.versions.toml | 2 + src/main/kotlin/cn/rtast/fancybot/Const.kt | 3 +- .../commands/lookup/StockDataCommand.kt | 50 +++++++++++++++++++ .../fancybot/entity/stock/StockSymbolQuery.kt | 19 +++++++ 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/lookup/StockDataCommand.kt create mode 100644 src/main/kotlin/cn/rtast/fancybot/entity/stock/StockSymbolQuery.kt diff --git a/build.gradle.kts b/build.gradle.kts index c405c80..253f6a5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,6 +39,7 @@ dependencies { implementation(libs.simple.java.mail) implementation(libs.jsoup) implementation(libs.nashorn.core) + implementation(libs.finnhub) } tasks.build { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 38de203..ac043f0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,7 @@ animatedGifLibVersion = "1.4" simpleJavaMailVersion = "8.11.3" jsoupVersion = "1.18.1" nashornVersion = "15.4" +finnhubVersion = "2.0.20" [libraries] rOneBot = { group = "cn.rtast", name = "ROneBot", version.ref = "ronebotVersion" } @@ -22,6 +23,7 @@ animated-gif-lib = { group = "com.madgag", name = "animated-gif-lib", version.re simple-java-mail = { group = "org.simplejavamail", name = "simple-java-mail", version.ref = "simpleJavaMailVersion" } jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoupVersion" } nashorn-core = { group = "org.openjdk.nashorn", name = "nashorn-core", version.ref = "nashornVersion" } +finnhub = { group = "io.finnhub", name = "kotlin-client", version.ref = "finnhubVersion" } [bundles] diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index d20accf..f85e941 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -104,5 +104,6 @@ val commands = listOf( DMSearchCommand(), LlamaCommand(), QQMusicCommand(), BullShitGenerateCommand(), NiuziRankCommand(), NiuziBankRankCommand(), - ShotSelfCommand(), TenSetuCommand() + ShotSelfCommand(), TenSetuCommand(), + StockDataCommand() ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/StockDataCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/StockDataCommand.kt new file mode 100644 index 0000000..24a9723 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/StockDataCommand.kt @@ -0,0 +1,50 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/10/1 + */ + + +package cn.rtast.fancybot.commands.lookup + +import cn.rtast.fancybot.configManager +import cn.rtast.fancybot.entity.stock.StockSymbolQuery +import cn.rtast.fancybot.util.Http +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.BaseCommand +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.OneBotListener +import cn.rtast.rob.util.ob.asNode + +class StockDataCommand : BaseCommand() { + override val commandNames = listOf("sd", "股票") + + private val apiUrl = "https://proxy.rtast.cn/https/finnhub.io" + private val apiKey = "crtmph1r01qv68qhn8n0crtmph1r01qv68qhn8ng" + + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { + val method = args.first() + when (method) { + "q" -> { + val messages = mutableListOf() + val symbol = args.joinToString(" ") + val response = Http.get( + "$apiUrl/api/v1/search", + mapOf( + "q" to symbol, + "token" to apiKey, + ) + ) + messages.add(MessageChain.Builder().addText("共搜索到${response.count}条结果").build()) + response.result.forEach { + val tempMsg = MessageChain.Builder() + .addText("股票代码: ${it.displaySymbol}(${it.symbol}, ${it.description})") + .build() + messages.add(tempMsg) + } + message.reply(messages.asNode(configManager.selfId)) + } + + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/stock/StockSymbolQuery.kt b/src/main/kotlin/cn/rtast/fancybot/entity/stock/StockSymbolQuery.kt new file mode 100644 index 0000000..95cefae --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/stock/StockSymbolQuery.kt @@ -0,0 +1,19 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/10/1 + */ + + +package cn.rtast.fancybot.entity.stock + +data class StockSymbolQuery( + val count: Int, + val result: List +) { + data class Result( + val description: String, + val displaySymbol: String, + val symbol: String, + ) +} \ No newline at end of file