SocialDragon/instagram/main.go

108 lines
2.9 KiB
Go
Raw Normal View History

package instagram
import (
"log"
"git.1750studios.com/AniNite/SocialDragon/database"
)
func LoadNewInstas() {
log.Printf("Loading new Instas...")
token := ""
for i := 0; i < 5; 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.")
}
func iterList(list *InstagramListResponse) string {
var token string
for _, image := range list.Tag.Media.Nodes {
var count int
if database.Db.Model(database.Item{}).Where("original_id = ?", image.Code).Count(&count); count > 0 {
continue
}
token = list.Tag.Media.PageInfo.EndCursor
post, err := LoadPost(image.Code)
if err != nil {
log.Printf("Can't load Instagram post %s: %+v", image.Code, err)
continue
}
if post.Media.IsAd {
continue
}
var US database.User
if database.Db.Model(database.User{}).Where("name = ? AND service = ?", post.Media.Owner.Username, database.Instagram).First(&US).Count(&count); count == 0 {
US.DisplayName = post.Media.Owner.FullName
US.Name = post.Media.Owner.Username
US.Service = database.Instagram
US.Blocked = false
database.Db.Create(&US)
}
if post.Media.IsVideo {
log.Printf("Found video %s from %s", post.Media.Code, post.Media.Owner.Username)
name, uname := ImageNameGenerator(post.Media.Code)
res, err := GetHTTPResource(post.Media.VideoURL)
if err != nil {
log.Printf("Can't load video %s: %+v", post.Media.Code, 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.Media.Code, err)
continue
}
log.Printf("Loaded video %s, location %s!", post.Media.Code, 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.Media.Code
database.Db.Create(&IT)
} else {
log.Printf("Found picture %s from %s", post.Media.Code, post.Media.Owner.Username)
name, uname := ImageNameGenerator(post.Media.Code)
res, err := GetHTTPResource(post.Media.DisplaySrc)
if err != nil {
log.Printf("Can't load picture %s: %+v", post.Media.Code, 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.Media.Code, err)
continue
}
log.Printf("Loaded picture %s, location %s!", post.Media.Code, 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.Media.Code
database.Db.Create(&IT)
}
}
return token
}