- INFO
-
Para poder replicar esta funcionalidad necesitaras una cuenta en una instancia Mastodon o Pleroma y crear un Token con ella
Se me ha ocurrido (idea nada brillante) hacerme una tarea Gradle en el proyecto del blog para poder tootear el enlace a un post
No es nada del otro mundo. Mi blog es un static site hecho con JBake usando Gradle y Asciidoctor así que básicamente es crear una tarea nueva en el buildSrc
buildSrc/src/main/groovy/MastodonTask.groovy
import org.gradle.api.DefaultTask
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
import groovy.xml.XmlSlurper
import groovy.json.JsonOutput
import java.net.http.*
abstract class MastodonTask extends DefaultTask{
@Input
abstract Property<String> getInstance()
@Input
abstract Property<String> getToken()
@Input
abstract Property<String> getPostId()
@TaskAction
def runTask() {
def xml = new XmlSlurper().parse("https://jorge.aguilera.soy/feed.xml")
def entry = xml.entry.find{ "$it.id".endsWith( postId.get()+".html")}
if( !entry ) {
println("Post no encontrado")
return
}
def hashtags = entry.category.collect{ "#"+it."@term"}.join(' ')
def toot = """
🗣️ Nuevo post en el blog
$entry.title
📖 ${entry.summary}
$hashtags
${entry.id}
"""
def json = JsonOutput.toJson([status: toot])
def client = HttpClient.newHttpClient()
def request = HttpRequest.newBuilder()
.header("Content-Type", "application/json; charset=UTF-8")
.header("Authorization", "Bearer ${token.get()}")
.uri(URI.create(instance.get()+'/api/v1/statuses'))
.POST(HttpRequest.BodyPublishers.ofString(json))
.build()
client.send(request, HttpResponse.BodyHandlers.ofString())
}
}
y crear una task en el build.gradle
para llamarla en nuestro pipeline
build.gradle
tasks.register('tootea', MastodonTask){
instance = "https://jvm.social"
token = findProperty("BLOG_ACCESS_TOKEN")
postId = findProperty("postId")
}
Simplemente, una vez que hemos generado y publicado el blog con el ultimo post, ejecutaremos la tarea de gradle para que tootee por nosotros
./gradlew tootea mi-ultimo-post
Top comments (0)