Skip to content

Commit

Permalink
Skrapers refactoring (#129)
Browse files Browse the repository at this point in the history
  • Loading branch information
sokomishalov committed Feb 27, 2021
1 parent 595cde2 commit 09f1a3d
Show file tree
Hide file tree
Showing 16 changed files with 291 additions and 272 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -326,13 +326,13 @@ There is "static" method which allows to download any media from all known imple
suspend fun main() {
val tmpDir = Files.createTempDirectory("skraper").toFile()

val testVideo = Skraper.download(
val testVideo = Skrapers.download(
media = Video("https://youtu.be/fjUO7xaUHJQ"),
destDir = tmpDir,
filename = "Gandalf"
)

val testImage = Skraper.download(
val testImage = Skrapers.download(
media = Image("https://www.pinterest.ru/pin/89509111320495523/"),
destDir = tmpDir,
filename = "Do_no_harm"
Expand Down
14 changes: 6 additions & 8 deletions cli/src/main/kotlin/ru/sokomishalov/skraper/cli/Args.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,23 @@ package ru.sokomishalov.skraper.cli

import com.xenomachina.argparser.ArgParser
import com.xenomachina.argparser.default
import ru.sokomishalov.skraper.Skraper
import ru.sokomishalov.skraper.Skrapers
import ru.sokomishalov.skraper.cli.Serialization.LOG
import ru.sokomishalov.skraper.client.ktor.KtorSkraperClient
import ru.sokomishalov.skraper.knownList
import ru.sokomishalov.skraper.name
import java.io.File

class Args(parser: ArgParser) {

companion object {
internal val DEFAULT_CLIENT = KtorSkraperClient()
internal val SKRAPERS = Skraper.knownList(client = DEFAULT_CLIENT)
init {
Skrapers.setClient(KtorSkraperClient())
}

val skraper by parser.positional(
name = "PROVIDER",
help = "skraper provider, options: ${SKRAPERS.joinToString { it.name }}"
help = "skraper provider, options: ${Skrapers.available().joinToString { it.name }}"
) {
SKRAPERS
Skrapers
.available()
.find { this == it.name }
.let { requireNotNull(it) { "Unknown provider" } }
}
Expand Down
12 changes: 4 additions & 8 deletions cli/src/main/kotlin/ru/sokomishalov/skraper/cli/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,8 @@ import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.runBlocking
import ru.sokomishalov.skraper.Skraper
import ru.sokomishalov.skraper.cli.Args.Companion.DEFAULT_CLIENT
import ru.sokomishalov.skraper.download
import ru.sokomishalov.skraper.Skrapers
import ru.sokomishalov.skraper.model.Post
import ru.sokomishalov.skraper.name
import java.io.File
import java.time.LocalDateTime.now
import java.time.format.DateTimeFormatter.ofPattern
Expand All @@ -40,7 +37,7 @@ import kotlin.text.Charsets.UTF_8
fun main(args: Array<String>) = mainBody(columns = 100) {
val parsedArgs = ArgParser(args = args.ifEmpty { arrayOf("--help") }).parseInto(::Args)

with(t) { println("${green("Skraper")} ${magenta("v.0.5.1")} started") }
with(t) { println("${green("Skraper")} ${magenta("v.0.7.0")} started") }

val posts = runBlocking {
parsedArgs.skraper.getPosts(
Expand Down Expand Up @@ -69,14 +66,13 @@ private fun List<Post>.persistMedia(parsedArgs: Args) {
post.media.mapIndexed { index, media ->
async {
runCatching {
Skraper.download(
Skrapers.download(
media = media,
destDir = targetDir,
filename = when (post.media.size) {
1 -> post.id
else -> "${post.id}_${index + 1}"
},
client = DEFAULT_CLIENT
}
)
}.onSuccess { path ->
println(path)
Expand Down
9 changes: 3 additions & 6 deletions skrapers/src/main/kotlin/ru/sokomishalov/skraper/Skraper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ import ru.sokomishalov.skraper.model.*
interface Skraper {

/**
* added for some static extensions
* @return provider name
*/
companion object
val name: String get() = this::class.java.simpleName.removeSuffix("Skraper").toLowerCase()

/**
* @return provider base url
Expand All @@ -50,10 +50,7 @@ interface Skraper {
/**
* @return provider info
*/
suspend fun getProviderInfo(): ProviderInfo? = ProviderInfo(
name = name,
logo = baseUrl.buildFullURL(path = "/favicon.ico").toImage()
)
suspend fun getProviderInfo(): ProviderInfo? = ProviderInfo(name, baseUrl.buildFullURL(path = "/favicon.ico").toImage())

/**
* @param path page specific url path (should start with "/")
Expand Down
179 changes: 0 additions & 179 deletions skrapers/src/main/kotlin/ru/sokomishalov/skraper/SkraperExtensions.kt

This file was deleted.

Loading

0 comments on commit 09f1a3d

Please sign in to comment.