[JAVA] Sind Sie immer noch erschöpft von der Beispielvideosuche? Eine Schaltfläche zum Senden von FANZA-Videos an Slack, wenn diese gedrückt wird.

Überblick

Zweck

Ziel

Eine solche.

Annahmen (Umwelt usw.)

Quellcode

https://github.com/yu-suke-dev/fanza-bot

Ein Projekt erstellen

Plug-In installieren

Starten Sie das Projekt

Die Projekthierarchie sieht folgendermaßen aus:

[sample]
   ├── HelloWorldFunction
   │   ├── build.gradle
   │   ├── gradle
   │   │   └── wrapper
   │   │       ├── gradle-wrapper.jar
   │   │       └── gradle-wrapper.properties
   │   ├── gradlew
   │   ├── gradlew.bat
   │   └── src
   │       ├── main
   │       │   └── java
   │       │       └── helloworld
   │       │           ├── App.java
   │       │           └── GatewayResponse.java
   │       └── test
   │           └── java
   │               └── helloworld
   │                   └── AppTest.java
   ├── README.md
   ├── sample.iml
   └── template.yaml

Durch Kotlin ersetzen.

build.gradle


plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.40'
}

apply plugin: 'kotlin'

repositories {
    mavenCentral()
}

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

jar {
    manifest {
        attributes('Main-Class': 'fanza.App')
    }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

dependencies {
    compile "com.amazonaws:aws-lambda-java-core:1.2.0"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.40"
    compile "com.squareup.okhttp3:okhttp:3.9.0"
    compile "org.json:json:20180813"
    testCompile "junit:junit:4.12"
}
[src]
  ├── main
  │   └── kotlin
  │       └── fanza
  │           └── App.java
  └── test
  │   └── java
  │       └── fanza
  │           └── AppTest.java

App.kt


package fanza

import com.amazonaws.services.lambda.runtime.Context
import com.amazonaws.services.lambda.runtime.RequestHandler
import okhttp3.MediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody
import org.json.JSONObject
import java.io.IOException

/**
 * Handler for requests to Lambda function.
 */
class App : RequestHandler<Any, Any> {

    /**
     * called method
     */
    override fun handleRequest(input: Any, context: Context): Any {

        try {
            //ID für Fanza-API erforderlich
            var fanzaApiId = System.getenv("FANZA_API_ID")
            var affiliateId = System.getenv("FANZA_AFFILIATE_ID")

            //Erstellen Sie die URL, nach der Sie suchen möchten
            val fanzaUrl: String = "https://api.dmm.com/affiliate/v3/ItemList"
                    .plus("?api_id=$fanzaApiId")
                    .plus("&affiliate_id=$affiliateId")
                    .plus("&site=FANZA&service=digital&floor=videoa")
                    .plus("&hits=20&sort=date&keyword=Amateur&output=json")

            //GET nach FANZA
            val fanzaInfo = get(fanzaUrl).replace("\\", "")

            //Regulärer Ausdruck des Teils, den Sie extrahieren möchten
            val regex = Regex("https://www.dmm.co.jp/litevideo/-/part/=/cid=[a-z]{3,5}[0-9]{3,5}/size=720_480/")

            //Extrahieren Sie zufällig eine aus den extrahierten Ergebnissen
            val result: String = regex.findAll(fanzaInfo)
                    .map { it.value }
                    .toList()
                    .random()

            //Slack Webhook URL
            var slackUrl: String = System.getenv("SLACK_URL")

            //Was soll ich an Slack senden?
            var slackJson = JSONObject()
            slackJson.put("channel", "#fanza")
            slackJson.put("username", "fanza-bot")
            slackJson.put("text", result)
            slackJson.put("icon_emoji", ":womens:")

            //post senden
            post(slackUrl, slackJson.toString())

            return "Success"

        } catch (e: IOException) {
            return RuntimeException(e)
        }
    }

    /**
     * get
     */
    @Throws(IOException::class)
    operator fun get(url: String): String {
        val request = Request.Builder()
                .url(url)
                .header("Content-Type", "application/json")
                .addHeader("X-Custom-Header", "application/json")
                .build()
        val client = OkHttpClient.Builder().build()
        val response = client.newCall(request).execute()
        return response.body()!!.string()
    }

    /**
     * post
     */
    @Throws(IOException::class)
    fun post(url: String, json: String): String {
        val body = RequestBody
                .create(MediaType.parse("application/json; charset=utf-8"), json)
        val request = Request.Builder()
                .url(url)
                .put(body)
                .build()
        val client = OkHttpClient()
        return client.newCall(request).execute().body()!!.string()
    }
}

Umgebungsvariablen einstellen

runtime local-app env

Funktionsprüfung

Ausführungsergebnis

Jar-Datei erstellen

gradle jar

Auf Lambda hochladen

Verknüpfung von AWS IoT Button und AWS Lambda

Ausführungsergebnis

Drücken Sie den Knopf. (Pochi)

Zusammenfassung

Referenzierter Artikel (Danke)

Recommended Posts

Sind Sie immer noch erschöpft von der Beispielvideosuche? Eine Schaltfläche zum Senden von FANZA-Videos an Slack, wenn diese gedrückt wird.
Sind Sie immer noch erschöpft von der Beispielvideosuche? Eine Schaltfläche zum Senden von FANZA-Videos an Slack, wenn diese gedrückt wird.
Führen Sie Docker in die Anwendung ein, die Sie erstellen
Verwenden Sie die Standardmethode der Schnittstelle ordnungsgemäß?
Sind Sie noch erschöpft von der Implementierung der Suchfunktion? Gem'ransack ', der sofort implementiert werden kann
So führen Sie einen bestimmten Vorgang aus, wenn die Zurück-Taste im Android-Fragment gedrückt wird
Wenn Sie einen Anruf erhalten, senden Sie eine SMS an diese Nummer