Skip to content

Commit

Permalink
Improved parameter parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
pikami committed Jan 21, 2020
1 parent 320e044 commit 6e0e39a
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 43 deletions.
49 changes: 6 additions & 43 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,62 +1,25 @@
package main

import (
client "./client"
models "./models"
utils "./utils"
"fmt"
"regexp"
"strings"
workflows "./workflows"
)

func main() {
models.GetConfig()
url := models.Config.URL

// Single video
match, _ := regexp.MatchString("\\/@.+\\/video\\/[0-9]+", url)
if match {
getUsernameFromVidURLRegex, _ := regexp.Compile("com\\/@.*")
parts := strings.Split(getUsernameFromVidURLRegex.FindString(url), "/")
username := parts[1][1:]
upload := client.GetVideoDetails(url)
downloadDir := fmt.Sprintf("%s/%s", models.Config.OutputPath, username)

utils.InitOutputDirectory(downloadDir)
downloadVideo(upload, downloadDir)
if workflows.CanUseDownloadSingleVideo(url) {
workflows.DownloadSingleVideo(url)
return
}

// Tiktok user
downloadUser()
}

func downloadVideo(upload models.Upload, downloadDir string) {
uploadID := upload.GetUploadID()
downloadPath := fmt.Sprintf("%s/%s.mp4", downloadDir, uploadID)

if utils.CheckIfExists(downloadPath) {
fmt.Println("Upload '" + uploadID + "' already downloaded, skipping")
if workflows.CanUseDownloadUser(url) {
workflows.DownloadUser(models.GetUsername())
return
}

fmt.Println("Downloading upload item '" + uploadID + "' to " + downloadPath)
utils.DownloadFile(downloadPath, upload.URL)

if models.Config.MetaData {
metadataPath := fmt.Sprintf("%s/%s.json", downloadDir, uploadID)
upload.WriteToFile(metadataPath)
}
}

func downloadUser() {
username := models.Config.URL
downloadDir := fmt.Sprintf("%s/%s", models.Config.OutputPath, username)
uploads := client.GetUserUploads(username)

utils.InitOutputDirectory(downloadDir)

for _, upload := range uploads {
downloadVideo(upload, downloadDir)
}
panic("Could not recognise URL format")
}
16 changes: 16 additions & 0 deletions models/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
"flag"
"fmt"
"os"
"regexp"
"strings"
)

// Config - Runtime configuration
Expand Down Expand Up @@ -32,3 +34,17 @@ func GetConfig() {
Config.Debug = *debug
Config.MetaData = *metadata
}

// GetUsername - Get's username from passed URL param
func GetUsername() string {
if match := strings.Contains(Config.URL, "/"); !match { // Not url
return strings.Replace(Config.URL, "@", "", -1)
}

if match, _ := regexp.MatchString(".+tiktok\\.com/@.+", Config.URL); match { // URL
stripedSuffix := strings.Split(Config.URL, "@")[1]
return strings.Split(stripedSuffix, "/")[0]
}

panic("Could not recognise URL format")
}
27 changes: 27 additions & 0 deletions workflows/downloadUser.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package workflows

import (
client "../client"
models "../models"
utils "../utils"
"fmt"
"strings"
)

// CanUseDownloadUser - Test's if this workflow can be used for parameter
func CanUseDownloadUser(url string) bool {
match := strings.Contains(url, "/")
return !match
}

// DownloadUser - Download all user's videos
func DownloadUser(username string) {
downloadDir := fmt.Sprintf("%s/%s", models.Config.OutputPath, username)
uploads := client.GetUserUploads(username)

utils.InitOutputDirectory(downloadDir)

for _, upload := range uploads {
downloadVideo(upload, downloadDir)
}
}
44 changes: 44 additions & 0 deletions workflows/downloadVideo.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package workflows

import (
client "../client"
models "../models"
utils "../utils"
"fmt"
"regexp"
)

// CanUseDownloadSingleVideo - Check's if DownloadSingleVideo can be used for parameter
func CanUseDownloadSingleVideo(url string) bool {
match, _ := regexp.MatchString("\\/@.+\\/video\\/[0-9]+", url)
return match
}

// DownloadSingleVideo - Downloads single video
func DownloadSingleVideo(url string) {
username := models.GetUsername()
upload := client.GetVideoDetails(url)
downloadDir := fmt.Sprintf("%s/%s", models.Config.OutputPath, username)

utils.InitOutputDirectory(downloadDir)
downloadVideo(upload, downloadDir)
}

// DownloadVideo - Downloads one video
func downloadVideo(upload models.Upload, downloadDir string) {
uploadID := upload.GetUploadID()
downloadPath := fmt.Sprintf("%s/%s.mp4", downloadDir, uploadID)

if utils.CheckIfExists(downloadPath) {
fmt.Println("Upload '" + uploadID + "' already downloaded, skipping")
return
}

fmt.Println("Downloading upload item '" + uploadID + "' to " + downloadPath)
utils.DownloadFile(downloadPath, upload.URL)

if models.Config.MetaData {
metadataPath := fmt.Sprintf("%s/%s.json", downloadDir, uploadID)
upload.WriteToFile(metadataPath)
}
}

0 comments on commit 6e0e39a

Please sign in to comment.