diff --git a/go.mod b/go.mod index 118716b..6f36506 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.12 require ( github.com/Masterminds/goutils v1.0.1 - github.com/ahmdrz/goinsta/v2 v2.4.1-0.20190510152949-903ea3101245 + github.com/ahmdrz/goinsta/v2 v2.4.3 github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261 // indirect github.com/getsentry/raven-go v0.2.0 github.com/gorilla/feeds v1.1.1 diff --git a/go.sum b/go.sum index b196b5d..6768fcc 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/Masterminds/goutils v1.0.1 h1:upyB/JGR/aPHTE3f4O3mBIbJCr7aPup+/03IS4aXU6Y= github.com/Masterminds/goutils v1.0.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/ahmdrz/goinsta v0.0.0-20190729052829-bf558a94ed9d h1:a9WkfI+kd9zEhI0KDPgRMjQNgkFSs/4GudnkHppTwAA= +github.com/ahmdrz/goinsta v0.0.0-20190729052829-bf558a94ed9d/go.mod h1:ZDXgVWGZMWUpg9hZx5gmPmo4/XjT3vE3xFt7EG079NQ= github.com/ahmdrz/goinsta/v2 v2.4.1-0.20190323085700-ffd9e29a313a h1:lvtGW57Exf0L6PtsPNkKRIW9oY6bxPqVx1zr8KYTtfM= github.com/ahmdrz/goinsta/v2 v2.4.1-0.20190323085700-ffd9e29a313a/go.mod h1:M6/Tnc41f4gn+rl9HxFaNY1c6Px5zQWHgyY6S/wSZFs= github.com/ahmdrz/goinsta/v2 v2.4.1-0.20190510152949-903ea3101245 h1:W4UU/mMm1UKBCb0a+XpWPsVi3GB3aTiA1UlkwTR+VLU= diff --git a/vendor/github.com/ahmdrz/goinsta/v2/account.go b/vendor/github.com/ahmdrz/goinsta/v2/account.go index debe24a..0a426a8 100644 --- a/vendor/github.com/ahmdrz/goinsta/v2/account.go +++ b/vendor/github.com/ahmdrz/goinsta/v2/account.go @@ -420,3 +420,23 @@ func (account *Account) PendingFollowRequests() ([]User, error) { return result.Users, nil } + +// Archived returns current account archive feed +// +// For pagination use FeedMedia.Next() +func (account *Account) Archived(params ...interface{}) *FeedMedia { + insta := account.inst + + media := &FeedMedia{} + media.inst = insta + media.endpoint = urlUserArchived + + for _, param := range params { + switch s := param.(type) { + case string: + media.timestamp = s + } + } + + return media +} diff --git a/vendor/github.com/ahmdrz/goinsta/v2/const.go b/vendor/github.com/ahmdrz/goinsta/v2/const.go index 68bab9b..f3ff882 100644 --- a/vendor/github.com/ahmdrz/goinsta/v2/const.go +++ b/vendor/github.com/ahmdrz/goinsta/v2/const.go @@ -3,8 +3,8 @@ package goinsta const ( goInstaAPIUrl = "https://i.instagram.com/api/v1/" goInstaAPIUrlv2 = "https://i.instagram.com/api/v2/" - goInstaUserAgent = "Instagram 27.0.0.7.97 Android (24/7.0; 380dpi; 1080x1920; OnePlus; ONEPLUS A3010; OnePlus3T; qcom; en_US)" - goInstaIGSigKey = "109513c04303341a7daf27bb41b268e633b30dcc65a3fe14503f743176113869" + goInstaUserAgent = "Instagram 85.0.0.21.100 Android (24/7.0; 380dpi; 1080x1920; OnePlus; ONEPLUS A3010; OnePlus3T; qcom; en_US)" + goInstaIGSigKey = "937463b5272b5d60e9d20f0f8d7d192193dd95095a3ad43725d494300a5ea5fc" fbAnalytics = "567067343352427" igCapabilities = "3brTBw==" connType = "WIFI" @@ -21,6 +21,14 @@ var ( } ) +type muteOption string + +const ( + MuteAll muteOption = "all" + MuteStory muteOption = "story" + MuteFeed muteOption = "feed" +) + // Endpoints (with format vars) const ( // login @@ -51,10 +59,14 @@ const ( urlFollowing = "friendships/%d/following/" // users + + urlUserArchived = "feed/only_me_feed/" urlUserByName = "users/%s/usernameinfo/" urlUserByID = "users/%d/info/" urlUserBlock = "friendships/block/%d/" urlUserUnblock = "friendships/unblock/%d/" + urlUserMute = "friendships/mute_posts_or_story_from_follow/" + urlUserUnmute = "friendships/unmute_posts_or_story_from_follow/" urlUserFollow = "friendships/create/%d/" urlUserUnfollow = "friendships/destroy/%d/" urlUserFeed = "feed/user/%d/" diff --git a/vendor/github.com/ahmdrz/goinsta/v2/feeds.go b/vendor/github.com/ahmdrz/goinsta/v2/feeds.go index 371afaa..82c2074 100644 --- a/vendor/github.com/ahmdrz/goinsta/v2/feeds.go +++ b/vendor/github.com/ahmdrz/goinsta/v2/feeds.go @@ -70,7 +70,24 @@ func (feed *Feed) Tags(tag string) (*FeedTag, error) { } res := &FeedTag{} err = json.Unmarshal(body, res) - return res, err + if err != nil { + return nil, err + } + for i := range res.RankedItems { + res.RankedItems[i].media = &FeedMedia{ + inst: insta, + NextID: res.RankedItems[i].ID, + } + } + + for i := range res.Images { + res.Images[i].media = &FeedMedia{ + inst: insta, + NextID: res.Images[i].ID, + } + } + + return res, nil } // FeedTag is the struct that fits the structure returned by instagram on TagSearch. diff --git a/vendor/github.com/ahmdrz/goinsta/v2/go.mod b/vendor/github.com/ahmdrz/goinsta/v2/go.mod index 19b4793..0401952 100644 --- a/vendor/github.com/ahmdrz/goinsta/v2/go.mod +++ b/vendor/github.com/ahmdrz/goinsta/v2/go.mod @@ -1 +1,3 @@ -module github.com/ahmdrz/goinsta/v2 +module github.com/ahmdrz/goinsta + +go 1.12 diff --git a/vendor/github.com/ahmdrz/goinsta/v2/media.go b/vendor/github.com/ahmdrz/goinsta/v2/media.go index 1eed4bb..6bc301a 100644 --- a/vendor/github.com/ahmdrz/goinsta/v2/media.go +++ b/vendor/github.com/ahmdrz/goinsta/v2/media.go @@ -127,6 +127,7 @@ type Item struct { ShowOneTapFbShareTooltip bool `json:"show_one_tap_fb_share_tooltip"` HasSharedToFb int64 `json:"has_shared_to_fb"` Mentions []Mentions + Audience string `json:"audience,omitempty"` } // MediaToString returns Item.MediaType as string. @@ -484,6 +485,12 @@ func (item *Item) PreviewComments() []Comment { return nil } +// StoryIsCloseFriends returns a bool +// If the returned value is true the story was published only for close friends +func (item *Item) StoryIsCloseFriends() bool { + return item.Audience == "besties" +} + //Media interface defines methods for both StoryMedia and FeedMedia. type Media interface { // Next allows pagination diff --git a/vendor/github.com/ahmdrz/goinsta/v2/search.go b/vendor/github.com/ahmdrz/goinsta/v2/search.go index 2203a9b..1036e0e 100644 --- a/vendor/github.com/ahmdrz/goinsta/v2/search.go +++ b/vendor/github.com/ahmdrz/goinsta/v2/search.go @@ -2,6 +2,7 @@ package goinsta import ( "encoding/json" + "fmt" "strconv" "time" ) @@ -69,8 +70,12 @@ func newSearch(inst *Instagram) *Search { return search } -// User search by username -func (search *Search) User(user string) (*SearchResult, error) { +// User search by username, you can use count optional parameter to get more than 50 items. +func (search *Search) User(user string, countParam ...int) (*SearchResult, error) { + count := 50 + if len(countParam) > 0 { + count = countParam[0] + } insta := search.inst body, err := insta.sendRequest( &reqOptions{ @@ -78,7 +83,8 @@ func (search *Search) User(user string) (*SearchResult, error) { Query: map[string]string{ "ig_sig_key_version": goInstaSigKeyVersion, "is_typeahead": "true", - "query": user, + "q": user, + "count": fmt.Sprintf("%d", count), "rank_token": insta.rankToken, }, }, diff --git a/vendor/github.com/ahmdrz/goinsta/v2/users.go b/vendor/github.com/ahmdrz/goinsta/v2/users.go index 580aec8..d9cef13 100644 --- a/vendor/github.com/ahmdrz/goinsta/v2/users.go +++ b/vendor/github.com/ahmdrz/goinsta/v2/users.go @@ -298,6 +298,70 @@ func (user *User) Unblock() error { return nil } +// Mute mutes user from appearing in the feed or story reel +// +// Use one of the pre-defined constants to choose what exactly to mute: +// goinsta.MuteAll, goinsta.MuteStory, goinsta.MuteFeed +// This function updates current User.Friendship structure. +func (user *User) Mute(opt muteOption) error { + return muteOrUnmute(user, opt, urlUserMute) +} + +// Unmute unmutes user so it appears in the feed or story reel again +// +// Use one of the pre-defined constants to choose what exactly to unmute: +// goinsta.MuteAll, goinsta.MuteStory, goinsta.MuteFeed +// This function updates current User.Friendship structure. +func (user *User) Unmute(opt muteOption) error { + return muteOrUnmute(user, opt, urlUserUnmute) +} + +func muteOrUnmute(user *User, opt muteOption, endpoint string) error { + insta := user.inst + data, err := insta.prepareData( + generateMuteData(user, opt), + ) + if err != nil { + return err + } + body, err := insta.sendRequest( + &reqOptions{ + Endpoint: endpoint, + Query: generateSignature(data), + IsPost: true, + }, + ) + if err != nil { + return err + } + resp := friendResp{} + err = json.Unmarshal(body, &resp) + user.Friendship = resp.Friendship + if err != nil { + return err + } + + return nil +} + +func generateMuteData(user *User, opt muteOption) map[string]interface{} { + data := map[string]interface{}{ + "user_id": user.ID, + } + + switch opt { + case MuteAll: + data["target_reel_author_id"] = user.ID + data["target_posts_author_id"] = user.ID + case MuteStory: + data["target_reel_author_id"] = user.ID + case MuteFeed: + data["target_posts_author_id"] = user.ID + } + + return data +} + // Follow started following some user // // This function performs a follow call. If user is private diff --git a/vendor/modules.txt b/vendor/modules.txt index 9bc5682..2650850 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,6 +1,6 @@ # github.com/Masterminds/goutils v1.0.1 github.com/Masterminds/goutils -# github.com/ahmdrz/goinsta/v2 v2.4.1-0.20190510152949-903ea3101245 +# github.com/ahmdrz/goinsta/v2 v2.4.3 => github.com/ahmdrz/goinsta v0.0.0-20190729052829-bf558a94ed9d github.com/ahmdrz/goinsta/v2 # github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261 github.com/certifi/gocertifi