2017-01-17 22:38:35 +00:00
|
|
|
package instagram
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
|
|
|
|
"git.1750studios.com/AniNite/SocialDragon/database"
|
|
|
|
)
|
|
|
|
|
|
|
|
func LoadNewInstas() {
|
|
|
|
log.Printf("Loading new Instas...")
|
2017-01-20 02:07:44 +00:00
|
|
|
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
|
|
|
|
}
|
2017-01-17 22:38:35 +00:00
|
|
|
}
|
2017-01-20 02:07:44 +00:00
|
|
|
log.Printf("Finished looking for new Instas.")
|
|
|
|
}
|
|
|
|
|
|
|
|
func iterList(list *InstagramListResponse) string {
|
|
|
|
var token string
|
2017-01-17 22:38:35 +00:00
|
|
|
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
|
|
|
|
}
|
2017-01-20 02:07:44 +00:00
|
|
|
token = list.Tag.Media.PageInfo.EndCursor
|
2017-01-17 22:38:35 +00:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|
2017-01-20 02:07:44 +00:00
|
|
|
return token
|
2017-01-17 22:38:35 +00:00
|
|
|
}
|