diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 68454df..9989ada 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -53,13 +53,11 @@ dependencies { implementation("androidx.recyclerview:recyclerview:1.3.2") implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-simplexml:2.9.0") - dependencies { - implementation("com.squareup.retrofit2:retrofit:2.9.0") - implementation("com.squareup.retrofit2:converter-simplexml:2.9.0") - implementation("com.squareup.okhttp3:okhttp:4.11.0") - implementation("com.squareup.moshi:moshi-kotlin:1.15.0") + implementation("com.squareup.okhttp3:okhttp:4.11.0") + implementation("com.squareup.moshi:moshi-kotlin:1.15.0") + implementation("org.jsoup:jsoup:1.15.4") + implementation("com.squareup.retrofit2:converter-scalars:2.9.0") - } testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) diff --git a/app/src/main/java/com/example/curation_train_app/HtmlClient.kt b/app/src/main/java/com/example/curation_train_app/HtmlClient.kt new file mode 100644 index 0000000..9388b8b --- /dev/null +++ b/app/src/main/java/com/example/curation_train_app/HtmlClient.kt @@ -0,0 +1,10 @@ +package com.example.curation_train_app + +import okhttp3.ResponseBody +import retrofit2.Call +import retrofit2.http.GET + +interface HtmlClient { + @GET("kinki.html") + fun getHtml(): Call +} \ No newline at end of file diff --git a/app/src/main/java/com/example/curation_train_app/MainActivity.kt b/app/src/main/java/com/example/curation_train_app/MainActivity.kt index dc0999b..cfea379 100644 --- a/app/src/main/java/com/example/curation_train_app/MainActivity.kt +++ b/app/src/main/java/com/example/curation_train_app/MainActivity.kt @@ -10,9 +10,18 @@ import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView import androidx.activity.ComponentActivity +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.example.curation_train_app.ai.AiClient import com.example.curation_train_app.CharacterSettings +import retrofit2.Retrofit +import okhttp3.ResponseBody +import org.jsoup.Jsoup + +import retrofit2.converter.scalars.ScalarsConverterFactory +import retrofit2.http.GET +import retrofit2.Call + class MainActivity : ComponentActivity() { @@ -26,7 +35,7 @@ class MainActivity : ComponentActivity() { val drawableId = when (charId) { "reimu" -> R.drawable.reimu_normal "marisa" -> R.drawable.marisa_normal - "flan" -> R.drawable.flandre_normal + "flandre" -> R.drawable.flandre_normal "sanae" -> R.drawable.sanae_normal "akane" -> R.drawable.akane_normal "momoka" -> R.drawable.momoka_normal @@ -63,18 +72,17 @@ class MainActivity : ComponentActivity() { } - + loadTraffic() loadRss() - // ▼ リリース枠(表示テスト) ▼ - val releaseBox = findViewById(R.id.layoutRelease) - val releaseTitle = findViewById(R.id.textReleaseTitle) - val releaseBody = findViewById(R.id.textReleaseBody) - releaseTitle.text = "JR西日本:新着情報" - releaseBody.text = "最新リリースがここに入る" + val recyclerNews = findViewById(R.id.recyclerNews) + recyclerNews.layoutManager = + LinearLayoutManager(this) + + + - releaseBox.visibility = View.VISIBLE // ▲ リリース枠 ▲ // ▼ 地域セレクト画面へ ▼ @@ -136,6 +144,84 @@ class MainActivity : ComponentActivity() { }.start() } + private fun loadTraffic() { + Thread { + try { + val retrofit = Retrofit.Builder() + .baseUrl("https://trafficinfo.westjr.co.jp/") + .addConverterFactory(ScalarsConverterFactory.create()) + .build() + + val client = retrofit.create(HtmlClient::class.java) + + val response = client.getHtml().execute() + val html = response.body()?.string() ?: "" + + val doc = Jsoup.parse(html) + val items = mutableListOf() + + val list = doc.select("div.jisyo") // ← 運行情報の1ブロック + + for (block in list) { + val title = block.select("h2.jisyo_title").text() + val body = block.select("div.jisyo_contents p").text() + + if (title.isNotEmpty()) { + items.add( + NewsItem( + company = "JR西日本", + title = title, + body = body + ) + ) + } + } + + // --- 総合判定 --- + var hasSuspension = false + var hasDelay = false + var hasInfo = false + + for (item in items) { + when (item.company) { // ← company に status 入れてるよね? + "運転見合わせ" -> hasSuspension = true + "遅延" -> hasDelay = true + "情報あり" -> hasInfo = true + } + } + + val resultTitle = when { + hasSuspension -> "運転見合わせがあります" + hasDelay -> "遅延が発生しています" + hasInfo -> "運行に関するお知らせがあります" + else -> "平常運転" + } + + + + runOnUiThread { + // 最上段のテキスト書き換え + val titleView = findViewById(R.id.textTitle) + titleView.text = "近畿エリア:$resultTitle" + + // RecyclerView を更新 + val recycler = findViewById(R.id.recyclerNews) + recycler.adapter = NewsAdapter(items) + } + + + } catch (e: Exception) { + e.printStackTrace() + } + }.start() + } + + + + + + + fun emotionToExpression(type: EmotionType): String { return when (type) { EmotionType.HAPPY -> "happy" diff --git a/app/src/main/java/com/example/curation_train_app/RssApi.kt b/app/src/main/java/com/example/curation_train_app/RssApi.kt index a63f698..ea91a26 100644 --- a/app/src/main/java/com/example/curation_train_app/RssApi.kt +++ b/app/src/main/java/com/example/curation_train_app/RssApi.kt @@ -2,11 +2,12 @@ package com.example.curation_train_app import retrofit2.Retrofit import retrofit2.converter.simplexml.SimpleXmlConverterFactory +import android.util.Log class RssApi { private val retrofit = Retrofit.Builder() - .baseUrl("https://www.westjr.co.jp/press/article/index.xml") + .baseUrl("https://www.westjr.co.jp/press/article/") .addConverterFactory(SimpleXmlConverterFactory.create()) .build() @@ -14,7 +15,15 @@ class RssApi { fun loadRss(): RssFeed? { val response = client.getFeed().execute() + + Log.d( + "RSS_DEBUG", + "code=${response.code()}, body=${response.body()}, error=${response.errorBody()?.string()}" + ) + return response.body() } + + } diff --git a/app/src/main/java/com/example/curation_train_app/RssClient.kt b/app/src/main/java/com/example/curation_train_app/RssClient.kt index 49970f2..5ade4ea 100644 --- a/app/src/main/java/com/example/curation_train_app/RssClient.kt +++ b/app/src/main/java/com/example/curation_train_app/RssClient.kt @@ -2,8 +2,12 @@ package com.example.curation_train_app import retrofit2.Call import retrofit2.http.GET +import okhttp3.ResponseBody interface RssClient { - @GET("article/index.xml") + + @GET("index.xml") fun getFeed(): Call } + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index bc50651..95368a0 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -25,7 +25,8 @@ android:text="○○線:平常運転" android:textSize="18sp" android:textStyle="bold" - android:paddingBottom="8dp" /> + android:paddingBottom="8dp" + /> + android:visibility="gone"> + android:textSize="12sp" + android:visibility="gone"/> + android:layout_marginTop="4dp" + android:visibility="gone"/> @@ -109,7 +112,7 @@