SocialDragon/instagram/main.go
2020-01-15 23:10:20 +01:00

125 lines
3.6 KiB
Go

package instagram
import (
"log"
"git.1750studios.com/AniNite/SocialDragon/database"
)
var running bool
var jobRunning bool
// LoadNewInstas gets new media from Instagram
func LoadNewInstas() {
if jobRunning {
return
}
jobRunning = true
log.Printf("Loading new Instas...")
var count int
if running {
count = 5
} else {
count = 1
running = true
}
token := ""
for i := 0; i < count; i++ {
list, err := LoadList(token)
if err != nil {
log.Printf("Can't load Instagram feed: %+v", err)
return
}
token = iterList(list)
if token == "" {
break
}
}
log.Printf("Finished looking for new Instas.")
jobRunning = false
}
func iterList(list *ListResponse) string {
var token string
for _, image := range list.Tag.Media.Nodes {
var count int
token = list.Tag.Media.PageInfo.EndCursor
post, err := LoadPost(image.Code)
if database.Db.Model(database.Item{}).Where("original_id = ?", post.Graphql.ShortcodeMedia.Shortcode).Count(&count); count > 0 {
token = ""
continue
}
if err != nil {
log.Printf("Can't load Instagram post %s: %+v", image.Code, err)
continue
}
if post.Graphql.ShortcodeMedia.IsAd {
continue
}
var US database.User
if database.Db.Model(database.User{}).Where("name = ? AND service = ?", post.Graphql.ShortcodeMedia.Owner.Username, database.Instagram).First(&US).Count(&count); count == 0 {
US.DisplayName = post.Graphql.ShortcodeMedia.Owner.FullName
US.Name = post.Graphql.ShortcodeMedia.Owner.Username
US.Service = database.Instagram
US.Blocked = false
database.Db.Create(&US)
}
if post.Graphql.ShortcodeMedia.IsVideo {
log.Printf("Found video %s from %s", post.Graphql.ShortcodeMedia.Shortcode, post.Graphql.ShortcodeMedia.Owner.Username)
name, uname := ImageNameGenerator(post.Graphql.ShortcodeMedia.Shortcode)
res, err := GetHTTPResource(post.Graphql.ShortcodeMedia.VideoURL)
if err != nil {
log.Printf("Can't load video %s: %+v", post.Graphql.ShortcodeMedia.Shortcode, err)
continue
}
defer res.Body.Close()
ext, err := DownloadMedia(res.Body, name, true)
if err != nil {
log.Printf("Can't load video %s: %+v", post.Graphql.ShortcodeMedia.Shortcode, err)
continue
}
log.Printf("Loaded video %s, location %s!", post.Graphql.ShortcodeMedia.Shortcode, uname+ext)
var IT database.Item
IT.UserID = US.ID
IT.Service = database.Instagram
if US.Blocked {
IT.State = database.Rejected
} else {
IT.State = database.Inbox
}
IT.IsVideo = true
IT.Path = uname + ext
IT.OriginalID = post.Graphql.ShortcodeMedia.Shortcode
database.Db.Create(&IT)
} else {
log.Printf("Found picture %s from %s", post.Graphql.ShortcodeMedia.Shortcode, post.Graphql.ShortcodeMedia.Owner.Username)
name, uname := ImageNameGenerator(post.Graphql.ShortcodeMedia.Shortcode)
res, err := GetHTTPResource(post.Graphql.ShortcodeMedia.DisplayURL)
if err != nil {
log.Printf("Can't load picture %s: %+v", post.Graphql.ShortcodeMedia.Shortcode, err)
continue
}
defer res.Body.Close()
ext, err := DownloadMedia(res.Body, name, false)
if err != nil {
log.Printf("Can't load picture %s: %+v", post.Graphql.ShortcodeMedia.Shortcode, err)
continue
}
log.Printf("Loaded picture %s, location %s!", post.Graphql.ShortcodeMedia.Shortcode, uname+ext)
var IT database.Item
IT.UserID = US.ID
IT.Service = database.Instagram
if US.Blocked {
IT.State = database.Rejected
} else {
IT.State = database.Inbox
}
IT.IsVideo = false
IT.Path = uname + ext
IT.OriginalID = post.Graphql.ShortcodeMedia.Shortcode
database.Db.Create(&IT)
}
}
return token
}