usar cobalt para tiktok + subir imagenes con audio
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
79fdc8b479
commit
892af35ea3
6 changed files with 128 additions and 13 deletions
|
@ -8,9 +8,14 @@ type Responder interface {
|
|||
Respond(url *url.URL) (*Uploadable, Error)
|
||||
}
|
||||
type Uploadable struct {
|
||||
Url string
|
||||
VideoUrl string
|
||||
*ImagesWithAudio
|
||||
Caption string
|
||||
}
|
||||
type ImagesWithAudio struct {
|
||||
ImageUrls []string
|
||||
AudioUrl string
|
||||
}
|
||||
|
||||
type Error uint8
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ func (r *Instagram) Respond(url *url.URL) (*common.Uploadable, common.Error) {
|
|||
}
|
||||
|
||||
return &common.Uploadable{
|
||||
Url: lookup.VideoUrl,
|
||||
VideoUrl: lookup.VideoUrl,
|
||||
Caption: "instagram.com/" + lookup.Author,
|
||||
}, common.OK
|
||||
}
|
||||
|
|
28
main.go
28
main.go
|
@ -95,7 +95,31 @@ func (config Config) handleMessage(bot *tgbotapi.BotAPI, update tgbotapi.Update)
|
|||
}
|
||||
|
||||
if uploadable != nil {
|
||||
res := tgbotapi.NewVideo(update.Message.Chat.ID, FileURL(uploadable.Url))
|
||||
if uploadable.ImagesWithAudio != nil {
|
||||
var files []interface{}
|
||||
for _, u := range uploadable.ImagesWithAudio.ImageUrls {
|
||||
files = append(files,
|
||||
tgbotapi.NewInputMediaPhoto(tgbotapi.FileURL(u)),
|
||||
)
|
||||
}
|
||||
log.Println(files)
|
||||
mediaGroup := tgbotapi.NewMediaGroup(update.Message.Chat.ID, files)
|
||||
mediaGroup.ReplyToMessageID = update.Message.MessageID
|
||||
|
||||
msgs, err := bot.SendMediaGroup(mediaGroup)
|
||||
if err != nil {
|
||||
log.Println("Error subiendo", url.String(), err)
|
||||
bot.Send(respondWithMany(update.Message, "Hubo un error al descargar ", url.String(), "."))
|
||||
}
|
||||
res := tgbotapi.NewAudio(update.Message.Chat.ID, FileURL(uploadable.AudioUrl))
|
||||
res.ReplyToMessageID = msgs[0].MessageID
|
||||
_, err = bot.Send(res)
|
||||
if err != nil {
|
||||
log.Println("Error subiendo", url.String(), err)
|
||||
bot.Send(respondWithMany(update.Message, "Hubo un error al descargar ", url.String(), "."))
|
||||
}
|
||||
} else {
|
||||
res := tgbotapi.NewVideo(update.Message.Chat.ID, FileURL(uploadable.VideoUrl))
|
||||
res.ReplyToMessageID = update.Message.MessageID
|
||||
res.Caption = uploadable.Caption
|
||||
_, err := bot.Send(res)
|
||||
|
@ -103,6 +127,8 @@ func (config Config) handleMessage(bot *tgbotapi.BotAPI, update tgbotapi.Update)
|
|||
log.Println("Error subiendo", url.String(), err)
|
||||
bot.Send(respondWithMany(update.Message, "Hubo un error al descargar ", url.String(), "."))
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if explicit && érror == common.NotValid {
|
||||
|
|
84
tiktok/cobalt.go
Normal file
84
tiktok/cobalt.go
Normal file
|
@ -0,0 +1,84 @@
|
|||
package tiktok
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"nulo.in/dlbot/common"
|
||||
)
|
||||
|
||||
// https://github.com/wukko/cobalt/blob/current/docs/api.md
|
||||
|
||||
type jsonRequest struct {
|
||||
Url string `json:"url"`
|
||||
}
|
||||
|
||||
type jsonResponse struct {
|
||||
Status string `json:"status"`
|
||||
Text string `json:"text"`
|
||||
Url string `json:"url"`
|
||||
PickerType string `json:"pickerType"`
|
||||
Picker []struct {
|
||||
Url string `json:"url"`
|
||||
} `json:"picker"`
|
||||
AudioUrl string `json:"audio"`
|
||||
}
|
||||
|
||||
func (r *TikTok) cobaltLookup(urlS string) (*common.Uploadable, error) {
|
||||
jsonReq := jsonRequest{
|
||||
Url: urlS,
|
||||
}
|
||||
reqByt, err := json.Marshal(jsonReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req, err := http.NewRequest(
|
||||
"POST",
|
||||
"https://co.wuk.sh/api/json",
|
||||
bytes.NewReader(reqByt),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Accept", "application/json")
|
||||
resp, err := r.Client.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var jsonRes jsonResponse
|
||||
err = json.NewDecoder(resp.Body).Decode(&jsonRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if jsonRes.Status == "error" {
|
||||
return nil, errors.New("cobalt error: " + jsonRes.Text)
|
||||
}
|
||||
|
||||
if len(jsonRes.Url) > 0 {
|
||||
return &common.Uploadable{
|
||||
VideoUrl: jsonRes.Url,
|
||||
}, nil
|
||||
}
|
||||
if len(jsonRes.AudioUrl) > 0 && jsonRes.PickerType == "images" && len(jsonRes.Picker) > 0 {
|
||||
var imageUrls []string
|
||||
for _, i := range jsonRes.Picker {
|
||||
imageUrls = append(imageUrls, i.Url)
|
||||
}
|
||||
|
||||
return &common.Uploadable{
|
||||
ImagesWithAudio: &common.ImagesWithAudio{
|
||||
AudioUrl: jsonRes.AudioUrl,
|
||||
ImageUrls: imageUrls,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
return nil, errors.New("Faltan datos de cobalt")
|
||||
}
|
|
@ -28,11 +28,11 @@ func (r *TikTok) Respond(url *url.URL) (*common.Uploadable, common.Error) {
|
|||
|
||||
urlString := url.String()
|
||||
|
||||
lookup, err := r.lookup(urlString)
|
||||
lookup, err := r.cobaltLookup(urlString)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, common.HadError
|
||||
}
|
||||
|
||||
return &common.Uploadable{Url: lookup}, common.OK
|
||||
return lookup, common.OK
|
||||
}
|
||||
|
|
|
@ -42,5 +42,5 @@ func (r *TikTok) lookup(urlS string) (string, error) {
|
|||
if !lookup.Success {
|
||||
return "", errors.New(lookup.Message)
|
||||
}
|
||||
return "https://tikmate.app/download/" + lookup.Token + "/" + lookup.ID + ".mp4?hd=1", nil
|
||||
return "https://tikmate.app/download/" + lookup.Token + "/" + lookup.ID + ".mp4", nil
|
||||
}
|
||||
|
|
Reference in a new issue