2017-01-17 22:38:35 +00:00
package instagram
import (
"log"
"git.1750studios.com/AniNite/SocialDragon/database"
)
2017-01-20 21:07:54 +00:00
var running bool
2017-01-17 22:38:35 +00:00
func LoadNewInstas ( ) {
log . Printf ( "Loading new Instas..." )
2017-01-20 21:07:54 +00:00
var count int
if running {
count = 5
} else {
count = 1
running = true
}
2017-01-20 02:07:44 +00:00
token := ""
2017-01-20 21:07:54 +00:00
for i := 0 ; i < count ; i ++ {
2017-01-20 02:07:44 +00:00
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 {
2017-01-20 21:08:29 +00:00
token = ""
2017-01-17 22:38:35 +00:00
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
}
2017-05-07 14:50:13 +00:00
if post . Graphql . ShortcodeMedia . IsAd {
2017-01-17 22:38:35 +00:00
continue
}
var US database . User
2017-05-07 14:50:13 +00:00
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
2017-01-17 22:38:35 +00:00
US . Service = database . Instagram
US . Blocked = false
database . Db . Create ( & US )
}
2017-05-07 14:50:13 +00:00
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 )
2017-01-17 22:38:35 +00:00
if err != nil {
2017-05-07 14:50:13 +00:00
log . Printf ( "Can't load video %s: %+v" , post . Graphql . ShortcodeMedia . Shortcode , err )
2017-01-17 22:38:35 +00:00
continue
}
defer res . Body . Close ( )
ext , err := DownloadMedia ( res . Body , name , true )
if err != nil {
2017-05-07 14:50:13 +00:00
log . Printf ( "Can't load video %s: %+v" , post . Graphql . ShortcodeMedia . Shortcode , err )
2017-01-17 22:38:35 +00:00
continue
}
2017-05-07 14:50:13 +00:00
log . Printf ( "Loaded video %s, location %s!" , post . Graphql . ShortcodeMedia . Shortcode , uname + ext )
2017-01-17 22:38:35 +00:00
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
2017-05-07 14:50:13 +00:00
IT . OriginalID = post . Graphql . ShortcodeMedia . Shortcode
2017-01-17 22:38:35 +00:00
database . Db . Create ( & IT )
} else {
2017-05-07 14:50:13 +00:00
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 )
2017-01-17 22:38:35 +00:00
if err != nil {
2017-05-07 14:50:13 +00:00
log . Printf ( "Can't load picture %s: %+v" , post . Graphql . ShortcodeMedia . Shortcode , err )
2017-01-17 22:38:35 +00:00
continue
}
defer res . Body . Close ( )
ext , err := DownloadMedia ( res . Body , name , false )
if err != nil {
2017-05-07 14:50:13 +00:00
log . Printf ( "Can't load picture %s: %+v" , post . Graphql . ShortcodeMedia . Shortcode , err )
2017-01-17 22:38:35 +00:00
continue
}
2017-05-07 14:50:13 +00:00
log . Printf ( "Loaded picture %s, location %s!" , post . Graphql . ShortcodeMedia . Shortcode , uname + ext )
2017-01-17 22:38:35 +00:00
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
2017-05-07 14:50:13 +00:00
IT . OriginalID = post . Graphql . ShortcodeMedia . Shortcode
2017-01-17 22:38:35 +00:00
database . Db . Create ( & IT )
}
}
2017-01-20 02:07:44 +00:00
return token
2017-01-17 22:38:35 +00:00
}