Как стать автором
Обновить

Комментарии 5

Получалось так распарсить больше 100 строк?

Да, сейчас проверил, дошел до 12000 строк, дальше надоело)
Строки размером по 8 столбцов

Где описывается класс ResponseBody ?
AS предложила импортировать okhttp3.ResponseBody, но при выполнении выдает ошибку:java.lang.IllegalArgumentException: Unable to create call adapter for class okhttp3.ResponseBody

import com.google.gson.GsonBuilder
import com.google.gson.annotations.SerializedName
import okhttp3.ResponseBody
import retrofit2.Retrofit
import retrofit2.http.GET

data class ResponseWrapper(
    @SerializedName("version") val version: String,
    @SerializedName("reqId") val reqId: String,
    @SerializedName("status") val status: String,
    @SerializedName("sig") val sig: String,
    @SerializedName("table") val table: Table
)

data class Table(
    @SerializedName("cols") val cols: List<Column>,
    @SerializedName("rows") val rows: List<Row>,
    @SerializedName("parsedNumHeaders") val parsedNumHeaders: Int
)

data class Column(
    @SerializedName("id") val id: String,
    @SerializedName("label") val label: String,
    @SerializedName("type") val type: String
)

data class Row(
    @SerializedName("c") val cells: List<Cell?>
)

data class Cell(
    @SerializedName("v") val value: String
)

interface GSheetsService {
    @GET("gviz/tq?tqx=out:json")
    suspend fun getSheetData(): ResponseBody
}

fun String.dataToJsonString(): String =
    substringAfter("Query.setResponse(").let {
        it.substring(0, it.lastIndex - 1)
    }
    
fun String.getResponseFromJson(): ResponseWrapper =
    GsonBuilder().setLenient().create()
        .fromJson(this, ResponseWrapper::class.java)


override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val gSService = Retrofit.Builder()
            .baseUrl(
                "https://docs.google.com/spreadsheets/d/<ID документа>/"
            ).build().create(GSheetsService::class.java)
        lifecycleScope.launch(Dispatchers.IO) {
            val response = gSService.getSheetData().string().dataToJsonString().getResponseFromJson()
            Log.d("response", "$response")
        }
    }

Ну и конечно же, я не говорю про разрешение на использование интернета)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории