Android Kotlin 유튜브 검색 API로 동영상 정보 처리하기
유튜브 검색 API를 사용하여 검색된 동영상의 정보를 적절하게 표시하기 위한 코드를 소개합니다.
동영상의 업로드 시간을 사용자 친화적으로 표시합니다.
companion object {
const val MIN = 60
const val HOUR = 60 * 60
const val DAY = 60 * 60 * 24
const val MONTH = 60 * 60 * 24 * 30
const val YEAR = 60 * 60 * 24 * 365
}
fun convertPublishedDate(publishedDate: String): String {
val result = StringBuilder()
try {
val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.getDefault())
simpleDateFormat.timeZone = TimeZone.getTimeZone("GMT")
val convertedPublishedTime =
simpleDateFormat.parse(publishedDate)?.time ?: 0L
val currentTime = System.currentTimeMillis()
val diff = (currentTime - convertedPublishedTime) / 1000
when {
diff < MIN -> {
result.append(diff).append("초전")
}
diff < HOUR -> {
result.append(diff / MIN).append("분전")
}
diff < DAY -> {
result.append(diff / HOUR).append("시간전")
}
diff < MONTH -> {
result.append(diff / DAY).append("일전")
}
diff < YEAR -> {
result.append(diff / MONTH).append("달전")
}
else -> {
result.append(diff / YEAR).append("년전")
}
}
} catch (e: ParseException) {
return ""
}
return result.toString()
}
정수 형태의 조회수를 천 회
, 만 회
같은 형태로 변환합니다.
fun convertViewCount(viewCount: String): String {
val result = StringBuilder()
try {
val longViewCount = viewCount.replace(".", "").replace(",", "").toLong()
when {
longViewCount < 1000 -> {
result.append(longViewCount / 100).append("백회")
}
longViewCount < 10_000 -> {
result.append(longViewCount / 1_000).append("천회")
}
longViewCount < 100_000_000 -> {
result.append(longViewCount / 10_000).append("만회")
}
else -> {
result.append(longViewCount / 100_000_000).append("억회")
}
}
} catch (e: NumberFormatException) {
return result.toString()
}
return result.toString()
}
ISO 8601 포맷의 영상 길이를 시:분:초 형태로 변환 합니다.
fun convertDurationToHHMMSS(duration: String): String {
val regexMap: HashMap<String, String> = HashMap()
val regex2two = "(?<=[^\\d])(\\d)(?=[^\\d])"
val two = "0$1"
regexMap["PT(\\d\\d)S"] = "00:$1"
regexMap["PT(\\d\\d)M"] = "$1:00"
regexMap["PT(\\d\\d)H"] = "$1:00:00"
regexMap["PT(\\d\\d)M(\\d\\d)S"] = "$1:$2"
regexMap["PT(\\d\\d)H(\\d\\d)S"] = "$1:00:$2"
regexMap["PT(\\d\\d)H(\\d\\d)M"] = "$1:$2:00"
regexMap["PT(\\d\\d)H(\\d\\d)M(\\d\\d)S"] = "$1:$2:$3"
val d: String = duration.replace(
regex2two.toRegex(), two
)
getRegex(regexMap, d)?.let {
return d.replace(it.toRegex(), regexMap[it]!!)
} ?: return "00:00"
}